[英]Construct an example where the KMP algorithm has to backtrack multiple times
我正在尝试构建一个示例,其中kmp算法 computeLPSArray
阶段将不得不为某个i(LPS阵列中的单元格)多次回溯(见下面的注释)。
例如,对于'AAACAAA'
它在i = 3
时访问回溯部分两次,对于i = 7
则访问一次
你可以帮我构建一个字符串,它会访问回溯部分3-4次,对于某个i
?
def computeLPSArray(pat, M, lps):
len = 0 # length of the previous longest prefix suffix
lps[0]=0 # lps[0] is always 0
i = 1
while i < M:
if pat[i]==pat[len]:
len+=1
lps[i] = len
i+=1
else:
if len!=0:
# backtrack section - When will we get here 3-4 times for the same i???
len = lps[len-1]
else:
lps[i] = 0
i+=1
使用'AAAACAA'
它会在i = 4
时访问回溯部分3次。
使用'AAAAACA'
它会在i = 5
时访问回溯部分4次。
正如您已经提到的:当i = 3
时,您的示例字符串AAACAAA
已经访问了回溯部分2次。
如果您想增加访问次数,请增加前缀中的A
数,例如
AAAAC
将访问回溯部分3次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.