字符串匹配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
。
固定尺寸的桌子已经过时了。您可能会使用 dict
或 HashMap
或任何您选择的语言来代替。
对于捕获所有 Unicode 字符的情况,这大大降低了表格的成本。事实上,它将空间使用率从O(v)
降低到O(min(v, n+m))
。
请小心使用哈希支持的数据结构,以免在运行时意外添加一些 log(v)
因子(或更糟)。
【讨论】:
以上是关于字符串匹配boyer moore..字符数的主要内容,如果未能解决你的问题,请参考以下文章