【发布时间】:2020-01-01 01:11:03
【问题描述】:
假设我有一个很长的字符串,比如一个文件路径,我想在其中搜索一些东西。例如,$ 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
【问题讨论】:
-
我发现了一个可能对你有用的帖子:stackoverflow.com/questions/3183582/…
-
十亿个很长的字符串?比如,100 GB 的数据?你肯定需要比线性搜索更好的东西......
-
@ggorlen 当然,我已经看过了——这就是我获得上述链接的地方。我的问题更多是(重新)实现 Boyer-Moore 与使用
strstr- 我需要重新执行 Boyer-Moore 还是 strstr 已经这样做了? -
"a filepath" 不是长字符串。在 Linux 上通常少于 4096 个字符(例如
PATH_MAX字符),在 Windows 上是 512 个字符。在这样的字符串上调用strstr十亿次将与其他任何事情一样有效(而且比您自己编写的东西更不容易出错)
标签: c algorithm performance boyer-moore