创建python源文件,在其中编写KMP 算法的程序,同时需实现模式串的ListNextValue 函数(即修正后的),具体如下: (1)在主串 S 中设置 KMP 算法匹配的起始位置,并实现 ListNextValue 函数。 (2)调用 ListNextValue 函数,求解模式串 T 的 ListNextValue 函数值。 (3)主串 S 调用 KMP 算法并以起始位置、模式串 T 及模式串 T 的 ListNextValue 函数值为参数,验证 KMP 算法的正确性。
时间: 2023-06-20 15:09:03 浏览: 131
详解小白之KMP算法及python实现
5星 · 资源好评率100%
以下是KMP算法的Python实现,包括模式串的ListNextValue函数:
```python
def ListNextValue(T):
"""
计算模式串T的ListNextValue数组
"""
n = len(T)
Next = [0] * n
Next[0] = -1
j = 0
k = -1
while j < n - 1:
if k == -1 or T[j] == T[k]:
j += 1
k += 1
if T[j] != T[k]:
Next[j] = k
else:
Next[j] = Next[k]
else:
k = Next[k]
return Next
def KMP(S, T, pos=0):
"""
KMP算法匹配模式串T在主串S中的位置
"""
n = len(S)
m = len(T)
if pos > n - m:
return -1
i = pos
j = 0
Next = ListNextValue(T)
while i < n and j < m:
if j == -1 or S[i] == T[j]:
i += 1
j += 1
else:
j = Next[j]
if j == m:
return i - m
else:
return -1
```
接下来,我们可以测试一下算法的正确性:
```python
S = "BBC ABCDAB ABCDABCDABDE"
T = "ABCDABD"
print(KMP(S, T)) # 输出 15
```
结果正确,说明我们的算法实现是正确的。
阅读全文