c语言 编码abc abbccc,KMP模式匹配算法的研究+C语言实现.doc

KMP模式匹配算法的研究C语言实现

KMP模式匹配算法的研究+C语言实现

摘 要: KMP算法是一个经典的模式匹配算法,具有广泛的应用范围。实现该算法的关键是计算出next的值或nextval数组值.本文针对计算nextval数组传统算法难于求解的问题,提出了一种基于next数组来计算其nextval数组的改进方法。该算法首先采用递归设计,求出next值,然后采用递推方式从next值导出nextval值。该算法在C平台上具体实现。实验结果表明,改进的递归算法的思想是正确。关键词: 模式匹配;next数组;nextval数组11041

Research on Pattern Matching Algorithm

Abstract:KMP algorithm is a classic pattern matching algorithm, with a wide range of applications. The algorithm is the key to achieving the calculated value or array of values next nextval paper nextval array of traditional algorithms for computing to solve difficult problems, we propose a calculation based on the next array to improve its methods nextval array. The algorithm uses a recursive design, find next value and then using recursive manner nextval values derived from the next value. The algorithm in C platform specific implementation. Experimental results show that the improved recursive algorithm is correct thinking.

Key words: Pattern Matching;Next Array;Nextval Array

目录

摘要1

引言2

1.模式串匹配算法的研究意义和现状3

2.相关基础知识介绍3

3.模式匹配算法分析4

3.1 BF(蛮力搜索算法)4

3.2 KMP算法分析5

3.3 Next数组的实现9

3.4 Nextval数组的设计与实现11

4. KMP算法的改进11

4.1 Next数组的递推算法11

4.2 Next数组的递归算法13

1.模式串匹配算法的研究意义和现状

串匹配问题是计算机科学的基础问题之一,几乎所有涉及字符串处理的应用中都或多或少的存在字符串匹配的要求,特别在信息检索,网络安全,计算机生物学领域等,字符串匹配为这些领域的核心问题。

串匹配问题是指从给定的字符序列中找出一个或多个具有某种属性的模式序列,而字符串匹配指的便是从给定的字符序列中找出一个或若干个给定的字符串。字符串匹配算法是一个基础算法,它的解决以及在这个过程中产生的方法对计算机的其他问题都产生了巨大的影响。

2.相关基础知识介绍

现有的模式串匹配算法一般分为单模式串匹配和多模式串匹配。多模式穿匹配算法主要是AC算法等,单模式穿匹配算法主要有BF算法,KMP算法和BM算法及其改进算法。

如果根据上述扫描方向来区分,并且可分为三种类型:(1)向前匹配模式的前缀,这些算法由前向后进行扫描,根据扫描的内容,以确定是否匹配成功。例如KMP算法,算法的时间复杂度能达到理论最优结果O(n)。(2)反向模式匹配的后缀,为了提高已匹配信息的利用,BM算法以及它的各种变型中,记为匹配后缀的文本内容,并基于所述内容进行滑动,最差时间复杂度为O(n * m)。(3)后向匹配模式前缀,从后向前进行扫描,反向使用模式逆串的自动机来匹配模式的前缀。目前最为广泛应用的是KMP算法和BM算法。由于KMP充分利用了以前匹配不成功的信息而大大提高了匹配效率,算法复杂度T(n)=O(m + n),所以效率相比其他算法较高。KMP算法避免了BF频繁的回溯算法主串指针的问题,但会有不必要的字符串和模式字符串中重复相同的字符比较多的情况,这种情况导致许多算法效率降低。具体的,KMP算法是在已知模式串的next数组值的基础上执行的,但求next数组在某些情况下现有缺陷,为了提高搜索效率,就必须予以修正,而目前计算修正值的算法存在难理解,计算复杂的缺点。

BBBABBBB

ACABAAAAA

BABCBBBABB

CCCACCCBCAC

AACAAA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值