1 / 6
文档名称:

KMP模式匹配算法探讨.doc

格式:doc   大小:66KB   页数:6页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

KMP模式匹配算法探讨.doc

上传人:小雄 2020/6/10 文件大小:66 KB

下载得到文件列表

KMP模式匹配算法探讨.doc

相关文档

文档介绍

文档介绍:不可不知的职业生涯规划几在原则要想成为一个拥有魅力的职场女性,就有必要在职场中明确职业角色,塑造职业形象,树立职场风格,科学系统地做好职业定位再进行系统的职业规划。下面盘点职业生涯规划制定的十大基本原则1、 清晰性原则:考虑目标、措施是否清晰、明确?实现目标的步骤是否直截了当?2、 挑战性原则:目标或措施是否具有挑战性,需要进行串匹配。串匹配就是在主串中查找模式串的一个或所有出现。在本文中主串表示为S二sls2s3・"sn,模式串表示为T=tlt2-tmo串匹配从方式上可分为精确匹配、模糊匹配、并行匹配等,著名的匹配算法有BF算法、KMP算法、BM算法及一些改进算法。本文主要在精确匹配方面对KMP算法进行了讨论并对它做一些改进以及利用改进的KMP来实现多次模式匹配。最简单的朴素串匹配算法(BF算法)是从主串的第一个字符和模式串的第一个字符进行比较,若相等则继续逐个比较后续字符,否则从主串的第二个字符起再重新和模式串的第一个字符进行比较。依次类推,直至模式串和主串中的一个子串相等,此时称为匹配成功,否则称为匹配失败。朴素模式匹配算法匹配失败重新比较时只能向前移一个字符,若主串中存在和模式串只有部分匹配的多个子串,匹配指针将多次回溯,而回溯次数越多算法的效率越低,它的时间复杂度一般情况下为O((n-m+l)m),最坏的情况下为0(m*n),最好的情况下为O(m+n)。KMP模式匹配算法正是针对上述算法的不足做了实质性的改进。其基本思想是:当一趟匹配过程中出现失配时,不需回溯主串,而是充分利用已经得到的部分匹配所隐含的若干个字符,过滤掉那些多余的比较,将模式串向右“滑动”尽可能远的一段距离后,继续进行比较,从而提高模式匹配的效率,该算法的时间复杂度为O(m+n)。那么如何确定哪些是多余的比较?在KMP算法中通过引入前缀函数f(x)来确定每次匹配不需要比较的字符,保证了匹配始终向前进行,无须回溯。假设主串为sls2,sn.,模式串为tlt2,tm.,其中m=n,从si+1开始的子串遇到一个不完全的匹配,使得:()如果我们能确定一个最小的整数,使得:0其中,所以确定i‘等价于确定k,这里的k值就是我们要求的前缀函数f(x)o由式和中K值与主串S无关,只与给定的模式串t中与主串匹配的q有关,即k=f(q),f(q)=max{i|Oiq且t[1..i]是t[l..q]的后缀} ()确定KMP前缀函数的算法如下:WdefineMAXSIZElOOTypedefunsignedcharstring[MAXSIZE+1];//0号单元用来存放串的长度voidf(sstringt,int*array){m=t[0];//m为当前模式串的长度array=(int*)malloc((m+1)*sizeof(int));//0号元不用array[l]=0; k=0;for(q=2;q(whi1e(k>O&&t[k+1]!=t[q])k=array[k]; if(t[k+l]==t[q])k=k+1;array[q]=k;))关于KMP算法的前缀函数f(x)的示例见表1。表1模式串abaabcacl12345678Tiabaabcacf(i)00112010当模式串中有i个字符串匹配成功,第i+1个字符不匹配时,则从i-f(i)个字符重新开始比较,这样不仅无须回溯,而且一次可以向