我在 python 中的计算前缀函数实现给出了错误的结果
My Compute Prefix Function implementation in python gives false result
我在 Python 中实现了 Compute-Prefix-Function,但它给了我错误的结果(我是 python 中的初学者)
有人可以帮助我与伪代码相比,我的实现有什么问题吗?
def pi_prefix_fuggveny(pattern):
P = list(pattern)
m = len(P)
a = [0] * m
k = 0
for q in range(2, m):
while k > 0 and P[k+1] != P[q]:
k = a[k]
if P[k+1] == P[q]:
k = k + 1
a[q] = k
return a
print pi_prefix_fuggveny("ababaca")
结果是:[0, 0, 0, 1, 2, 0, 0]
。
但是正确的结果一定是:[0, 0, 1, 2, 3, 1, 1]
问题是您链接的论文使用的是 1 索引数组,而我们通常在编码世界中使用 0 索引数组。我相应地调整了索引:
def pi_prefix_fuggveny(pattern):
P = list(pattern)
m = len(pattern)
a = [0] * m
k = 0
for q in range(2, m + 1):
while k > 0 and P[k] != P[q - 1]:
k = a[k - 1]
if P[k] == P[q - 1]:
k += 1
a[q - 1] = k
return a
print(pi_prefix_fuggveny("ababaca"))
我也觉得论文写错了,输出应该是:
[0, 0, 1, 2, 3, 0, 1]
(正如该程序生成的那样),而不是
[0, 0, 1, 2, 3, 1, 1]
我在 Python 中实现了 Compute-Prefix-Function,但它给了我错误的结果(我是 python 中的初学者) 有人可以帮助我与伪代码相比,我的实现有什么问题吗?
def pi_prefix_fuggveny(pattern):
P = list(pattern)
m = len(P)
a = [0] * m
k = 0
for q in range(2, m):
while k > 0 and P[k+1] != P[q]:
k = a[k]
if P[k+1] == P[q]:
k = k + 1
a[q] = k
return a
print pi_prefix_fuggveny("ababaca")
结果是:[0, 0, 0, 1, 2, 0, 0]
。
但是正确的结果一定是:[0, 0, 1, 2, 3, 1, 1]
问题是您链接的论文使用的是 1 索引数组,而我们通常在编码世界中使用 0 索引数组。我相应地调整了索引:
def pi_prefix_fuggveny(pattern):
P = list(pattern)
m = len(pattern)
a = [0] * m
k = 0
for q in range(2, m + 1):
while k > 0 and P[k] != P[q - 1]:
k = a[k - 1]
if P[k] == P[q - 1]:
k += 1
a[q - 1] = k
return a
print(pi_prefix_fuggveny("ababaca"))
我也觉得论文写错了,输出应该是:
[0, 0, 1, 2, 3, 0, 1]
(正如该程序生成的那样),而不是
[0, 0, 1, 2, 3, 1, 1]