|
|
1
2
下面是一些N元树结构的示例代码;
注意,我为每个节点添加了一个终端标志;这避免了错误的部分匹配,即如果添加前缀3056124,它将正确匹配3056,而不是返回305612。 避免每次重新加载的最佳方法是将其转换为服务;然而,在这样做之前,我将使用APC测量运行时间。它很可能已经足够快了。 亚历克斯:你的答案绝对正确——但不适用于这个问题:) |
|
|
2
2
示例代码:(注意,对于性能而言,前缀是数组中的键,而不是值)
另一种方法是直接查询缓存中的数字-在这种情况下,可以进一步优化:
|
|
|
3
1
您可以执行二进制搜索算法。如果您存储所有前缀(数字),填充到15个位置,然后按顺序,您可以在大约log2(6000)~=13个步骤中扫描6000个代码。 例如,如果您有以下代码:
这些步骤将是:
一些示例代码可以查看它的实际操作:
|
|
|
4
0
实际上,我还有一轮正则表达式,用于更复杂的目标,并在目标前缀之前检查正则表达式。 我还没有测量需要多长时间才能找到匹配,但我怀疑最长15毫秒。检查设计、用户余额以及最终设置通话时间限制的整个过程大约需要150毫秒。就我而言,我使用的是FastAGI和C#Windows服务。只要你的时间少于500毫秒,你的用户就无法察觉。 |
|
|
5
0
我还假设您也在寻找国家代码。只有少数国家代码与NANP重叠。因此,我首先查找NANP,并快速匹配以下数字(7)以确保,否则我会使用国家代码。然后,通过正则表达式,我大致知道每个国家的电话号码中应该有多少个数字。 我使用一个XML文档并匹配XPath,然后尽可能缓存XPath结果。 使用RESTAPI最酷的一点是,在我将数字存储在DB中进行计费之前,它可以用来清理数字。
|
|
|
6
0
寻找最长公共子序列是动态规划的一个经典应用。解为O(n)。 http://en.wikipedia.org/wiki/Longest_common_subsequence_problem |
|
Sweepy Dodo · JSON lite的格式化 1 年前 |
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
Zegarek · Postgresql递归查询未提供预期结果 1 年前 |
|
|
Joe · 为什么这两个查询之间的性能存在如此大的差异? 2 年前 |
|
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 2 年前 |