kmp算法实验报告

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构

学院软件学院

年级2009级

班级班

学号

姓名

2010 年 3 月24 日

目录

一、实验内容 (1)

二、实验过程……………………………………….X

三、实验结果……………………………………….X

一、实验内容:

1、实验题目:KMP算法

2、实验要求:实现教材中字串比较kmp算法,比较模式串abaabcac与主串acabaabaabcacaabc。

3、实验目标:了解并掌握串的类型定义和基本操作,并在此基础上实现kmp算法。了解kmp算法的基本原理和next函数的使用。

二、实验过程:

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()返回串的长度

V oid get_next()求模式串T的next函数值并存入next

int kmp()利用模式串T的next函数求出T在主串S中第pos个字符之后的位置的KMP算法

2).算法

a.kmp算法模块:实现主串和模式串的模式匹配

b.next函数模块:实现模式串自身的模式匹配,并存入nxet函数中

c.接收处理命令(初始化数据)

5、详细设计

程序代码(含注释)

6、调试分析

(1)调试中的问题分析:

a.

(2)算法的时空分析:

在利用简单的Index()函数进行模式匹配时,虽然易于理解,但是该算法效率很低。在某些特殊情况下,因为在主串中可能存在多个和模式串“部分匹配”的子串,因而引起指针i的多次回溯,从而导致时间复杂度过高。

对于kmp算法,每当一趟匹配过程中出现字符比较不等时,不需要回溯i指针,而是利用已经得到的“部分匹配”的结果将模式向右滑动尽可能远的一段距离之后,继续进行比较。因此kmp算法的效率较高,时间复杂度也较低。

7、测试结果

列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。

8、说明(如果有)

三、实验结果:(结果分析,心得体会等)

1.结果分析

kmp算法的实验,既体现了字符串的定义原理和基本特点,又通过对字符串模式匹配实验的练习,得到了一种效率更高、时间复杂度更低的kmp算法

2.心得体会:这次kmp算法代码的编写给了我深刻的体会,它不仅让我了解了字符串的基本操作和相关知识点。也通过字符串模式匹配实验的练习,让我学习了一种更为高效、时间复杂度更低的kmp算法。

注:共三大项,具体每一项的内容可根据自己的报告内容分条叙述,自行安排得当即可。

备注:(正文采用宋体小四,间距20磅)

以上说明仅供参考。实验报告从这5部分展开,具体内容可自由发挥。如有雷同,均按零分处理。

相关文档
最新文档