算法分析--串匹配问题.docVIP

  • 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个字符)均有限制,但程序对用户输入过长的路径或模式串的情况的处理不是很好,此类操

文档评论(0)

1亿VIP精品文档

相关文档