【总结】字符串匹配: ac自动机
2012-04-03 00:24
190 查看
首行用来ym hh大牛..Orz
http://www.notonlysuccess.com/index.php/aho-corasick-automaton/
--------------------------------------------------------------------------------------
模板题:
hdu2222 Keyword Search
hdu2896 病毒侵袭
hdu3065 病毒侵袭持续中(- -!)
ac自动机的模板题数据貌似很弱,网上很多ac代码都不能处理各模式串之间
有后缀关系的情况,主要是query函数统计有问题,事实上每次转移都有必要查找
该状态的fail指针.如下图:
![](http://pic002.cnblogs.com/images/2012/357473/2012040223544792.png)
(其它指向root)
如果文本串是abcd,显然,每次转移都必须查找fail指针.
更加容易忽略的是,每次找fail都要一直找到root,否则在上面的例子中无法发现d
被匹配.之前自己错误的模板ac掉10道并不算水的题后才发现这个问题!- -!
这样做的话ac自动机的复杂度可能退化到n^2.于是想到可以利用类似线段树的懒
惰标记的东西,给node添加一个域flag,表示从该状态延fail找能否找到匹配串,如果
flag=0,就不用继续找了.flag可以在bfs造自动机时一起初始化.这个优化并不见得
很有效果,因为同样可以构造出数据使它退化成n^2,而空间消耗却增加了,每次
memset的时间消耗也会相应增加.
高级运用:
+矩阵
poj2778 DNA Sequence
hdu2243 单词情结
poj1625 Censored(附带了十分恶心的高精度)
上面的题目利用ac自动机建立一个trie图,得到图论模型(用矩阵迭代判断2点的路径数),于是
我们不用再纠结各个字符串内部有神马纠结的关系,各种图论算法可以派上用场了.
-----------------------------------------更新中---------------------------------------------------
-----------------------------------------太懒不想更新了。。。-------------------------------------
http://www.notonlysuccess.com/index.php/aho-corasick-automaton/
--------------------------------------------------------------------------------------
模板题:
hdu2222 Keyword Search
hdu2896 病毒侵袭
hdu3065 病毒侵袭持续中(- -!)
ac自动机的模板题数据貌似很弱,网上很多ac代码都不能处理各模式串之间
有后缀关系的情况,主要是query函数统计有问题,事实上每次转移都有必要查找
该状态的fail指针.如下图:
![](http://pic002.cnblogs.com/images/2012/357473/2012040223544792.png)
(其它指向root)
如果文本串是abcd,显然,每次转移都必须查找fail指针.
更加容易忽略的是,每次找fail都要一直找到root,否则在上面的例子中无法发现d
被匹配.之前自己错误的模板ac掉10道并不算水的题后才发现这个问题!- -!
这样做的话ac自动机的复杂度可能退化到n^2.于是想到可以利用类似线段树的懒
惰标记的东西,给node添加一个域flag,表示从该状态延fail找能否找到匹配串,如果
flag=0,就不用继续找了.flag可以在bfs造自动机时一起初始化.这个优化并不见得
很有效果,因为同样可以构造出数据使它退化成n^2,而空间消耗却增加了,每次
memset的时间消耗也会相应增加.
高级运用:
+矩阵
poj2778 DNA Sequence
hdu2243 单词情结
poj1625 Censored(附带了十分恶心的高精度)
上面的题目利用ac自动机建立一个trie图,得到图论模型(用矩阵迭代判断2点的路径数),于是
我们不用再纠结各个字符串内部有神马纠结的关系,各种图论算法可以派上用场了.
-----------------------------------------更新中---------------------------------------------------
-----------------------------------------太懒不想更新了。。。-------------------------------------
相关文章推荐
- 字符串匹配与AC自动机
- 多模字符串匹配算法之AC自动机—原理与实现
- 字符串匹配算法SMA 总结之四:自动机算法
- 多模字符串匹配算法之AC自动机—原理与实现
- HDU3065(病毒侵袭持续中)字符串匹配-简单的AC自动机
- 字符串匹配:从后缀自动机到KMP
- 【总结】AC自动机
- 字符串匹配算法总结
- 字符串模板总结(一):AC自动机
- 字符串匹配算法 之 基于DFA(确定性有限自动机)的字符串模式匹配算法
- 字符串匹配算法总结
- AC自动机+DP(总结)+hdu2457
- 字符串匹配算法总结
- 【总结】字符串匹配: KMP 和 拓展KMP
- 【常用经典算法总结系列一】AC自动机
- 字符串匹配算法 之 基于DFA(确定性有限自动机)的字符串模式匹配算法
- 利用有限自动机进行字符串匹配
- 字符串匹配算法SMA 总结之一:Brute force
- 字符串匹配(string matching)算法之二:利用有限自动机
- 字符串匹配算法总结