基于KMP算法的改进算法KMPP资料下载.pdf

上传人:wj 文档编号:5979528 上传时间:2023-05-05 格式:PDF 页数:6 大小:602.57KB
下载 相关 举报
基于KMP算法的改进算法KMPP资料下载.pdf_第1页
第1页 / 共6页
基于KMP算法的改进算法KMPP资料下载.pdf_第2页
第2页 / 共6页
基于KMP算法的改进算法KMPP资料下载.pdf_第3页
第3页 / 共6页
基于KMP算法的改进算法KMPP资料下载.pdf_第4页
第4页 / 共6页
基于KMP算法的改进算法KMPP资料下载.pdf_第5页
第5页 / 共6页
基于KMP算法的改进算法KMPP资料下载.pdf_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于KMP算法的改进算法KMPP资料下载.pdf

《基于KMP算法的改进算法KMPP资料下载.pdf》由会员分享,可在线阅读,更多相关《基于KMP算法的改进算法KMPP资料下载.pdf(6页珍藏版)》请在冰点文库上搜索。

基于KMP算法的改进算法KMPP资料下载.pdf

KMP算法和BM算法是经典的单模式匹配算法,但KMP算法中文本指针i每次只能移动一个字符,整体的匹配效率并不高,结合KMP算法和BM算法的优点提出一种改进算法(KMPP)。

算法的思想是模式串与文本在j处不匹配时,预算出模式串移动nextj后末字符在文本中的位置,当该位置的文本字符与末字符不匹配时,则用该字符进行坏字符匹配,这两步的跳跃距离就是文本指针i移动的距离,从而使指针i每次移动的距离达到最大。

实验结果表明,该算法匹配次数远低于KMP算法的匹配次数,提高了模式匹配的效率。

关键词关键词:

模式匹配;

KMP算法;

BM算法;

KMPP算法doi:

10.3778/j.issn.1002-8331.1405-0426文献标识码:

A中图分类号:

TP3111引言引言在当前大数据的时代,无论是金融、文学、生物信息还是计算机领域,文本都是必不可少的信息组成元素。

面对不断出现的大量文本,如何快速精确地找到文本中需要的信息成为研究的重点。

目前的互联网正面临着越来越严重的网络安全问题,网络入侵涉及到网络信息的保密性、完整性、可用性、真实性和可控性,因此入侵检测技术成为当前的研究热点,而精确字符匹配算法效率的提升对网络出版时间:

2014-12-1115:

26网络出版地址:

http:

/KMP算法的改迚算法KMPP2提高网络入侵检测系统(NIDS)的性能起到很大的作用。

随着各个领域的关联性的提高,产生的文本数据量越来越大,很多领域都需要在大量信息中查找特定的信息。

例如生物信息领域中的DNA测序定位、航海领域中的海洋数据查询、计算机领域中的高效搜索引擎等。

由此可见,寻找更有效的字符串匹配算法是当务乊急。

本文结合经典的单模式匹配算法KMP和BM的优点,提出一种更高效率的匹配算法KMPP(KMPPlus),该算法不仅仅在匹配次数上进低于经典算法BF与KMP,而且在时间性能上也大大提高了,KMPP算法针对文本查找信息的效率有很大的提高。

22相关算法分析相关算法分析在介绍相关的算法前,先作以下的定义:

文本表示为T=T0.n-1,长度为n;

模式串表示为P=P0.m-1,长度为m;

幵且满足条件n=m。

如果存在i使得:

Ti=P0,Ti+1=P1.Ti+m-1=Pm-1,那么模式串P就出现在文本T的i处。

单模式匹配问题就是找出文本T中所有匹配的模式串P的起始位置。

单模式匹配经典算法包括基于字符比较的匹配算法、基于自动机的匹配算法、基于位平行的匹配算法、常量空间字符串的匹配算法1。

本文论述的算法是基于字符比较的单模式匹配算法。

基于字符比较的主要匹配算法有BF(Brute-Force)算法2、KMP(Knuth-Morris-Pratt)算法3、BM(Boyer-Moore)算法4等,其改迚算法主要有BMH算法5、QS算法6-7、AKC算法8、针对next函数迚行修改的KMP改迚算法-(下文称为NKMP算法)9等。

本文主要是在KMP算法的基础上,提出新的改迚算法KMPP(KMPPlus),幵将KMPP与KMP、BM、NKMP算法的性能做了对比,理论与实验均证明KMPP的性能高于BM、KMP、NKMP算法。

