Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:Monte Carlo Rabin Karp搜索_Python_Search - Fatal编程技术网

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

我试图用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
唯一的问题是,它似乎只匹配第一个或多个字符

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