首先我对算法知之甚少,所以请容忍我。
据我所知,Boyer-Moore算法是最快的长密钥算法如果我有一个非常短的键(例如10个字符)和大量要搜索的文本(超过10000个字符),该怎么办?
对于这个场景,Boyer-Moore会是最好的搜索算法吗?
如果不是,会是什么?
最佳答案
根据String searching algorithm,“boyer–moore字符串搜索算法一直是实际字符串搜索文献的标准基准。”它并不总是最快的,但总的来说,这是一条路要走。
knuth-morris-pratt和boyer-moore在运行时间上非常接近,当你谈到一个小的文本缓冲区,比如10000个字符。在现代计算机上运行时,即使是简单的字符串搜索也会在10公里的缓冲区上盲目地快速。我想你会发现KMP和Boyer-Moore两个在10000个字符的缓冲区中搜索10个字符的字符串之间的差别大约是毫微秒。
这个场景中最好的搜索算法是什么?这取决于你需要多久打一次电话。如果它是每秒被调用几次(最多),我可能会写一个天真的搜索,然后把它留在那里。与程序的运行时间相比,boyer-moore和naive search在这个小缓冲区上的差别是微不足道的,而且优化工作最好花在其他地方。如果我必须每秒调用数百或数千次,我会花时间编写一个优化的Boyer-Moore搜索。
关于string - 博耶·摩尔(Boyer Moore)寻找小 key ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7585597/