一种改进的字符串匹配算法--Quick Search算法

作为BM算法改进中的一种,QS算法原理简单,易于编写及调试,且速度与BM不相上下,约是KMP的3倍。在Daniel M Sunday的论文"A very fast substring search algorithm"中有详细的论述,QS是其中最简单的一种,另外两种复杂但效率更高。

 

 

 

算法说明:

令模式串为p={p[0],p[1],...,p[m-1]},长度为m。文本串为T={T[0],T[1],...,T[n-1]},长度为n.要求n>=m.

令k为p在T上的对齐位置,即p[0]与T[k],p[1]与T[k+1],.....,p[m-1]与T[k+m-1]相对应,检测在位置k是否匹配时只要逐个检查以上相对应的字符即可。当在某个位置发生失配时,根据T[k+m]来决定模式串向右移动的位置,因为一旦发生失配,模式串至少向右移动一位,因此T[k+m]必然要和模式串中相同字符的最右端出现相对应,否则会发生另一次失配。如果模式串中无T[k+m]字符,则将模式串向右移动m+1个位置。而在检查P与T的字符是否匹配时可以使用任意的顺序,而不必从左至右或从右至左,这是与KMP或BM最大的区别。

 

以下代码计算模式串的出现过的字母所在的位置,即p[m-1]的字母位置记为1,p[m-2]记为2,如果一个字母在模式串中出现多次,则记录最右边的出现位置。

 

 

 

 

以下这部分为quick search 主体函数

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值