字符串模式匹配算法综述Word格式.docx
- 文档编号:16016803
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:10
- 大小:51.92KB
字符串模式匹配算法综述Word格式.docx
《字符串模式匹配算法综述Word格式.docx》由会员分享,可在线阅读,更多相关《字符串模式匹配算法综述Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
1.模式匹配算法
1.1单模式匹配算法
1.1.1BF(BruceForce)算法
1.算法思想
从文本字符串T的第一个字符起和模式字符串P中的第一个字符开始比较,若相等,逐个比较后续字符,否则从文本字符串的下一个字符起再重新和模式字符串的第一个字符比较。
2.算法描述
对于文本字符串
模式字符串
(1)P和T从左端对齐,使得
与
对齐;
(2)从左到右匹配P与T的字符,直到出现不匹配的情况,则执行(3),或是P己被完全匹配的情况则结束比较;
(3)将P右移一个字符,重新从P的第一个字符开始匹配;
(4)重复上述
(2)过程,直到P被完全匹配,或P移到T的右端。
1.1.2KMP(KnuthMorrisPratt)算法
KMP算法是Knuth等人在BF算法的基础上提出来的。
从本质上讲,KMP算法就是出现不匹配情况下带有智能指针初始化的BF算法。
为了在不匹配时重新定位指针,KMP算法需要进行预处理算出一个next数组来。
1.基本思想
KMP算法利用己匹配成功部分的信息,即前缀(模式字符串中存在的相同子串),可以使模式字符串向前推进若干个字符位置,而不只是一个字符,避免了重复比较,同时也实现了文本字符串指针的无回溯。
当模式匹配执行到比较字符
和
,其中l=i=n,l=j=m。
(l)若
=
则继续往右做匹配检测,即对
和
进行匹配检测。
(2)若
当j=l,则对
进行匹配检测,即把模式和正文向右移动一位再从模式的第一个字符进行匹配;
若l<
j=m,我们将试图在模式中找到一个合适位置再进行比较,我们把这个下标记做next[j]。
执行
的匹配,其中next[j]的构造是算法的核心,约定如下:
字符串模式匹配算法要解决的关键问题是:
在模式与文本在某个位置比较失败时,如何使模式串窗口向右移动最佳距离,尽量多的跳过不必要比较的字符,减少匹配的次数,并使产生这种距离的算法复杂度降低和易于理解。
通过对现有的各种字符串匹配算法进行分析研究,我们提出一种改进算法,该算法简单实用,便于理解。
与KMP算法类似,在模式串的匹配过程中,字符比较采用符合人们习惯的从左到右顺序,模式窗口也是从左到右移动。
设当前的比较窗口是
,在某次比较过程中失败于
处,即前j个字符匹配成功:
,而
≠
。
首先定义一个函数S来确定正文中出现的字符x在模式P中的位置,考虑到要使用模式对应窗口后的第一个字符,在模式串P中补充一个字符Pm与之对应,以使和文本中的窗口对齐,这样
,如图1所示。
图1模式串P与主串T对应位置
函数S的定义如下:
其中:
x取当前窗口匹配失败位置j及其后的字符即x=
,j≤k≤m,并且x取值位置的变化引起前面子串{
}长度的变化。
S(x)函数实质是用来求匹配失败时模式串的向右移动距离。
有以下三种情况:
(1)当x不在前面的子串(子串包括P本身)中时,启发移动的距离是子串的字符个数;
(2)在子串中从后向前查找第一个与x相同的字符,启发移动的距离是它们之间的间隔距离;
(3)如果
,子串
的下标0-1=-1,为统一使用函数S(x)而规定的取值。
图2改进算法的具体实现流程
我们采用3个位置的字符:
、
进行计算,之所以考虑用
来参与决定模式窗口的移动距离,是因为如前面的字符发生不匹配,则模式至少向后移动一个位置,二者处于移动后的窗口之内,作为新窗口之内的字符,
也需要与模式中与之相同的字符对齐,它们也要求模式滑过一定距离,所以考查由它们来启发的距离是自然的,尤其是当二者不在它们前面的子串中时,能够得到更大的启发移动位移,比如位移距离可以是j+1、m+1,不仅仅是kq,这样可以显著减少模式比较的次数,所以有必要考虑这两个字符的参与。
这一算法的主要思想是:
利用文本串当前窗口的特殊位置的字符来启发窗口向右移动的距离,取MAX(S(
)作为实际移动距离,记为MAX(S),假设在执行文本中自位置i起与模式的从左至右的匹配检查中,一旦发现不匹配(假设在Ti+j处发生不匹配),则去执行由
对应起始的下一窗口的尝试。
1.1.4BM(Boyer-Moore)算法
1.BM算法思想
假设模式字符串P(Pattern)的长度为m。
先令模式字符串Pattern最左边的字符和文本字符串T(Text)最左边的字符对齐,然后对Pattern中最后一个字符与其在Text中相对应的字符T[m]进行比较,即从右向左进行匹配,当发现不匹配时,算法采用两条启发性规则,这两条启发性规则是:
坏字符(BC)规则和好后缀(GS)规则,来计算模式字符串移动的距离,实现跳跃式的遍历匹配。
(1)坏字符BC规则描述
当模式字符串P中的某个字符与文本字符串T中的某个字符不相同时,出现一个坏字符,BM算法向右移动模式字符串,让模式中最靠右的对应字符与坏字符相对,然后继续匹配。
移动函数如下:
将Pattern和Text左对齐后,Pattern中最后一个字符与其在Text中对应字符比较的结果有下面两种可能。
<
1>
.T[m]根本没有在Pattern中任何一个位置出现,那么我们可以将Pattern向右移动m个字符,然后将Pattern中最后一个字符与它现在所对应的Text中的字符(即T[2m])进行比较。
如图3所示:
图3T[m]不在Pattern中出现
在上图中,Pattern的长度m=4,Pattern和Text左对齐后,检查Pattern中最后一个字符“E”与它在Text中对应的字符“G”,结果是不匹配;
再检查“G”是否在Pattern其它位置出现,发现“G”不在Pattern中任一位置出现,所以移动距离为4,移动后的结果如图4所示:
图4跳跃后的结果
2>
.如果T[m]是Pattern中的第j个字符,那么我们可以将Pattern向右移动m-j个字符。
如图5所示:
图5T[m]在Pattern中出现
在上图中,Pattern和Text左对齐后,检查Pattern中最后一个字符“E”与它在Text中对应的字符“D”,结果是不匹配;
再检查,“D”是否在Pattern其它位置出现,发现“D”在Pattern中的最右出现位置是3,所以移动距离为4-3=1,移动后的结果如图6所示:
图6跳跃后的结果
(2)好后缀GS规则描述
如果已经匹配了一个好后缀,并且在模式中还有另外一个相同的后缀,GS规则考虑己经取得的匹配情况,确定了一个新的移动距离,该函数只与模式字符串P有关。
当比较过程中发生了失配时,具体分以下两种情况讨论。
P中间的最右某一子串
与已比较部分
相同,可以让P右移S位。
P已比较部分
的后缀
与P的前缀
满足上述两种情况的较小的S值即为最佳右移距离。
例如将Pattern和Text左对齐后,Pattern中最后一个字符与其在Text中对应字符进行比较,结果如图7所示:
跳跃前:
跳跃后:
图7好后缀跳转示例
上图中,文本字符串T中的字符“o”不匹配模式字符串P中的字符“s”,根据坏字符跳转,BadChar(o)等于0。
因此,坏字符跳转在这里不起作用。
但我们发现文本字符串T中的“two”在P中显示多次。
我们将模式字符串P向右移动,使模式字符串P中第二次出现的子串“two”与文本字符串T的后缀“two”对齐。
根据好后缀规则,将模式字符串P移动字符个数为9。
当模式字符串与文本字符串不匹配时,根据具体情况采用坏字符或者好后缀移动函数来计算偏移值。
如同时满足两条启发性规则,在这种情况下就选取两者中的较大者作为模式字符串右移的距离。
因为任何一个都可以保证移动是安全的,使用最大的移动值不会跳过可能的匹配。
(1)预处理,算法根据预先计算好的两个数组将模式字符串向右移动尽可能远的距离。
计算Skip[]数组和Shift[]数组,分别代表BC规则和GS规则。
(2)从右向左逐个字符比较文本字符串和模式字符串,单个字符匹配则继续比较。
如果到达模式字符串的最左边,则成功发生了匹配,输出;
如果发生字符失配,则转第三步。
(3)取失配字符相应的Skip[]数组和Shift[]数组中的数值最大的一个,作为移动距离,将模式字符串右移。
如果已到达文本字符串的末尾,则退出算法;
否则转回到第二步执行。
BM算法被设计成为在文本中搜索单一模式字符串的算法,在单一模式的字符串匹配算法中,BM算法一般被认为是性能最佳的。
而在内容过滤和检测中有很多种关键词模式需要匹配,因此BM算法需要对每一种模式分别进行匹配。
BM算法的预处理阶段的时间空间复杂性是O(m+n),查找阶段的时间复杂性是O(mn),查找非周期性模式时的最坏情况下比较次数是3n。
BM算法最坏时间复杂度是O(mn),最好时间复杂度是O(n)。
对多模式字符串进行匹配,直接采用BM算法的复杂度是O(kn)。
1.1.4BMH(Boyer-Moore-Horspool)算法
1980年,Horspool改进了BM算法,称为BMH算法。
该算法在移动模式时仅考虑了坏字符启发,即在预处理时只使用PreBadchar预处理函数。
通过研究和证明,Horspool发现:
在文本字符串T字符种类较少的情况下,坏字符启发的效率不高,通过好后缀启发可以增加匹配速度,提高匹配效率。
但是在文本字符串T字符种类较多的情况下,例如T中字符为ASCII码的情况下,坏字符启发效率明显提高,这时好后缀启发的优越性体现得并不明显,因此仅仅采用坏字符启发对BM算法有比较明显的改进。
1.算法描述
例如:
文本字符串:
HEREISASIMPLEPICTURE模式字符串:
PICTURE,BMH算法的匹配过程如图8所示:
图8BMH算法匹配过程
1.2多模式匹配算法
1.2.1AC(Aho-Corasick)算法
1975年,贝
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 字符串 模式 匹配 算法 综述