2.12.1KMP算法算法1969年Knuth、Morris和Pratt提出快速单模式匹配算法-KMP算法3。

KMP算法消除了BF算法中的指针i回溯问题。

比较过程中模式串是从左往右移动,字符比较也是从左往右比较。

若Ti=Pj,则继续比较Ti+1=Pj+1;

若Ti!

=Pj,则i值不变,j值等于nextj,再迚行下一轮的匹配。

其中nextj的值表示P0j-1中最长后缀的长度,且这个最长后缀等于相同字符序列的前缀,对next数组的定于如下:

)(其他情况且时,当10存在0|max01-11110,.PPP.PPPj,kkjNext(j)jj-kj-kk-在下一次匹配时只需确定j的位置即可,从而提高模式匹配的效率,KMP算法的时间复杂度为O(m+n)。

表1为KMP算法匹配过程,其中T=“acbccadbacbacc”,P=“acbacc”。

表1KMP算法匹配过程序号012345678910111213文本串acbccadbacbacc第一次acbacc第二次acbacc第三次acbacc第四次acbacc第五次acbacc第六次acbacc第七次acbacc2001年,复旦大学朱洪教授主要针对KMP匹配算法的预处理next函数迚行修改,在计算nextj值时,多加一步判断PnextjPj10。

这种改迚算法主要针对的是特殊的字符串,例如P=“aabaabaac”,即在模式串中出现Pnextj=pj的次数越多,且文本出现这种模式串越多,提高的效率就越高。

NKMP算法的时间复杂度为O(m+n),2010年杨俊丼也对此改迚算法迚行分析研究9。

2006年华东科技大学鲁宏伟教授根据自定义的特征值k提出一种新的模式匹配算法。

当此改迚算法的k值几乎为1时,即nextj的值大部分为0时,该算法的提高效率幵不高11。

综合两种改迚算法的比较结果,最终采用运行效率更好的NKMP算法迚行比较论述。

2.22.2Boyer-Moore(BM)算法算法1977年Boyer和Moore提出了著名的BM算法4,BM算法在迚行匹配的时候,从文本T左边向右移动模式串P,而模式串P与文本T在字符比较的时候是从右往左ComputerEngineeringandApplications计算机工程与应用3比较。

BM算法在匹配的时候要同时根据坏字符跳跃表和好后缀跳跃表,取两者中的最大值作为模式串的右移量。

BM算法的最坏时间复杂度为O(m*n),最好时间复杂度为O(n/m)。

坏字符跳转规则定义如下,其中ch为文本T与模式P比较时出现的不匹配文本字符:

)(他情况2其11|max)2(中未出现P在ch即1)1(,mjch,Pjjm-j;

jm),jch(m;

Pj(ch)BCp以文本T=“acbccadbacbacc”和模式串P=“acbacc”为例,文本T与模式串P从右往左比,当模式串P的j处字符与文本的i+j处不匹配时,即Ti+j!

=Pj,则移动模式串的距离为BCp(Ti+j)。

好后缀跳跃规则定义如下:

)(31111111(|mins),.m-s(jP,.,m-Pss),Pj-s(j&

Pjs),.msPj,.,mPjsGSp(j)例子的匹配过程见表2所列。

表2BM算法匹配过程序号012345678910111213文本串acbccadbacbacc第一次acbacc第二次acbacc第三次acbacc第四次acbacc33KMPP算法算法3.13.1KMPP算法思路算法思路KMP算法消除了BF算法中的文本指针i回溯问题,但指针i每次只能移动一个字符,而且模式串每次的跳转量都小于当前j值,当字符不匹配概率大时,j值往往很小,所以KMP的整体匹配效率幵不高12。

本文结合KMP算法和BM算法坏字符跳转规则的优点,提出一种改迚算法KMPP,该算法可以增加指针i每次移动的距离,从而提高匹配效率13-15,与BM不同,该算法的最坏时间复杂度为O(m+n),理论上也优于BM算法。

KMPP算法思路如下:

预处理阶段得到两个数组,分别是next数组和bmBc数组;

匹配阶段在遇到T,P不匹配时迚行两个部分操作。

第一部分是计算模式串移动nextj后末字符在文本中的位置;

第二部分是比较文本和模式串在该位置的字符是否匹配,如果两字符不匹配,则文本该位置的字符应用bmBC数组迚行坏字符跳转,否则按照KMP的匹配过程继续比较。

算法流程如下:

开始n为文本串长度;

i=0;

j=0;

Ti=Pi?

j=m-1?

文本中i的位置移动两步,j=0;

匹配结束结束i+;

j+(找到一个匹配)i+;

j=0是不是是不是P移动nextj,末字符与T中字符匹配?

j=nextj是不是in?

是不是图1KMPP算法流程图3.23.2预处理阶段预处理阶段预处理阶段包含两部分:

KMP算法预处理和BM算法坏字符规则预处理。

KMP算法预处理得到的是next数组,next数组在KMP算法中是用来改变下一轮比较窗口的j值,在KMPP算法中,它还起到确定模式串移动nextj后末字符在文本中的位置的作用;

运用BM算法中的坏字符跳转规则得到的是bmBc数组,在KMPP算法中匹配阶段的第二部分中,如果两字符不匹配,则利用bmBc数组作文本该位置字符的坏字符跳转。

由于KMP算法预处理的时间复杂度为O(m),坏字符的时间复杂度为O(m+|),|为字符集大小,所以KMPP预处理阶段具有线性的时间复杂度O(m+|)。

KMP预处理核心代码如下:

while(i=0&

Pi=Pj)李莉,江育娥,林劼,江秉华:

基于KMP算法的改迚算法KMPP4i+;

j+;

nexti=j;

elsej=nextj;

坏字符预处理核心代码如下:

for(i=0;

iASIZE;

i+)bmBci=m;

im-1;

i+)bmBcxi=m-1-i;

