完整版KMP算法的FPGA实现毕业论文Word文件下载.docx
《完整版KMP算法的FPGA实现毕业论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《完整版KMP算法的FPGA实现毕业论文Word文件下载.docx(44页珍藏版)》请在冰豆网上搜索。
关键词:
模式匹配算法;
KMP算法;
FPGA
ABSTRACT
Withtherapiddevelopmentofnetworktechnology,softwareto
detectbecomesmoreandmoreinadequate.
AsthedevelopmentofFPGAtechnology,it’sbecomes
increasinglypopulartorealizethepatternmatchingongreatlyimprovethespeedofthealgorithm,isadapttothequickdevelopmentoftechnology.
Thispaperfocusesonseveraltypicalpatternsmatching
algorithminvolving:
BFalgorithm,KMPalgorithm,BMalgorithm,BMHalgorithm,ACalgorithmandtheAC-BMalgorithm.Besides,thispaperwillalsointroducethebasicknowledgerelatedtoFPGAaswellastheselectionofthedescriptionlanguageofmatching
algorithmswhicharerelativelythroughandthereseachingfindingsfromabroadofusingFPGAtoachievepatternmactching,KMP,strongfeasibilityandeasymulti-patternmacthingtoprimarystring
inrealizingwhychooseittobethecorearithmeticofmatchingpatternandeffiencyofpatternmachinginstringbyviastringentered,nextfunctioncalculation,stringmatching.Thecircumstancesdescribedinthefourthchapter.
Keywords:
Patternmatchingalgorithm;
KMPalgorithm;
FPGA
第1章引言..........................................................
1.1
研究背景.....................................................
1.2
模式匹配算法的发展与研究现状.................................
第2章模式匹配算法.................................................
2.1模式匹配定义.................................................
2.2单模式匹配...................................................
2.2.1BF算法.................................................
2.2.2KMP算法................................................
2.2.3BM算法.................................................
2.2.4BMH算法................................................
2.3多模式匹配...................................................
2.3.1AC算法.................................................
2.3.2AC-BM算法..............................................
2.4影响模式匹配算法的因素.......................................
第3章FPGA基本的知识..............................................
3.1FPGA简介....................................................
3.2FPGA与CPLD的关系以及工作原理...............................
3.3硬件语言选择................................................
第4章KMP算法VerilogHDL实现......................................
4.1模式串输入..................................................
4.2next函数的计算..............................................
4.3字符串匹配..................................................
4.4代码通用性的验证............................................
第5章结束语.......................................................
致谢...............................................................
附录...............................................................
第1章引言
1.1研究背景[1]
在网络处理中,模式匹配是指将分组各域进行比特位的匹配处理。
一般,模式匹配模块有两个输入,一个是规则的模式表达式,另一个是分组域。
它的输出是输入分组的各域是否与输入模式的布尔值匹配。
这类模式匹配的实质还是字符
串匹配,它的基本运算就是从一个主字符串中找到某个特定模式串出现的位置。
目前,串匹配算法一般是以模式串的长度为扫描窗口大小,在窗口中使用不同的扫描策略来进行匹配。
假设模式串长为m,主串长为n,串匹配算法根据策略的不同,大致可以分为以下3类[2][3]:
从前往后匹配模式前缀的KMP算法,从后往前匹配模式后缀的BM算法及其各种变形,以及从后往前匹配模式前缀的RF算法等等。
[4]
KMP算法是从前往后进行扫描,使用自动机记住己匹配模式前
缀的正文内容,并依据这些内容来确定是否已经匹配成功。
换句话说,就是先对模式串进行预计算,然后再与主串匹配,而且主串不需要回
[5]
溯,它的时间复杂度比较好,一般是O(m+n)。
BM算法及其变形是在扫描窗口中从后往前进行扫描,记住已匹配模式后缀的正文内容,并依据这些内容来进行窗口移动,这种方法虽然简单易行,但是时间复杂度比较差,最坏情况下为0(m+n),所以当串比较长时,效率就会很低。
RF算法等是在从后往前进行扫描时,反向使用模式逆串的后缀自
动机来匹配模式的前缀,这样可以增大窗口移动的距离,从而获得更
好的平均时间复杂度,达到理论最优结果。
该方法效率较高,但是比
较复杂,硬件实现难度大。
综合考虑现有的比较成熟的模式匹配算法,认为在硬件实现方
面,KMP算法具有其他算法没有的优势,所以本文选择KMP算法作为研
究的主要对象。
[14]
1.2模式匹配算法的发展与研究现状
BF算法是最早提出来的模式匹配算法,也是最简单的一个算法。
该算法的最坏时间复杂度为O(M*N)。
1970年,S.A.COOK从理论上证明了串匹配问题可以在O(m+n)
时间内解决,同一年,Morris和Pratt仿照COOK的证明构造了一个算
法,随后,Knuth对这个算法进行了一些改进,在1976年,Knuth提出
了第一个在线性时间内解决字符串的模式匹配算法,这个算法被称为
KMP算法它的时间复杂度为O(m+n)。
1977年,Boyer和Moore提出了另一个与KMP算法截然不同的却同样拥有线性时间复杂度的算法(BM算法)。
BM算法在实际的模式匹配中,跳过了很多无用的字符,这种跳跃式的比较方式,使BM算法获得了极高的效率,特别是在大字符集上进行字符串的模式匹配时。
在实际的应用中,BM算法比KMP算法更有效率。
多模式匹配是另一个研究热点。
Aho-Corasie算法(AC算法)是第
一个在O(N)上解决这个问题的算法。
AC算法可以被看作是KMP算法的
更一般化形式。
此后,BM算法跳跃的思想也被应用到了多模式匹配上,
1979年Comments.Walter提出了一种新的多模式匹配算法,称为CW
算法,这个算法将AC算法和BM算法的思想结合起来,获得了更好的执
行效率。
沿着AC算法这条路线,Crochemore等人将AC算法和DAWG结合,
获得了一种新的算法,称为DAWG-MATCH。
实验结果表明,该算法比
Comments-Walter的算法更有效率。
此外,人们还提搬了其它一些多模式匹配算法。
1994年,SunWu
和Manber提出了第一个基于过滤思想的多模式匹配算法。
这个算法将
过滤思想和BM思想结合起来,在实际的应用中获得了极其高的效率。
实验表明,在SunSparcl0上,他们的算法可以于10秒内完成在15.8M的文本中搜索10000个模式的工作。
在WM算法的基础上,SunWu和Manber实现了一个用于模糊匹配的工具agrep和一个文本检索的工具
glimpse,在实际的应用中都获得了良好的效率。
1996年,RobertMuth和UdiManber给出了一个快速的多模式模
糊匹配算法,这个算法也是基于过滤的思想,同时采用了两级散列的
技术,从而获得了极高的执行效率,实验数据表明,该算法能在小于
1秒的时间内完成在1M文本中对1000个模式的搜索和模糊匹配的过
程。
但是不幸的是,该算法只允许模式和文本子串之间存在1个不同
点,这样的约束限制了该算法在实际中的应用。
1999年,在数据压缩和位操作的思想上,SunKim和YanggonKim
设计出了一个新的多模式匹配算法,实验证明,该算法比SunWu和
Manber的算法有更好的表现,特别是在小字符集上。
目前对模式匹配算法的研究一部分还停留在单模式匹配算法,而
对多模式匹配算法的研究主要集中在算法的综述、测试以及对现有算
法的一些相应改进上。
这些改进的算法虽然也取得一定的成果,但是
总体效果都不是很理想,主要是算法速度受限于模式的数目或者实现
算法需要的空间消耗的内存太大。
字符串的模糊匹配是近年来倍受关注的领域,模糊匹配允许在搜
索时搜索出与模式有一些差别的文本中的字符串。
在这个领域,有四
条主要的技术路线:
①动态规划算法;
②自动机算法;
⑨过滤算法;
④位并行算法。
由于这不是本文研究的主要内容,故不做详细介绍。
第2章模式匹配算法
模式匹配分为单模式匹配和多模式匹配,一次在文本串中查找一
个模式串出现的过程,称为单模式匹配。
同时查找一个模式串集合中
的所有模式串的出现的过程称为多模式匹配。
本章主要讨论几种典型的单模式匹配算法和多模式匹配算法。
2.1模式匹配定义
字符串的模式匹配问题的形式化定义如下:
在字符集Σ上,给定一个长度为N的文本字符串T[1,N],以及一个长度为M的模式字符串Pi[1,M]。
模式集数量用k来表示,模式集
用P={pl,p2,,pk}来表示。
如果对于l<
=S<
=N,存在T[S+1,S+M]=Pi[1,M],则模式Pi在文本T的位置S处出现,即模式与文本匹配。
字符串的模式匹配问题就是要寻找P在T中是否出现,以及出现的位置。
例如:
文本字符串T:
Hereisabeauterfulpicture
模式字符串P:
beauterful
该例子显示需要在文本字符串T中搜索模式字符串P:
“beauterful"
,通过搜索我们发现模式字符串P:
“beauterful”出现在文本字符串T中第1l位,那么我们称模式字符串P与文本字符串T
匹配成功。
2.2单模式匹配
2.2.1BF算法
BF算法即BruteForce算法的缩写。
是蛮力算法的意思,实际上
是原理和逻辑最简单的算法.这个算法在字符申规模较小的时候,还
是能够取得较好的效益。
BF算法就是把模式串和文本串的所有窗口逐一进行比较。
如果当
前字符相同而且模式串结束则匹配成功.如果字符相同而模式串未结
束就比较下一个字符:
如果字符不相同,则窗口向后移动一个字符位
置,模式串和新窗口从开始字符重新比较。
对于文本字符串Tl,Tk,Tj,Tm-k-1,Tn
模式字符串Pl,Pi,Pm
算法描述:
(1)P和T从左端对齐,使得Pl与T1对齐;
(2)从左到右匹配P与T的字符,直到出现不匹配的情况或是P已被完全匹配:
(3)如果出现不匹配的情况,则将P右移一个字符,重新开始匹配;
(4)重复上述过程,直到P被完全匹配,或P移到T的右端。
每次模式串和某个窗口比较次数应该是0(m),而窗口的个数是0
(n—m)个。
因此算法最坏情况的时问复杂度是O(mn)。
最坏情况的例子之一是文本串是某一相同字符的字符串.而模式串也是这一字符的字符串。
这种算法的缺陷是匹配过程中带有回溯,准确地说是当匹配不成功的时候,之前进行的匹配完全变为无效的,所有的比较需要从模式串首字符重新开始。
BF算法的优点是不需要预处理。
辅助的空间是常量,即只需要几
个变量的临时存储区域。
模式串和某个窗口内匹配的顺序是任意的,
向左或者向右都是可以的。
2.2.2KMP算法
KMP算法是Knuth等人在BF算法的基础上提出来的。
从本质上讲,
KMP算法就是出现不匹配情况下带有智能指针初始化的BF算法。
为了
在不匹配时重新定位指针,KMP算法需要进行预处理算出一个Shift
表来。
基本思想:
KMP算法利用已匹配成功部分的信息,即前缀(模式字
符串中存在的相同子串),可以使模式字符串向前推进若干个字符位
置,而不只是一个字符,避免了重复比较,同时也实现了文本字符串
指针的无回溯。
要点是:
我们能够通过预先对模式的分析获得知识,
即如果在模式的位置l或2匹配失败则移动1个位置,如果在模式的位
置3匹配失败则移动2个位置,如果在模式的位置4匹配失败则移动3
个位置,以此类推。
算法描述[9]:
当模式匹配执行到比较字符Ti和Pi,其中l=i=n,l=j=m。
(1)若Ti=Pj则继续往右作匹配检测,即对Ti+1和Pj+l;
进行匹配
检测。
(2)若Ti≠Pj时则分两种情况进行讨论:
第一种情况:
若j=l,则对Ti+l和Pi进行匹配检测,即把模式和
正文向右移动一位再从模式的第一个字符进行匹配。
第二种情况:
若l<
j=m,我们将试图在模式中找到一个合适位置
再进行比较,我们把这个下标记做
next[j]
。
执行Ti和next[j]
的匹配,
其中next[j]的构造是算法的核心,约定如下:
Next[j]=-1,当j=0时
Next[j]=max{k|0<
k<
j且“P0P1,Pk-1”=“Pj-kPj-k+1,Pj-1
”}
此集合不为空集
Next[j]=0
,其他情况
由于本文主讲的是KMP算法,估计我们举例详细说明,如主串为
ababcabcacbab,模式串为abcac,匹配过程如下图2-1:
图2-1
一般情况下,假设主串为s0s1,sn-1,模式串为p0p1,pm-1,从上
例的分析可知,为了实现改进算法,需要解决下述问题:
当匹配过程
中产生“失配”(即si≠pj)时,模式串“向右滑动”可行的距离有
多远,换句话说,当主串中字符Si与模式中字符Pj“失配”(即比较不等)时,主串中字符Si(i指针不回溯)应与模式中哪个字符再比较?
假设此时主串中字符Si应与模式中字符Pk(k<j)继续比较,则
模式中字符Pk前面k个字符的子串必须满足下列关系式(f-1),且不
存在
k'
>k
满足下列关系式(
f-1
)
p0p1,p
k-1
=
si-k
si-k+1,s
i-1
(f-1)
图2-2模式串与主串的对应关系一
当主串中字符Si与模式中字符Pj“失配”时,已经得到的“部
分”匹配结果是:
pj-kpj-k+1,pj-1=si-ksi-k+1,si-1
(f-2)
图2-3模式串与主串的对应关系二
由(f-1)和(f-2)推得下列等式
p0p1,pk-1=pj-kpj-k+1,pj-1
(f-3)
我们称
"
p0p1,pk-1
为"
p0p1p2
pj-2pj-1
的前缀子串,
pj-kpj-k+1
pj-1
为"
p0p1p2,pj-2pj-1"
的后缀子串。
若模式串中存在真子串"
p0p1,pk-1
pj-kpj-k+1,
pj-1"
,且满足
kj
0<
<
则当匹配过程中,主串中字符
Si与模式中字符
Pj比较不等时,仅需
将模式向右滑动至模式中第k个字符和主串中字符Si对齐,此时,模
式中头k个字符的子串"
p0p1,p
-1
必定与主串中字符
S
之前长度为k
k
i
的子串"
si-ksi-k+1,s
i-1"
相等。
由此,匹配仅需从模式中
Pk与主串中字
符Si比较起继续进行。
若令next[j]=k,则next[j]表明当模式中第j个字符与主串中相
应字符“失配”时,在模式中需重新和主串中该字符进行比较的字符
的位置。
由此就可以得出前面next函数的求值方法。
KMP算法搜索阶段在最坏的情况下时闻复杂度为O(n*m),但在一
般情况下,其实际的执行时间近似于O(n+m),Shift表的存在需要额
外的空间为O(m)。
在大多数情况下,KMP算法并不比BF算法好很多,
但KMP算法确保了线性,并且其扩展性适合求解更难的问题,尤其是
因为KMP算法不需要回溯,在处理从外设读入的庞大文件时,这种特
性很有价值。
2.2.3BM算法
BM算法是由Boyer和Moore于1977年提出,该算法是目前应用最为广泛的单模式匹配算法。
BM算法的一个最主要的特点是,在对字符串的匹配过程中,可以跳过很多无用的字符,即不对无用的字符进行匹配。
通过这种跳跃式的匹配,获得了较高的执行效率。
有实验数据表明,BM算法的匹配速度大约是KMP算法的3~5倍。
BM算法描述[15]:
第一步:
预处理,算法根据预先计算好的两个数组将模式字符串向右移动尽可能远的距离。
计算Skip[]数组和Shift[]数组,分别代表BC规则和GS规则。
第二步:
从右向左逐个字符比较文本字符串和模式字符串,单个字符匹配则继续比较。
如果到达模式字符串的最左边,则成功发生了匹配,输出;
如果发生字符失配,则转第三步。
第三步:
取失配字符相应的Skip[]数组和Shift[]数组中的数值最大的一个,
作为移动距离,将模式字符串右移。
如果己到达文本字符串的末尾,则退出算法;
否则转回到第二步执行。
BM算法被设计成为在文本中搜索单一模式字符串的算法,在单一模式的字符串匹配算法中,BM算法一般被认为是性能最佳的。
而在内容过滤和检测中有很多种关键词模式需要匹配,因此BM算法需要对每一种模式分别进行匹配。
BM算法的预处理阶段的时间空间复杂性是O(m+n),查找阶段的时间复杂性是O(mn),查找非周期性模式