KMP与sunday的比较

有关sunday算法的讲解:http://blog.csdn.net/caianye/article/details/6096610

以下转载请注明出处   by  CrazyAC

1.求模式串出现在文本串的第一个位置

情况1:

   char src[]="jfkdsahdiojdaigfgthlipjgffg";
   char des[]="gffg";

KMP:(匹配了49次)

sunday:  (匹配了10次)

 可见sunday的优越性。但是如果测试数据为

char src[]="aaaaaaaaaaaaaaaaaaaaba";
char des[]="aaaaaaaba";

KMP匹配了35次,sunday匹配了105次!、

2.求模式串在文本串中出现的次数。hdoj 1686

sunday超时

KMP:  93MS

综上所述,在信息学竞赛中sunday算法的优势得不到体现,那是因为ACM比赛对时间的重视,所以测试数据会卡你时间,而这些卡你时间的测试数据又往往把sunday给卡住了

就像上面这组数据

char src[]="aaaaaaaaaaaaaaaaaaaaba";
char des[]="aaaaaaaba";

根据sunday的原理,当一直匹配到b时,

 aaaaaaaaaaaaaaaaaaaaba

 aaaaaaaba

发生不匹配,根据sunday中,移动步长=匹配串中最右端的该字符到末尾的距离+1 ,而最右端是‘a',’a'这个字符到末尾的距离为0,所以步长为1,

又要从第二个'a'开始匹配

 aaaaaaaaaaaaaaaaaaaaba

   aaaaaaaba

如此和暴力就相差无几了。

对KMP来说,当到b不匹配时,i = j = 7,然后,j = next[j] = 6,所以,下次只是对src[i]与des[j]进行比较

 aaaaaaaaaaaaaaaaaaaaba

   aaaaaaaba

前面那一串红色的a的比较就可以省掉了,而sunday是没有省掉的。

 

 

posted on   CrazyAC  阅读(2268)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示