首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

后缀自动机的自小弟我消化

2013-09-25 
后缀自动机的自我消化看了http://hi.baidu.com/myidea/item/142c5cd45901a51820e25039大神的blog,再更具自

后缀自动机的自我消化
看了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.首先神马都没有:

后缀自动机的自小弟我消化


后缀自动机的自小弟我消化


自动机就变成了如下:

后缀自动机的自小弟我消化


自动机成了这样:

后缀自动机的自小弟我消化


后缀自动机的自小弟我消化

后缀自动机的自小弟我消化

后缀自动机的自小弟我消化

代码什么的如下:

插入一个节点:

后缀自动机的自小弟我消化


热点排行