模式匹配KMP算法研究报告

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

模式匹配的KMP算法研究

学生姓名:黄飞指导老师:罗心

摘要在计算机科学领域,串的模式匹配<以下简称为串匹配)算法一直都是研究焦点之一。在拼写检查、语言翻译、数据压缩、搜索引擎、网络入侵检测、计算机病

毒特征码匹配以及DNA序列匹配等应用中,都需要进行串匹配。串匹配就是在主串中

查找模式串的一个或所有出现。在本文中主串表示为S=s1s2s3…sn,模式串表示为

T=t1t2…tm。串匹配从方式上可分为精确匹配、模糊匹配、并行匹配等,著名的匹配

算法有BF算法、KMP算法、BM算法及一些改进算法。本文主要在精确匹配方面对KMP

算法进行了讨论并对它做一些改进以及利用改进的KMP来实现多次模式匹配。

关键字:模式匹配;主串;模式串;KMP算法

Research and Analysis of KMP Pattern Matching

Algorithm

Student:Huangfei Teacher:Luoxin

Abstract In computer science,String pattern matching(Hereinafter referred to as the string matching>algorithmis always the focus of the study.In the

spell check, language translation, data compression, search engine, the

network intrusion detection system, a computer virus signature matching DNA

sequences and the application in the match,matched to string matching.String matching is in search of a string of pattern or all appear.In this paper, the string is S = s1s2s3... Sn, string pattern for T = t1t2... tm.String matching way can be divided from the accurate matching, fuzzy matching, parallel matching etc., the famous matching algorithms are KMP algorithm, BF algorithm, the algorithm and some BM algorithm.This paper in precise KMP algorithm for matching aspects are discussed and some improvement on it and using the improved KMP to realize the multiple pattern matching.

Key words: pattern matching, The string。 Pattern strings。KMP algorithm

1引言

KMP算法是是对一般模式匹配算法的改进,由 D.E.Knuth与V.R.Pratt和J.H.Morris 同时发现的因此人们称它为克努特-莫里斯-莫拉特操作<简称为KMP算法)。

对于一般的模式匹配算法:分别利用两个指针i和j指示主串S和T中的当前正待比较的字符位置。算法的基本思想是:从主串的S的第POS个字符开始起和模式的第一个字符比较之,如相等,则继续逐个比较后续字符;否则从主串的下一个字符起再重新和模式的字符比较之。以此类推,直到模式T中的每个字符依次和主串S中的一个连续字符序列相等,则称匹配成功,则函数值为和模式T中的第一个字符相等的字符在主串S中的序号,否则称匹配不成功,函数值为0.而对于模式匹配的KMP算法可以在O(n+m>的时间数量级上完成串的模式匹配操作。其改进过程在于:每当一趟匹配过程出现字符比较不相等时,不需回溯i指针,而是利用已经得到的部分匹配的结果将模式串向右滑动一段尽可能远的距离后,继续进行比较。滑动的这一段距离我们将会用到函数next[],

KMP算法的最大特点是指示主串的指针不须回溯,整个匹配过程中,对主串仅需从头到

尾扫描一遍,这对处理从外设输入的庞大文件很有效,可以边度入边匹配,而无需回头重读。

2、问题分析

2.1问题的分析和任务的定义

用C/C++编写一个程序实现模式匹配的KMP算法。要求在一个字符串中搜索某个子串,若搜索到就返回子串的位置;若未搜索到,就返回0。首先要输入个主串和模式串,先根据next( >函数求模式串的next值,利用KMP 算法进行匹配,再用输出函数输出结果!

2.2设计过程

本次课程设计利用模式匹配KMP算法实现串的相关操作:分别从键盘上任意输入三组字符串作为主串,在任意数取三组字符串作为模式串,利用《模式匹配KMP算法》依次使三组模式串与三组主串匹配,在使用《模式匹配KMP算法》时会调用到Getnext(>函数。

2.3逻辑设计

对该kmp 算法,定义的抽象数据类型如下:

ADT String{

数据对象:D={ai|ai∈CharacterSet,i=1,2,3,…,n,n≥0}

数据关系:R1={|ai-1,ai∈D,i=2,…,n}

基本操作:StrAssign(&T,chars>

初始条件:chars是字符串常量。

操作结果:生成一个其值等于chars的串T。

StrCopy

初始条件:串S存在。

操作结果:若S为空串,则返回TRUE,否则返回FALSE。

StrLength(S>

相关文档
最新文档