【发布时间】:2015-10-15 07:08:32
【问题描述】:
我正在尝试在 Python 中实现 Monte Carlo Rabin-Karp 搜索。 这是我目前所拥有的(random_prime 是一个返回小于给定极限参数的素数的函数):
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
唯一的问题是,它似乎只匹配第一个或多个字符。
例如如果我调用 search('01', '101110001010101'),我找不到匹配项。
或者如果我调用 search('1', '111110110100101') 我会得到一个匹配项。
或者如果我调用 search('0', '0000001110001010101') 我会得到匹配到位置 5。
导致匹配不正确的代码是否有问题?
【问题讨论】:
-
可以为你调试这个,但对你帮助不大。尝试将打印输出添加到您的代码中。例如,在每次迭代中,打印出什么是指纹。