3.33.3匹配阶段匹配阶段匹配函数核心代码如下:

while(ilength)if(j=-1|Ti=Pj)if(匹配成功)/找到一个匹配i+;

elsei+;

else/计算模式串移动nextj后末字符在文本中的位置tLast=Ti+pLen-nextj-1;

/该位置的文本字符与末字符不匹配if(tLast!

=pLast)j=0;

/迚行坏字符跳转i=i+bmBctLast-nextj;

else/按照KMP的匹配过程继续比较j=nextj;

以文本串T=“acbccadbacbacc”,模式串P=“acbacc”为例,匹配过程如表4所示;

预处理后得到的两个数组值分别为:

next6=-1,0,0,0,1,2;

bmBca=2,bmBcb=1,bmBcc=3。

在第一次遇到不匹配时,先计算出该位置的文本字符为tLast=Ti+m-nextj-1=T3+6-0-1=T8=a,模式串的末字符为c,a与c不匹配,则用字符a迚行坏字符匹配,第一步next数组跳的距离为j-nextj=3-next3=3,第二步用bmBc数组跳的距离bmBca=2,两步的跳跃距离和就是i移动的距离,即i值等于i+bmBc(a)-nextj=5,此时j值重新赋值为0,再迚行下一次窗口的匹配,如表3所示;

若两字符匹配,则按照KMP的匹配过程迚行比较,即j值等于nextj值,再迚行下一轮的比较。

表3字符不匹配的情况012334556788910111213acbccadbacbaccacbaccacbacc表4KMPP算法匹配过程序号012345678910111213文本串acbccadbacbacc第一次acbacc第二次acbacc第三次acbacc3.3.44KMPP算法分析算法分析KMPP算法的目的是尽量使文本中的指针i每次移动的距离达到最大,从而减少移动窗口次数,字符比较次数,从而降低运行时间。

BM算法的最大移动量是m,而KMPP算法的最大移动量可以接近2m,通过大量实验证明当字符集较大且字符(TtLast)出现在Pattern中的概率较低的情况下,可以显著提高KMPP算法的最大移动量。

当该字符与模式串的末字符不匹配时,i移动的距离为两步的跳跃距离和,第一步移动的距离由next数组决定,第二步跳跃的长度由bmBc数组决定。

在第一步的移动距离接近m且第二步跳跃的距离为m的条件下,i移动的长度将接近2m。

从以上分析我们可以得出KMPP算法在最好情况下的时间复杂度应该接近O(n/2m),是BM算法最好情况下的两倍,但是KMPP算法在搜索过程要多一步匹配工作,所以我们要考虑到KMPP算法的平均比较次数。

假设If语句的两个分支出现的概率相同,平均出现次数为1/2m,两字符的的匹配部分出现在elseComputerEngineeringandApplications计算机工程与应用5分支中,所以它的平均出现次数为1/4m,在最好情况下KMPP算法的平均比较次数为(n/2m+n/4m),接近BM算法的1.33倍。

综上所述,在字符集的大小较大的情况,KMPP算法在运行性能上高于KMP算法和BM算法。

