Я пытаюсь реализовать поиск в Карте Рабина-Карпа в Python. Это то, что я до сих пор (random_prime это функция, которая возвращает простое число меньше предельного arguement заданного):Python: Monte Carlo Rabin-Karp search
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.
Есть ли что-то не так с кодом, который вызывает его, чтобы соответствовать неправильно?
Это можно отладить это для вас, но это не поможет вам много. Попробуйте добавить распечатки в свой код. На каждой итерации, например, распечатывайте, что такое отпечаток пальца. –