【问题标题】:string matching boyer moore..number of characters字符串匹配boyer moore..字符数
【发布时间】: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

【问题讨论】:

    标签: string algorithm pattern-matching string-matching boyer-moore


    【解决方案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) 因子(或更糟)。

    【讨论】:

      猜你喜欢
      • 2016-07-25
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      相关资源
      最近更新 更多