字符串匹配boyer moore..字符数

Posted

技术标签:

【中文标题】字符串匹配boyer moore..字符数【英文标题】:string matching boyer moore..number of characters 【发布时间】:2020-07-31 14:47:21 【问题描述】:

在许多使用 Boyer moore 算法的例子中,有一个 256 个字符的声明,我不知道这个数字代表什么..请帮助

来自 (https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore%E2%80%93Horspool_algorithm) 的示例:

function preprocess(pattern)
    T ← new table of 256 integers
    for i from 0 to 256 exclusive
        T[i] ← length(pattern)
    for i from 0 to length(pattern) - 1 exclusive
        T[pattern[i]] ← length(pattern) - 1 - i
    return T

【问题讨论】:

【参考方案1】:

声明字母表中有256 个字符。

这一字节限制对于 ASCII 来说非常有效。但是如果您需要 Unicode,那么您还需要在表 T 中提供更多空间。事实上,这种空间依赖性对于算法的分析是必不可少的。

正如***文章所说:

该算法以空间换时间,以便在随机文本上获得O(n) 的平均情况复杂度,尽管在最坏的情况下它具有O(nm),其中模式的长度为m,长度为搜索字符串是n

Boyer-Moore 平均是O(n+m),所以理论上更快。在最好的情况下它们是相同的,在病理情况下,BMH 可能比 BM 更容易出轨。但在实践中,Boyer-Moore-Horspool 的实现速度更快,因为它明智地使用了空间。这让我们回到那张桌子T

固定尺寸​​的桌子已经过时了。您可能会使用 dictHashMap 或任何您选择的语言来代替。

对于捕获所有 Unicode 字符的情况,这大大降低了表格的成本。事实上,它将空间使用率从O(v) 降低到O(min(v, n+m))

请小心使用哈希支持的数据结构,以免在运行时意外添加一些 log(v) 因子(或更糟)。

【讨论】:

以上是关于字符串匹配boyer moore..字符数的主要内容,如果未能解决你的问题,请参考以下文章

Boyer Moore算法(字符串匹配)

字符串匹配的Boyer-Moore(BM)算法

字符串匹配的 Boyer-Moore 算法

字符串匹配的 Boyer-Moore 算法

Boyer-Moore算法

哪个是更好的字符串搜索算法? Boyer-Moore 还是 Boyer Moore Horspool? [关闭]