【发布时间】:2019-08-15 09:36:49
【问题描述】:
我见过这种算法的几种实现,例如具有 2 个计数器和迭代前缀的一种或使用递归的一种。但是,我对使用动态编程的理解有些困难。
由于我的知识浅薄,这是我设法想出的:
def sufperf(S):
Pi = [0 for i in range(len(S))]
for i in range(1, len(S)):
p = Pi[i - 1]
while p > 0 and S[i] != S[p]:
p = Pi[p-1]
if S[i] == S[p]:
p += 1
Pi[i] = p
return Pi
def KMP(S, subS):
NewS = subS + "#" + S
SuperS = sufperf(NewS)
k = 0
for i in SuperS:
if i == len(subS):
k += 1
return k
我很难完全理解 KMP 函数中的逻辑。 有人可以帮忙吗?
【问题讨论】:
-
你对 S, subS 的输入是什么
-
我用 S = "abcdaaabcabcaa" 和 subS = "abc", S = "假设你有一个由 99 个数字组成的数组。该数组包含 1 到 100 的数字,但缺少一个数字。描述四种不同的算法来计算缺失数。其中两种应该针对低存储进行优化,其中两种应该针对快速处理进行优化。潜艇=“失踪”
-
KMP 不是基于动态规划的算法