关于后缀自动机的构造

考虑构建一个后缀自动机(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值