在 C 中搜索子字符串
Searching a substring in C
假设我有一个很长的字符串,比如一个文件路径,我想在其中搜索一些东西。例如,类似 $ find
命令的内容。这似乎是一个基本的实现方式:
if(strstr(sent, word) != NULL) {
return 1;
}
这样做与 Boyer Moore 之类的操作之间会有任何性能差异吗?还是 strstr
已经做了同样高效的事情?
基本上,我有大约十亿个非常长的字符串,我希望基于最有效的子字符串实现对它们进行快速(大概)查找(无需任何索引)。我应该使用什么?
更新:举一个更具体的例子,假设我有十亿个文件路径要搜索:
/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
Boyer-Moore 和 Aho-Corasick 等高级搜索算法通过从要搜索的字符串中预先计算查找表来工作,这会导致启动时间很长。搜索像路径名这样小的东西不太可能弥补那么高的开销。在这些算法显示其价值之前,您确实必须搜索多页文档之类的东西。
假设我有一个很长的字符串,比如一个文件路径,我想在其中搜索一些东西。例如,类似 $ find
命令的内容。这似乎是一个基本的实现方式:
if(strstr(sent, word) != NULL) {
return 1;
}
这样做与 Boyer Moore 之类的操作之间会有任何性能差异吗?还是 strstr
已经做了同样高效的事情?
基本上,我有大约十亿个非常长的字符串,我希望基于最有效的子字符串实现对它们进行快速(大概)查找(无需任何索引)。我应该使用什么?
更新:举一个更具体的例子,假设我有十亿个文件路径要搜索:
/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
Boyer-Moore 和 Aho-Corasick 等高级搜索算法通过从要搜索的字符串中预先计算查找表来工作,这会导致启动时间很长。搜索像路径名这样小的东西不太可能弥补那么高的开销。在这些算法显示其价值之前,您确实必须搜索多页文档之类的东西。