我必须识别大量 URL(几百万行)是否属于特定类别。我有另一个列表,其中包含如果 URL 中存在则属于该类别的子字符串。比如说,A 类。
要检查的子字符串列表大约有 10k 个这样的子字符串。我所做的只是在子字符串文件中逐行查找匹配项,如果发现该 URL 属于类别 A。我在测试中发现这相当耗时。
我不是计算机科学专业的学生,所以对优化算法了解不多。但是有没有办法让它更快?只是简单的想法。编程语言不是大问题,但 Java 或 Perl 会更可取。
要匹配的子字符串列表不会有太大变化。但是,我会收到不同的 URL 列表,因此每次我都必须运行它。瓶颈似乎是 URL,因为它们可能会变得很长。
最佳答案
是的,我实现了 Aho-Corasick algorithm Java 中针对您提出的问题的算法,它显示了在原始实现(您正在做的事情)上大约 x180 的持续改进。 网上有几种实现,但我会调整它们以获得更好的性能。 请注意,解决方案的复杂性受单词长度(在您的情况下为 URL)的限制,而不是子字符串的数量。此外,它平均只需要一次匹配即可。
P.S - 我们过去常常在求职面试中向人们提出这个问题,所以有很多方法可以解决。我提供的解决方案是我们在生产代码中使用的解决方案,(目前)优于所有其他解决方案。
修改:之前写错了算法名,修正...
关于java - 寻找一种更快的方法来执行字符串搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5645882/