关于后缀自动机的构造

来源:互联网 发布:关闭135 139 445端口 编辑:程序博客网 时间:2024/05/22 12:39

考虑构建一个后缀自动机(Suffix Automaton)

设当前已构建的字符串为T, 要添加新字符x, T的长度为L

设p为从init输入串T所到的状态 即满足Right(p) = {L}的结点p,

令np表示从init输入串Tx所到的状态

   Vp为p在parent树的祖先{V1, V2, ......, Vk = root}中第一个有x的转移的状态

   q = trans(Vp, x)

    分三种情况

<1> 并不存在Vp结点, 则par(np) = root

<2>满足Max(q) = Max(Vp) + 1, 则par(np) = q

<3>Max(q) > Max(Vp) + 1

新建一个节点nq, 使Right(nq) = Right(q) U Right(np) = Right(q) U {L + 1}

则 Max(nq) = Max(Vp) + 1

   par(nq) = par(q) , par(q) = par(np) = nq

       从新状态nq出去的转移同q出去的转移

       即 trans(nq, c) = trans(q, c)

       同时{Vp, ......, Vk = root}中转移到q的状态应转移到nq

          trans(Vp...k, x) == q ? trans(Vp...k, x) = nq :  ;

 

注: SAM构造的线性性、正确性证明以及运用详见《2012年noi冬令营陈立杰讲稿》

0 0
原创粉丝点击