rabin karp算法中的“h”代表啥?

Posted

技术标签:

【中文标题】rabin karp算法中的“h”代表啥?【英文标题】:What does "h" represent in rabin karp algorithm?rabin karp算法中的“h”代表什么? 【发布时间】:2016-04-29 10:05:55 【问题描述】:
t(s+1) = (d*(t(s) -T[s+1]h) + T[s+m+1])mod q

d 是字母的大小T[1...n] 是要搜索的文本P[1...m] 是模式(m 是模式的大小)q 是一个素数

h = d^m-1 (mod q)是m位文本窗口高位数字“1”的值。

这条线是什么意思? h 代表什么?

【问题讨论】:

【参考方案1】:

您应该首先查看一个更简单的情况,其中d10,并且文本仅包含09 之间的数字。

h 是您用于左移高位数字的值。例如,假设m3T = 2345。从234,可以计算出345如下:

345 = 10*(234 - 2*100) + 5

您可以看到,在这种情况下,h = 100 用于将 2 移动 2 位,然后再从 234 中减去它。注意h的值为h = 10<sup>3-1</sup>

现在,您可以将这个想法推广到任何d,并得到h = d<sup>m-1</sup>

然后,通过进行模运算,您只需在每次计算任何值时添加mod q

【讨论】:

以上是关于rabin karp算法中的“h”代表啥?的主要内容,如果未能解决你的问题,请参考以下文章

Rabin-Karp 算法:为啥 h=(h*d)%q

PHP 中的 Rabin-Karp 算法

C# 中的 Rabin-Karp 算法 [关闭]

Rabin Karp 在 Ruby 中的实现太慢了

使用 Rabin-Karp 搜索字符串中的多个模式

字符串 Rabin-Karp 基本数字符号