Python 构造一个KMP算法必须多次回溯的示例
我试图构造一个示例,其中对于某个I(LPS数组中的单元格),Python 构造一个KMP算法必须多次回溯的示例,python,string,algorithm,Python,String,Algorithm,我试图构造一个示例,其中对于某个I(LPS数组中的单元格),computeLPSArray阶段必须多次回溯(见下面的注释) e、 g.对于'AAACAAA'它访问回溯部分两次,访问i=3,访问i=7 你能帮我构造一个字符串,它将访问某个i的回溯部分3-4次吗 def computeLPSArray(pat, M, lps): len = 0 # length of the previous longest prefix suffix lps[0]=0 # lps[0] is al
computeLPSArray
阶段必须多次回溯(见下面的注释)
e、 g.对于'AAACAAA'
它访问回溯部分两次,访问i=3
,访问i=7
你能帮我构造一个字符串,它将访问某个i
的回溯部分3-4次吗
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
def计算阵列(pat、M、lps):
len=0#前一个最长前缀后缀的长度
lps[0]=0#lps[0]始终为0
i=1
而我
使用'AAAACAA'
它访问回溯段3次,时间i=4
使用
'aaaaa ca'
它访问回溯部分4次,时间i=5
如您所述:您的示例字符串AAACAAA
在i=3
时已访问回溯部分2次
如果要增加访问次数,请增加前缀中的A
,例如
AAAAC
将访问回溯部分3次。哦,太好了。你能告诉我如何构造一个例子,其中回溯发生多次,但len没有达到0吗?(我知道我在这里问了很多问题,我就是不知道该算法是怎么回事,也不知道该算法是怎么实现的)。谢谢@ihadanny:With
'abababababababababababaaa'
它为i=21
回溯三次,但是len只下降到3,而不是0(它从16开始,回溯到11,然后是6,然后是3)。它在3停止,因为pat[3]
是A
,这与pat[21]
一致,这打破了前缀匹配模式。