Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 构造一个KMP算法必须多次回溯的示例_Python_String_Algorithm - Fatal编程技术网

Python 构造一个KMP算法必须多次回溯的示例

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

我试图构造一个示例,其中对于某个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 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]
一致,这打破了前缀匹配模式。