HDU2222 Keywords Search

考查:多串匹配 AC自动机

提交:3次TLE 一次WA 203MS

第一道AC自动机题目,AC自动机(Aho-Corasick automation)是用来解决多串匹配问题的算法。而KMP的解决单串匹配的,即在给定的文本中找到搜索的关键字和它们的位置,而如果需要在一段给定的文本中同时搜索多个关键字的话就需要用到AC自动机了。

AC自动机是基于Trie实现的,首先需要建立一颗关键字的Trie树,这里需要注意的是为要搜索的关键字建树而不是文本串,在建立完树后就需要建立fail指针。假设有一个节点k,他的失败指针指向j,那么k,j满足这个性质:设root到j的距离为n,则从k之上的第n个节点到k所组成的长度为n的单词,与从root到j所组成的单词相同。还有很多问题不是很明白,不过这里还有很多很好的介绍AC自动机的文章,大家可以看看:

http://www.cppblog.com/mythit/archive/2009/04/21/80633.html

http://www.dev-club.net/xiangxixinxi/22010072906013413/201102100439240.html

http://www.cublog.cn/u3/113538/showart_2212716.html

此外还有需要注意的一点是在循环中,不要用i<strlen(text),之前TLE就是这个问题,应该是这样每次都会调用strlen函数的原因,可以直接写为text[i]。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值