我正在嘗試在Python中實現蒙特卡羅Rabin-Karp搜索。 這是我迄今爲止(random_prime就是比返回給定的極限arguement少一個素數的函數):Python:Monte Carlo Rabin-Karp搜索
def search(pattern, text):
m = len(pattern)
n = len(text)
q = random_prime(m*n*n)
r = (2^(m - 1)) % q
f = []
for x in range (0, n + 1):
f.append(0)
pFinger = 0
for j in range(0, m):
f[0] = (2 * f[0]) + (int(text[j]) % q)
pFinger = (2 * pFinger) + (int(pattern[j]) % q)
i = 0
while (i + m) < n:
if (f[i] == pFinger):
print "Match at position " + str(i)
f[i + 1] = (2 * (f[i] - (r * int(text[i])))) + (int(text[i + m]) % q)
i += 1
唯一的問題是,它似乎只匹配第一個字符或字符。
例如如果我打電話搜索('01','101110001010101'),我找不到匹配。
或者如果我打電話搜索('1','111110110100101'),我會得到一個匹配。
或者,如果我把搜索(「0」,「0000001110001010101」)我起牀匹配定位5.
有什麼不妥導致它無法正確匹配的代碼?
這是可以調試這個給你,但它不會幫助你多少。 嘗試將打印輸出添加到您的代碼中。例如,在每次迭代中,打印出什麼是指紋。 –