数 据 结 构
实 验 报 告
学 院 软件学院 年 级 2009级 班 级 班 学 号 姓 名
2010 年 3 月 24 日
目录
一、实验内容……………………………………….1 二、实验过程……………………………………….X 三、实验结果……………………………………….X
软件学院2009级数据结构试验报告
一、实验内容:
1、实验题目:KMP算法
2、实验要求:实现教材中字串比较kmp算法,比较模式串abaabcac与主串acabaabaabcacaabc。
3、实验目标:了解并掌握串的类型定义和基本操作,并在此基础上实现kmp算法。了解kmp算法的基本原理和next函数的使用。
软件学院2009级数据结构试验报告
二、实验过程:
1、任务分配 2、设计思想
(1)KMP算法:在模式匹配中,每当一趟匹配过程出现字符比较不等时,不需要回溯i指针,而是利用已经得到的“部分匹配”的结果将模式向右滑动尽可能远的一段距离之后,继续进行比较。
(2)next函数:看成一个模式匹配问题,整个模式串既是主串又是模式串,可仿照KMP算法。
3、需求分析
(1) 输入的形式和输入值的范围:输入主串S,模式串T,位置pos (2) 输出的形式:模式串在主串中开始匹配的位置i
(3) 程序所能达到的功能:利用kmp算法完成模式串和主串的模式匹
配,并输出模式串在主串中开始匹配的位置
(4) 测试数据:
S=acabaabaabcacaabc T=abaabcac Pos=6
4、概要设计
1).抽象数据类型 Class String()定义字符串 Int StrLength()返回串的长度
Void get_next()求模式串T的next函数值并存入next
int kmp()利用模式串T的next函数求出T在主串S中第pos个字符之后的位
置的KMP算法
2).算法
a.kmp算法模块:实现主串和模式串的模式匹配
b.next函数模块:实现模式串自身的模式匹配,并存入nxet函数中 c.接收处理命令(初始化数据)
5、详细设计
程序代码(含注释)
软件学院2009级数据结构试验报告
6、调试分析
(1)调试中的问题分析: (2)算法的时空分析:
在利用简单的Index()函数进行模式匹配时,虽然易于理解,但是该算法效率很低。在某些特殊情况下,因为在主串中可能存在多个和模式串“部分匹配”的子串,因而引起指针i的多次回溯,从而导致时间复杂度过高。
对于kmp算法,每当一趟匹配过程中出现字符比较不等时,不需要回溯i指针,而是利用已经得到的“部分匹配”的结果将模式向右滑动尽可能远的一段距离之后,继续进行比较。因此kmp算法的效率较高,时间复杂度也较低。
7、测试结果
列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格,
最好多于需求分析中所列。 8、说明(如果有)
a.
软件学院2009级数据结构试验报告
三、实验结果:(结果分析,心得体会等)
1.结果分析
kmp算法的实验,既体现了字符串的定义原理和基本特点,又通过对字符串模式匹配实验的练习,得到了一种效率更高、时间复杂度更低的kmp算法
2.心得体会:这次kmp算法代码的编写给了我深刻的体会,它不仅让我了解了字符串的基本操作和相关知识点。也通过字符串模式匹配实验的练习,让我学习了一种更为高效、时间复杂度更低的kmp算法。
注:共三大项,具体每一项的内容可根据自己的报告内容分条叙述,自行安排得当即可。
备注:(正文采用宋体小四,间距20磅)
以上说明仅供参考。实验报告从这5部分展开,具体内容可自由发挥。如有雷同,均按零分处理。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务