我正在實現Rabin-Karp算法。我碰到這個僞代碼:Python:Rabin-Karp算法哈希
RABIN -KARP -MATCHER (T, P, d, q)
1 n = T.length
2 m = P.length
3 h = d^(m-1) mod q
4 p=0
5 t= 0
6 for i = 1 to m
/preprocessing
/
7 p = (dp + P [i]) mod q
8 t = (dt + T [i]) mod q
9 for s = 0 to n-m
/matching
/
10 if p == t
11 if P [1... m] == T [s + 1...s + m]
12 print 「Pattern occurs with shift」 s
13 if s < n-m
14 t = (d(t-T[s + 1]h) + T [s + m + 1]) mod q
我在Python 2.7中實現像這樣:
def Rabin_Karp_Matcher(text, pattern, d, q):
n = len(text)
m = len(pattern)
h = pow(d,m-1)%q
p = 0
t =0
result = []
for i in range(m): # preprocessing
p = (d*p+ord(pattern[i]))%q
t = (d*t+ord(text[i]))%q
for s in range(n-m):
if p == t: # check character by character
match = True
for i in range(m):
if pattern[i] != text[s+i]:
match = False
break
if match:
result = result + [s]
if s < n-m:
t = (d*(t-ord(text[s+1])*h)+ord(text[s+m]))%q #index out of bounds here
return result
,其中結果是包含模式的文本索引列表。
我的代碼無法在3141592653589793 中找到26,我懷疑它與我僞代碼第14行定義的哈希碼有關。任何人都可以請幫忙。字符
的P = 「26」 T = 「3141592653589793」 d = 257 Q = 11
P和T必須是字符串/數組:
我在以下paramters傳遞
這太棒了!謝謝。 – SeekingAlpha
所以,在僞代碼中存在錯誤,對吧?散列計算中缺少模塊。因爲它來自Kormen算法書,它很奇怪,那裏有一個錯誤,我花了一些時間試圖在我的代碼或理解中發現錯誤,以及從我能看到的錯誤 - 公式本身中存在錯誤。 –