- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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) {
您可能关注的文档
- 数字逻辑电路与系统设计[蒋立平主编][习题解答]..doc
- 数学人教A版必修4第二章教案2.4.1《平面向量的数量级的物理背景及其含义》..doc
- 数学中考考点梳理..doc
- 数学中考知识点系统总结..doc
- 数学主干知识与方法回顾..doc
- 数学中考试题分类汇编(一次函数)..doc
- 数学中考知识点系统总结大全..doc
- 数学分析matlab实验报告..docx
- 数字逻辑电路与系统设计习题答案..doc
- 数学会考复习资料..doc
- [中央]2023年中国电子学会招聘应届生笔试历年参考题库附带答案详解.docx
- [吉安]2023年江西吉安市青原区总工会招聘协理员笔试历年参考题库附带答案详解.docx
- [中央]中华预防医学会科普信息部工作人员招聘笔试历年参考题库附带答案详解.docx
- [保定]河北保定市第二医院招聘工作人员49人笔试历年参考题库附带答案详解.docx
- [南通]江苏南通市崇川区人民法院招聘专职人民调解员10人笔试历年参考题库附带答案详解.docx
- [厦门]2023年福建厦门市机关事务管理局非在编工作人员招聘笔试历年参考题库附带答案详解.docx
- [三明]2023年福建三明市尤溪县招聘小学幼儿园新任教师79人笔试历年参考题库附带答案详解.docx
- [哈尔滨]2023年黑龙江哈尔滨市木兰县调配事业单位工作人员笔试历年参考题库附带答案详解.docx
- [上海]2023年上海市气象局所属事业单位招聘笔试历年参考题库附带答案详解.docx
- [台州]2023年浙江台州椒江区招聘中小学教师40人笔试历年参考题库附带答案详解.docx
文档评论(0)