サフィックスオートマトンSAM学習

SAM最近完成した学校が、実用的な実装、事前に既存のコード、書き込みノート(怠惰)明日されていません。
から学びます

struct SAM
{
    int maxlen[N],trans[N][26],link[N],tot,last;
    inline void extend(int id)
    {
        int cur=++tot,p;
        maxlen[cur]=maxlen[last]+1;
        for(p=last;p&&!trans[p][id];p=link[p]) trans[p][id]=cur;
        if(!p) link[cur]=1;
        else
        {
            int x=trans[p][id];
            if(maxlen[x]==maxlen[p]+1) link[cur]=x;
            else
            {
                int y=++tot;
                maxlen[y]=maxlen[p]+1;
                for(int i=0;i<26;i++) trans[y][i]=trans[x][i];
                link[y]=link[x];
                for(;p&&trans[p][id]==x;p=link[p]) trans[p][id]=y;
                link[cur]=link[x]=y;
            }
        }
        last=cur;
    }
}sam;

おすすめ

転載: www.cnblogs.com/Suiyue-Li/p/12633177.html