繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM