美文网首页
数算第四章书面作业

数算第四章书面作业

作者: 细雨沉沙 | 来源:发表于2018-10-21 21:49 被阅读0次

    4.1

    string A,B;                 //采用类似于kmp算法中求next数组的情况,只不过这次next数组保存的是最长前缀和后缀的值 
    int next[B.length()+1];
    if(B[0]==A[0])
    next[0]=1;//先初始化第一个值如果相同就l=1,否则l=0 
    else
    next[0]=0;
    int k=next[0]; 
    int m=B.length();
    for(int i=1;i<m;i++)
    {
        if(B[i]=A[k])//如果相等l值加1 
        next[i]=next[i-1]+1;
        else//不相等就移位比较 
        {
            while(k>0&&B[i]!=A[k])
            {
                k=next[k];
            }
            k++;
            next[i]=k;
        }
    }
    int result=next[B.length()-1];//最终结果就为next数组最后一个值 
    

    算法的复杂度为O(n)

    4.2

    非优化算法:
    当p[k]=p[j]时,最长前缀和最长后缀都加一,next[i]=k+1正确;
    若p[k]!=p[j],此时将p作为目标,第k个失配,便要将串向右移,让p[next[k]]来跟p[i]匹配,便是递归过程,直到二者相等或者k等于零
    优化算法:
    在非优化算法的基础上,若p[i]==p[k],在p[i]跟T[j]失配时,因为按照非优化算法,p需要右移使p[k]跟T[j]相匹配,但是由于p[i]等于p[k]所以p[k]必定失配,所以需要再右移使得p[next[k]]来配,故next[i]=next[k]合理

    相关文章

      网友评论

          本文标题:数算第四章书面作业

          本文链接:https://www.haomeiwen.com/subject/mxqbzftx.html