- 23
- 0
- 约2.02千字
- 约 9页
- 2017-08-21 发布于重庆
- 举报
算法分析--串匹配问题.doc
一、实验内容和目的
实验内容:给定一个文本,在该文本中查找并定位任意给定的字符串。
实验目的:
(1)深刻理解并掌握蛮力法的设计思想;
(2)提高应用蛮力法设计算法的技能;
(3)理解这样一个观点:用蛮力法设计的算法,一般来说,经过适度的努力后,都可以对算法的第一个版本进行一定程度的改良,改进其时间性能。
实验要求:
(1)实现BF算法;
(2)实现BF算法的改进算法:KMP算法和BM算法;
(3)对上述3个算法进行时间复杂性分析,并设计实验程序验证分析结果。
二、所用仪器、材料(设备名称、型号、规格等)
操作系统:Microsoft Windows 7
开发平台:Microsoft Visual Studio 2010
编程语言:C语言
三、实验方法、步骤
登录Microsoft Windows 7操作系统
(打开Visual Studio 2010开发平台
(新建“项目”
(“Win32控制台应用程序”
(输入项目名称
(“应用程序设置”
(勾选“空项目”复选框
(右击左侧“解决方案资源管理器”下的“源文件”
(“添加”
(“新建项…”
(新建一个“C++文件(.cpp)”
(在新建的.cpp文件中输入串匹配算法的程序代码
(调试
(运行
(记录结果
(完成实验报告。
四、实验过程原始记录(数据、图表、计算等)
源代码见实验报告所在目录下的BFFromFile.cpp、KMPFromFile.cpp、BMFromFile.cpp,以下是部分程序代码的截图:
BFFromFile.cpp:
KMPFromFile.cpp:
BMFromFile.cpp:
五、实验结果
在实现应用三种串匹配算法在文件中查找指定字符串之前,先对每个算法的正确性进行验证。编写3个小的程序BF.cpp、KMP.cpp、BM.cpp(源代码文件与实验报告在同一目录下),应用这三个小程序,对教材中的例子进行跟踪演示如下:
说明:
MATCHED表示当前位置发生匹配;RECALL表示当前位置发生回溯;i表示主串数组下标;j表示模式串数组下标(i,j均从1开始计算,但返回匹配位置的下标值则从零开始计算)
BF算法演示:
特点:主串和模式串同时回溯
KMP算法演示(回溯次数明显减少):
特点:主串不回溯
BM算法演示:
特点:对模式串倒序匹配,回溯位移量用dist函数计算得到
以下示例使用的文本文件为E:\test.txt,内容如下(左侧数字表示行号):
1. 调用BF算法在指定文件中查找指定字符串:
查询字符串“Servlet”,共找到9处,第11、15行出现了两次
查询字符串“编写”,共找到2处
用文本编辑器UltraEdit进行验证:
2. 调用KMP算法在指定文件中查找指定字符串:
查询字符串“Tomcat”,共找到5处,第18行出现了两次
查询字符串“服务”,共找到3处
用文本编辑器UltraEdit进行验证:
3. 调用BM算法在指定文件中查找指定字符串:
查询字符串“Java”,共找到5处,第5行出现了两次
查询字符串“目录”,共找到7处
用文本编辑器UltraEdit进行验证:
4. 未检索到指定字符及其他一些异常情况的处理
未查找到指定字符串:
文件目录非法,导致文件无法打开时,程序直接退出:
六、分析和结论
1. 从文件中查找指定字符串的思路是:
(1)读取文件中的一行字符,记录行号,直到文件结束;
(2)将读入的一行字符放入缓冲区中,用缓冲区中的字符串与模式串进行匹配;
①若匹配成功,计算列号,并将结果输出,然后截取缓冲区中当前匹配成功位置以后的所有字符,作为新的主串,再与模式串进行匹配,直到匹配不成功;
②若匹配不成功,则转(1)。
2. BFFromFile.cpp、KMPFromFile.cpp、BMFromFile.cpp三个程序中使用了一个公用的函数matchFile,它在三个程序中的定义和实现基本没有什么改变,只是对相应的串匹配算法的函数名进行了更改,此函数的设计使得编程效率大大提高,具有一定的“通用性”。
3. 本实验中的程序只能针对纯文本文件进行字符串检索,故不能对Microsoft Word 2003(.doc)等格式的非纯文本文件进行操作。另外程序输出的列号是按照一个汉字占两列来计算的,故在查找含有汉字的文本时,输出结果可能与使用习惯有差异。
4. 本实验中的BF,KMP,BM算法使用数组下标均从零开始,故返回-1表示匹配失败,其他的非负值表示匹配位置的起始下标,其他从1开始使用下标的情况会特别注明。
5. 本实验中从文件查找指定字符串的程序对输入文件路径长度(255个字符)和模式串的长度(64个字符)均有限制,但程序对用户输入过长的路径或模式串的情况的处理不是很好,此类操
您可能关注的文档
最近下载
- 【基恩士】IG 系列 用户手册 (简体中文).pdf VIP
- 安徽财经大学《数值分析》2019-2020学年期末试卷.pdf VIP
- 《律师事务所退伙协议》.docx VIP
- SHS 01037—2019 球形储罐维护检修规程.docx VIP
- 文本教案半潜平台se23dec2012workshop binder.pdf VIP
- 《碳达峰碳中和政策法规汇编(2024年9月刊)》.pdf VIP
- 探索式软件测试方法在敏捷开发中的应用研究.docx VIP
- 中国行业标准 YY/T 1226-2022人乳头瘤病毒核酸(分型)检测试剂盒.pdf
- 延安市各区县地表水系图.pdf VIP
- 2025-2026学年一年级数学上册乐考非纸笔测试题(一)(人教版·新教材).docx VIP
原创力文档

文档评论(0)