字符串匹配,这种情况是否有更好的算法

menuvb 2011-03-29 11:39:31
我先来讲讲我目前面临的问题:

随机给一个被查找的字符串,比如:ABCDZ,BCDZ,BBCD,CD,BBCD,BF等,给出的字符串出现二个相同字母的概率只有1%。

一个匹配的字符串列表:BCD,CD,BF,BBCD,BBE...大概共有9个匹配字符串,出现二个相同字母的字符串大概只有2个

现在给出一个被查找的字符串,如果才能快速找到是否包含要匹配的字符串的内容,只要匹配上一个,匹配就结束。

我知道KMP算法可以解决字符串匹配。但我注意到一个现像,KMP的算法最优情况下是:要被查找的字符串的模式看上去要相似的,比如:abcdabceab,匹配的字符串的模式也相似的:ababac,这样跟朴素算法对比,才能完全休现出它的优势来。

而我的面临的情况就是:要被查找的字符串,匹配的字符基本上都是独立出现了,很少说是出现一个字母出现多次的情况(甚至说是没有),如果在这种情况下,朴素算法和KMP算法的时间是一样的,因为KMP的算法还要涉及计算前缀覆盖时间+一个数组,朴素算法性能结果要优于KMP算法。

请问还有没有更优的算法可以解决我现在这种情况?


...全文
127 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Freshines 2011-03-30
  • 打赏
  • 举报
回复
Hash不知道可不可以?
zenny_chen 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fancymouse 的回复:]

多串匹配有AC自动机。模式串很多,要匹配的串很长的时候优势就出来了。
[/Quote]

嗯,非常同意!
showjim 2011-03-30
  • 打赏
  • 举报
回复
查询多的话,用trie应该可以,只是“出现二个相同字母”条件被浪费了。
FancyMouse 2011-03-30
  • 打赏
  • 举报
回复
多串匹配有AC自动机。模式串很多,要匹配的串很长的时候优势就出来了。

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