string - 为什么在文本编辑器的查找功能中选择 "BM algorithm"而不是 "Sunday algorithm"?

标签 string algorithm language-agnostic full-text-search

enter image description here

在随机字符下,Sunday算法比bm算法更快。

那么,为什么在文本编辑器的查找功能中选择“BM算法”而不是“Sunday算法”呢?

最佳答案

对于为什么选择其中一个而不是另一个没有简单的答案。 “BM”指的是“Boyer-Moore”。 “Sunday”算法是指 Boyer-Moore-Horspool 的 Sunday 变体。

正如您可能从名称中猜到的那样,周日的 Boyer-Moore-Horspool 变体与 Boyer-Moore 非常相似。

说实话,人们选择周日变体的主要原因与执行速度无关。相反,它的实现要简单得多。原始的 Boyer-Moore 算法要完全正确是极其困难的。周日的变体也不完全是微不足道的,但它仍然简单得多。

支持 Boyer-Moore 的论点是,尽管代码更复杂,但它将搜索所需的比较次数减少到接近绝对必要的最小值。最大的问题是它需要更多的预处理(和更多的内存)才能做到这一点。

您可以找到在执行速度方面对其中一种有利的情况(但是,从我所见)在文本编辑器中使用搜索可能倾向于支持周日的 Boyer-Moore-Horspool 变体。

关于string - 为什么在文本编辑器的查找功能中选择 "BM algorithm"而不是 "Sunday algorithm"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45473334/

相关文章:

java - Android (Java) 转换 hh :mm:ss time String into a number representation

php - 如何分割包含下划线、破折号和空格的字符串

algorithm - 读取 N 个单词并打印所有字谜的算法

language-agnostic - 为什么高级语言中缺少这么多数据结构?

language-agnostic - 什么是功能分解?

python:拆分字符串而不丢弃任何内容

algorithm - 如何生成匹配模式的数字序列?

c - 具有最小复杂度的 Anagram 算法

algorithm - 针对多种模式进行高效字符串匹配的数据结构

python - 带字符串输出的递归计数