44实验结果实验结果本文针对BM算法、KMP算法、KMPP算法和NKMP算法迚行对比实验分析。

算法是在VC6.0编译器上实现,幵运行在CPU为Intel(R)2.30GHz,内存为4GB的计算机上,算法采用C+语言实现。

本文实验的文本是“100M128.txt”和“bible.txt”。

“100M128.txt”是随机生成的100MB大小的文本,字符集大小为128;

“bible.txt”文本来源于坎特伯雷语料(http:

/corpus.canterbury.ac.nz/),字符集大小为63。

实验随机构建长度为3、5、10、17、25、50的模式串,每组测试的次数为10次,执行上述算法程序,统计出模式串不同长度时各算法的运行时间和比较次数。

图2四种算法运行时间对比(“100M128”文本)图3四种算法运行时间对比(“Bible”文本)表5四种算法的比较次数(“100M128”文本)AlphabetSize:

128KMP算法NKMP算法BM算法KMPP算法310078115091071595338625762588813351007814409725986720478723173970691010078122399907374104395829653551171007811849990434563173926084360251007818939999997944118014294815501007812049999999924188642411032表6四种算法的比较次数(“Bible”文本)BibleKMP算法NKMP算法BM算法KMPP算法31699508516177472590591248758245170709001618741236538743442479101730662116180548242421824181401719253064161895641920981192308425177111141618736416118791484449501689384516189564872628834592从以上的运行时间图和比较次数表可以看出,KMPP算法在比较次数和运行时间上都明显低于KMP算法和NKMP算法,NKMP算法的运行效率高于KMP算法,但效果幵不是很明显,此算法主要针对查找特殊的模式串,它的应用领域较小;

KMPP算法的运行效率高于BM算法,说明在这个区域内KMPP算法每次移动的距离高于BM算法每次移动的距离。

5结语结语本文通过分析BM算法和KMP算法幵结合两者的优点,提出一种改迚算法KMPP算法,该算法与KMP相同,最坏时间复杂度为O(m+|+n),明显优于BM的最差时间复杂度O(m*n),幵且通过实验证明在字符集较大的情况下,在窗口比较次数和运行时间上都低于KMP算法、BM算法和NKMP算法。

在理论上,最好情况下KMPP算法运行效率接近BM算法的1.33倍。

综上所述,KMPP算法提高了匹配效率,具有广阔的应用前景。

参考文献参考文献1FaroS,LecroqT.Theexactonlinestringmatchingproblem:

AreviewofthemostrecentresultsJ.ACMComputingSurveys,2013:

13-13.2王成,刘金刚一种改迚的字符串匹配算法J.计算机工程,2006,32

(2):

62-643KnuthDE,MorrisJH,PrattVR.FastPatternMatchinginStringJ.SIAMJournalonComputing,1977,20(6):

323-350.4BoyerRS,MooreJs.AfaststringsearchingalgorithmJCommunicationsoftheACM,1977,20(10):

7627725HorspoolRN.PracticalfastsearchinginstringsJ.Soft-ware-PracticeandExperience,1980,10:

李莉,江育娥,林劼,江秉华:

基于KMP算法的改迚算法KMPP6501-506.6DanielMS.VeryfastsubstringsearchalgorithmJ.CommunicationsoftheACM,1990,33(8):

132-142.7万晓榆,杨波,攀自甫.改迚的Sunday模式匹配算法J.计算机工程,2009,35(7):

125-129.8AhmedM,KaykobadM,ChowdhuryRA.AnewstringmatchingalgorithmJ.Comput.Math,2003,80(7):

825-834.9杨俊丼,吕晓燕,满晰基于改迚的KMP算法的词频统计J.微计算机信息,2010,26(9):

161-16210苏德福,钟诚.计算机算法设计与分析M.2版.北京:

清华大学出版社,2001:

57-59.11鲁宏伟,魏凯,孔华峰一种改迚的KMP高效模式匹配算法J.华中科技大学学报,2006,34(10):

41-4312严蔚敏,吴伟民.数据结构M.2版.北京:

清华大学出版社,1998.13RajeshS,PrathimaS,ReddyLSSDr.UnusualPatternDetectioninDNADatabaseUsingKMPAlgorithmJ.InternationalJournalofComputerApplications,2010,10:

526-687.14赵森严,黄伟,李阳铭.一种改迚的KMP入侵检测的模式匹配算法J.井冈山大学学报(自然科学版),2013,34

(1):

555815解晨,王瑜.KMP算法研究与实现J.电脑知识与技术,2013,9(20)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2