0

假设我有一个很长的字符串,比如一个文件路径,我想在其中搜索一些东西。例如,类似$ find命令的东西。这似乎是一个基本的实现方式:

if(strstr(sent, word) != NULL) {
    return 1;
}

这样做和像Boyer Moore这样的事情会有什么性能差异吗?还是strstr已经做了同样有效的事情?

基本上,我有大约十亿个非常长的字符串,我希望基于最有效的子字符串实现对它们进行快速(ish)查找(没有任何索引)。我应该使用什么?


更新:举一个更具体的例子,假设我有十亿个文件路径要搜索:

/archive/1002/myfile.txt
/archive/1002/newer.mov
/user/tom/local_2014version1.mov

从这里我会搜索一个或多个字符串。示例示例为:

"1002" // would return the first two fileds
"mov version tom" // would return the first row
4

1 回答 1

2

Boyer-Moore 和 Aho-Corasick 等高级搜索算法通过从要搜索的字符串中预先计算查找表来工作,这会导致大量的启动时间。搜索像路径名这样小的东西不太可能弥补如此高的开销。在这些算法显示其价值之前,您确实必须搜索多页文档之类的内容。

于 2019-08-27T21:03:10.840 回答