后缀自动机的自我消化
来源:互联网 发布:数据电路端接设备 编辑:程序博客网 时间:2024/05/01 23:59
看了
http://hi.baidu.com/myidea/item/142c5cd45901a51820e25039
大神的blog,再更具自己的理解,借用大神的图,梳理一下自己对后缀自动机的建树过程的理解。
p -> a -> b
灰线为建树的时候,当在a后面加入b时,根据a的指向,从a开始遍历没加入b状态下的所有后缀字符串,
设a灰线箭头指向点为a的parent为点p。
下面有两种情况:
情况一:p有没有一个孩子为b,则可以从p直接连一根黑线指向刚加入的b。之后再从右至左回溯到p的parent。
情况二:p已有一个孩子为b,则分两种情况:
(1):p为空结点S,则刚加入的点b可以直接连一根灰线指向已有的点b。这样表明刚加入的后缀b,
可以用已有的b点来替代。
(2):p不为空结点S,如果也像上面那样,从刚加入的点b直接连一根灰线指向已有的点b。当这个已有的
b点还有除了p点以外的点m指向它,那么当刚加入点b后面还有一个点c,从S点dfs的时候就可能搜索
出不存在的mbc后缀字符串,所以这时候必须新建一个b点来替代这两个b点。具体怎么操作可直接看下面 的图变化。
1.首先神马都没有:
自动机就变成了如下:
自动机成了这样:
代码什么的如下:
插入一个节点:
- 后缀自动机的自我消化
- 后缀自动机的构造
- 后缀自动机的构造
- 【后缀自动机-后缀树上的维护】hdu4641
- 后缀排序 后缀自动机的应用
- 后缀自动机的程序实现
- 后缀自动机实现的例子
- 后缀自动机的直观理解
- 关于后缀自动机的构造
- 后缀自动机
- 后缀自动机
- 后缀自动机
- 后缀自动机
- 后缀自动机)
- 后缀自动机
- 后缀自动机
- 后缀自动机
- 后缀自动机
- Invoke 和 BeginInvoke
- 二分查找法
- C# Lambda表达式
- HDOJ 4750 - Count The Pairs 并查集
- 【荐】25 Hardening Security Tips for Linux Servers
- 后缀自动机的自我消化
- 动态调整linux分区大小——lvm
- HDU-4751-Divide Groups
- div设置浮动后为什么无法撑开外层div高度的解决办法,div清除浮动高级用法
- c++中的函数
- 关于我自己
- GDB中应该知道的几个调试方法
- HDU 4752
- URI和URL的区别