Python:Monte Carlo Rabin Karp搜索
我试图用Python实现Monte Carlo Rabin Karp搜索。 这就是我到目前为止所知道的随机素数是一个函数,它返回的素数小于给定的极限参数:Python:Monte Carlo Rabin Karp搜索,python,search,Python,Search,我试图用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
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
唯一的问题是,它似乎只匹配第一个或多个字符
e、 g.如果我调用search'01','101110001010101',我将找不到匹配项
或者如果我调用search'1'、'11111010100101',我会得到一个匹配项
或者,如果我调用搜索“0”,“000000 111000010101”,我将得到位置5的匹配项
代码是否有问题导致匹配错误?我不是天才,但我认为我找到了问题的根源。排队
r=2^m-1%q,据我所知,^不是创建指数函数的正确字符。在python中使用的正确字符应该是**,这样r=2**m-1%q。您的搜索现在应该打印除最后一个位置之外的所有位置。然后可以通过将
f[i + 1] = (2 * (f[i] - (r * int(text[i])))) + (int(text[i + m]) % q)
i += 1
break