第一范文网 - 专业文章范例文档资料分享平台

算法分析与设计实验报告 Microsoft Word 文档 (1)

来源:用户分享 时间:2025/6/3 1:52:21 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

华中师范大学计算机科学系

实验报告书

课程名: 《算法分析与设计》 班 级 : 计科系0802 学 号 : 2008210707 姓 名 : 刘怀宁 指导老师 : 张茂元

提交日期:2010-11-23

1

目录:

实验三·······················3 ——6 实验五·······················7 ——9 实验六·······················10——12 实验七·······················13——16 实验八·······················17——18

说明:单元实验报告包含五个内容

A. 实验题目 B. 实验目的 C. 实验要求

D. 程序代码及运行结果(分割为两面)E. 心得体会

程序代码实现语言:C++ 编程工具:visual C++

2

实验三 实验项目 ———串匹配问题

1.

实验题目

给定一个文本,在该文本中查找并定位任意给定的字符串 2.

实验目的

(1) 深刻理解并掌握蛮力法的设计思想; (2) 提高应用蛮力法设计算法的技能;

(3) 理解这样一个观点:用蛮力法设计的算法,一般来说,经过适度

的努力后,都可以对算法的第一个版本进行一定程度的改良,改进其时间性能。

3.

实验要求

(1)实现BF算法;

(2)实现BF算法的改进算法:KMP算法和BM算法;

(3)对上述三个算法进行时间复杂性分析,并设计实验程序验证分析结果。 4.

程序代码及对应运行结果

(1)BF算法

#include

3

using namespace std;

int BF(char *text, char *pattern) { int i,j;//分别指向每一个S和T的字符 for( i=0;i

void main() { char *Text=\ char *Pattern=\ int s=BF(Text,Pattern); cout<

(2)KMP算法

#include #include

void get_nextval(const char *T, int next[]); int KMP(const char *Text,const char* Pattern) //const 表示函数内部不会改变这个参数的

值。 {

if( !Text||!Pattern|| Pattern[0]=='\\0' || Text[0]=='\\0' )//

return -1;//空指针或空串,返回-1。

int len=0;

const char * c=Pattern;

while(*c++!='\\0')//移动指针比移动下标快。

{

++len;//字符串长度。 }

int *next=new int[len+1];

get_nextval(Pattern,next);//求Pattern的next函数值

int index=0,i=0,j=0; while(Text[i]!='\\0' && Pattern[j]!='\\0' ) {

if(Text[i]== Pattern[j]) {

++i;// 继续比较后继字符

++j; } else {

index += j-next[j]; if(next[j]!=-1) j=next[j];// 模式串向右移动

else {

j=0; ++i; } } }//while

delete []next;

if(Pattern[j]=='\\0')

return index;// 匹配成功

4

else

return -1; }

int main()//abCabCad {

char* text=\ char*pattern=\ //getNext(pattern,n); //get_nextval(pattern,n);

cout<

void get_nextval(const char *T, int next[]) {

// 求模式串T的next函数值并存入数组 next。

int j = 0, k = -1; next[0] = -1;

while ( T[j/*+1*/] != '\\0' ) {

if (k == -1 || T[j] == T[k]) {

++j; ++k; if (T[j]!=T[k])

next[j] = k; else

next[j] = next[k];

}// if else

k = next[k]; }// while

}// get_nextval

(3)BM算法 #include using namespace std;

int Dist(char *t,char ch) { int len = strlen(t); int i = len - 1; if(ch == t[i])

return len;

i--;

while(i >= 0)

{

if(ch == t[i]) return len - 1 - i; else i--; }

return len; }

int BM(char *s, char *t) {

int n = strlen(s); int m = strlen(t); int i = m-1; int j = m-1;

while(j>=0 && i

if(s[i] == t[j]) { i--; j--; } else {

i += Dist(t,s[i]); j = m-1; } }

if(j < 0) { return i+1; }

return -1; }

void main()

5

算法分析与设计实验报告 Microsoft Word 文档 (1).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c62k0i4qmhi2cg5h8ins237lyd0yjbf015u6_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top