网站大量收购独家精品文档,联系QQ:2885784924

数据结构-KMP算法的实现..docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构-KMP算法的实现.

数据结构课程设计报告设计题目:模式匹配中的KMP算法的实现专业:计算机科技院系:计算机学院姓名:xxxxxxxx学号:xxxxxxx时间:2013年9月22日目 录1 需求分析31.1 问题描述31.2 基本要求32 概要设计33 详细设计53.1 为主串和模式串赋值53.2 利用Output()函数输出串。-53.3 求各串的长度63.4 求模式串的模式值next[]函数63.5 模式匹配KMP算法的实现:74 测试与分析75 总结96 附录:源程序清单9参考文献131 需求分析1.1 问题描述KMP算法是对一般模式匹配算法的改进,由D.E.Knuth与V.R.Pratt和J.H.Morris 同时发现的因此人们称它为克努特-莫里斯-莫拉特操作(简称为KMP算法)。对于一般的模式匹配算法:分别利用两个指针i和j指示主串S和T中的当前正待比较的字符位置。算法的基本思想是:从主串的S的第POS个字符开始起和模式的第一个字符比较之,如相等,则继续逐个比较后续字符;否则从主串的下一个字符起再重新和模式的字符比较之。以此类推,直到模式T中的每个字符依次和主串S中的一个连续字符序列相等,则称匹配成功,则函数值为和模式T中的第一个字符相等的字符在主串S中的序号,否则称匹配不成功,函数值为0.而对于模式匹配的KMP算法可以在O(n+m)的时间数量级上完成串的模式匹配操作。其改进过程在于:每当一趟匹配过程出现字符比较不相等时,不需回溯i指针,而是利用已经得到的部分匹配的结果将模式串向右滑动一段尽可能远的距离后,继续进行比较。滑动的这一段距离我们将会用到函数Next[],KMP算法的最大特点是指示主串的指针不须回溯,整个匹配过程中,对主串仅需从头到尾扫描一遍,这对处理从外设输入的庞大文件很有效,可以边度入边匹配,而无需回头重读。开发工具:C语言1.2 基本要求 用C编写一个程序实现模式匹配的KMP算法。要求对于任何输入串A,实现算法求next 函数值;利用next函数值,实现串A在串B中的定位;若未有哪些信誉好的足球投注网站到,就返回0。 首先要从键盘输入主串B和模式串A,并采用用链式存储,再根据Next( )函数求模式串的Next值,利用KMP 算法进行匹配,再用输出函数输出结果!2 概要设计对该kmp 算法,定义的抽象数据类型如下:ADT String{ 数据对象:D={ai|ai∈CharacterSet,i=1,2,3,…,n,n≥0} 数据关系:R1={ai-1,ai|ai-1,ai∈D,i=2,…,n} 基本操作:StrAssign(T,chars) 初始条件:chars是字符串常量。操作结果:生成一个其值等于chars的串T。 StrCopy(S)初始条件:串S存在。操作结果:若S为空串,则返回TRUE,否则返回FALSE。 StrLength(S)初始条件:串S存在。操作结果:返回S元素的个数,成为串的长度。 Index(S,T,pos)初始条件:串S和T存在,T是非空串,1≤pos≤StrLength(S).操作结果:若主串S中存在和串T相同的子串,则返回他在主串S中的第pos个字符之后第一次出现的位置;否则函数值为0。 DestoryString(S)初始条件:串S存在。操作结果:串S被销毁。}ADT String 该算法是对串进行操作,对串的存储结构用线性表的链式存储结构表示:typedef struct LString{ char data; struct LString *next; }LString; 该算法分为三个模块:第一模块[Input( )函数](利用该函数输入主串和模式串);第二模块[Output( )函数利用该函数输出串)。第三模块[Length()](利用该函数求各串的长度);第四模块[Get_next( )函数](利用该函数求出模式串的next函数值);第五模块[Index_KMP()函数](利用该函数进行主串和模式串之间的匹配);各个模块之间的调用关系如下图所示:图2.1是对整个函数的流程图。整个函数的流程图3 详细设计:3.1 为主串和模式串赋值利用Input()函数输入主串和模式串Input()函数伪代码:LString *Input(){//通过标准输入设备输入串以链式存储存储数据并返回链的头指针。LString *head, *tail, *p; int curlen=0; char ch; head=(LString*)malloc(sizeof(LString));//建立头指针。 if(!head) {

您可能关注的文档

文档评论(0)

s4as2gs2cI + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档