java - 寻找一种更快的方法来执行字符串搜索

标签 java perl optimization search

我必须识别大量 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/

相关文章:

optimization - Hadoop计数器-调整和优化

mysql - MyISAM:如何在运行 DELETE 的情况下进行 SELECT 而无需锁定等待?

java - Android 等效于 .NET UserControl

java - 在 Spring Boot 上关闭 DispatcherServlet

java - 类未注入(inject) IEclipseContext

regex - 这个正则表达式是如何工作的?

java - 为用户定义的 Oracle 表类型编写 MyBatis3 TypeHandler

mysql - 如何在 Perl 中用一个连接字符串连接 mysql 数据库和 Sybase 数据库?

regex - 如何使用 m!在 Perl 正则表达式中

javascript - (看似)类中函数的冗余命名