CN101251845A - 利用改进的Wu-Manber算法进行多模式串匹配的方法 - Google Patents
利用改进的Wu-Manber算法进行多模式串匹配的方法 Download PDFInfo
- Publication number
- CN101251845A CN101251845A CNA2008100197279A CN200810019727A CN101251845A CN 101251845 A CN101251845 A CN 101251845A CN A2008100197279 A CNA2008100197279 A CN A2008100197279A CN 200810019727 A CN200810019727 A CN 200810019727A CN 101251845 A CN101251845 A CN 101251845A
- Authority
- CN
- China
- Prior art keywords
- hash value
- character
- pattern string
- displacement
- string
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种利用改进的Wu-Manber算法进行多模式串匹配的方法,包括以下步骤:1)预处理模式串:依照某个方式对每个模式串进行HASH处理,计算每个HASH值对应的移动距离;对于HASH到同一个值的多个模式串,采用AVL树存储,以加快匹配速度;2)搜索:每次读取一块字符,并计算其HASH值,取该HASH值对应的移动距离,如果距离大于0,则直接移动比较窗口继续搜索,否则在该HASH值对应的AVL树中搜索,在AVL树中搜索完成后移动比较窗口继续搜索。由此,本发明增大了移动距离,显著加快了匹配过程。
Description
技术领域
本发明涉及一种多模式串匹配算法的改进,尤其涉及利用改进的Wu-Manber算法进行多模式串匹配的方法,属于算法技术领域。
背景技术
模式串匹配从来都是一个热门话题,从编辑器到生物科学,再到网络内容分析,应用领域非常广泛。这些应用领域的共同特点是需要处理的数据量巨大,需要匹配的关键词条目多而且可能很长,但对性能要求较高。为此相应的模式串匹配算法层出不穷,应用于单模式串匹配的有KMP、BM等等,应用于多模式串匹配的有AC、Wu-Manber等等。
先明确下模式串匹配问题的数学定义:字符,抽象的实体,匹配的最小单位,字母和数字均可为符号;字母表,若干个字符的有穷集合;字符串,取自某个字母表中的并置起来的有穷符号序列。串匹配问题可以精确叙述如下:字母表∑,令其上的n(n>=1)个字符串p1,p2,...,pn作为模式串,给定一个字符串T,查找T中是否包含有pi(1<=i<=n)。
由于Wu-Manber算法为BM算法的多模式扩展,以下均简单介绍:
BM(Boyer-Moore):单模式串匹配算法,采用从右到左的方法扫描模式串,是应用中最有效的单模式串匹配算法。该算法思想为,将模式串和被比较字符串沿左侧对齐,从模式串的最后一个字符开始比较,当比较到某个字符不相等时,将比较窗口向右移动;移动的距离在预处理模式串时生成,包括良好后缀转移和不良字符转移。
Wu-Manber:多模式串匹配算法,为BM的多模式扩展,同样采用从右到左的方法扫描模式串,计算移动距离时仅利用BM中的不良字符转移,同时该算法又利用了hash的思想减小匹配范围。由于模式串众多,在读取被比较字符串时,采取读入多个字符的方法,即一次读入一块字符。
发明内容
本发明的目的是克服现有技术存在的不足,提供一种利用改进的Wu-Manber算法进行多模式串匹配的方法,旨在有效加速Wu-Manber算法的匹配过程。
利用改进的Wu-Manber算法进行多模式串匹配的方法,包含以下步骤:
1)预处理模式串:计算每个模式串对应的SHIFT数组,并将该串插入对应的链表或AVL树;
a)计算SHIFT数组:模式串P,只考虑P的前lmin个字符,每B个字符为一块,计算HASH值,设该HASH值对应的移动距离s1,该字符块到模式串末端的距离为s2,则该HASH值对应的移动距离重新置为s1和s2的最小值;计算P末端的B个字符的HASH值,将该HASH值对应的移动距离最高位置1;
b)模式串插入:模式串P,只考虑前lmin个字符,计算P的后B个字符的HASH值,若其对应的模式串个数小于给定值N,则插入模式串链表,否则计算P的前B个字符的HASH值,以此为关键字插入对应的AVL树;
2)搜索:比较窗口长度为lmin个字符,在当前比较窗口下,计算后B个字符块的HASH值,取对应的移动距离shift,若最高位不为1,则直接将比较窗口向右移动shift,否则取该HASH值对应的链表或AVL树,在其中搜索,然后将比较窗口向右移动,移动距离为将最高位清0的shift。
进一步地,上述的利用改进的Wu-Manber算法进行多模式串匹配的方法,利用专门的变量存储移动距离为0的hash值,即重新定义一个数组ZERO,当ZERO为1时,表示该hash值对应的块字符为某个模式串的后缀,而SHIFT数组定义为下一次的移动距离,绝对大于0;在搜索过程中,先判断ZERO[hash]是否为1,如果是则进行深层次的匹配,下一次移动距离始终为SHIFT[hash]。
更进一步地,上述的利用改进的Wu-Manber算法进行多模式串匹配的方法,利用模式串的前缀产生hash值,同时以该hash值为关键字构造一个AVL树,将模式串作为数据插入到AVL树的相应结点中;搜索时,首先在AVL树中查找,是否有相应的hash值存在,如果没有直接移动比较窗口,否则在该AVL结点中搜索。
本发明技术方案突出的实质性特点和显著的进步主要体现在:
①在原始的Wu-Manber算法中,如果当前字符块的移动距离为0,则下一次移动距离始终为1,本发明显著增大了此处的移动距离,加快了匹配速度,而且没有增加算法的时间和空间开销;
②将HASH到同一个值的多个模式串以AVL树方式存储,由于AVL树的搜索时间复杂度为O(logn),n为结点个数,因此本发明采用AVL树大大加快了匹配过程。
附图说明
下面结合附图对本发明技术方案作进一步说明:
图1:预处理流程图;
图2:模式串计算shift数组的示意图;
图3:模式串插入到AVL树或链表的示意图;
图4:搜索流程图。
具体实施方式
本发明为Wu-Manber算法的改进,因此先说明原始的Wu-Manber算法,以下是一些术语和匹配流程:
lmin:模式串的最小长度,实际上移动距离及相应HASH值只和模式串的前lmin个字符相关;
B:一次读入的字符个数;
h1,h2:所用的HASH函数,输入为一块字符,输出为一个整数值;
SHIFT:移动数组,HASH所对应的移动距离;
HASH:链表数组,表示后缀hash值相同的模式串链表;
T=t1t2...tn:被比较字符串;
P={p1,p2,...,pr}:模式串;
(一)原始的Wu-Manber算法:
Wu-Manber算法在计算hash值时,只考虑前lmin个字符,即认为所有模式串都是等长的(lmin)。在扫描被比较字符串时,读入一块字符,计算其hash值,得到相应的移动距离shift,如果shift>0,则直接将比较窗口向右移动shift;如果shift=0,则表明该后缀有可能存在于某个模式串中,找到对应的链表(该链表包含所有后缀hash值相同的模式串),遍历其中所有模式串,并提前比较前B个字符的hash值,防止过多的比较运算。
移动数组SHIFT如下生成:
一块字符Bi,如果在所有模式串中都不出现,则该Bi对应的hash值的移动距离为lmin-B+1;如果这块字符存在于某个(或多个)模式串,则找到Bi在模式串中最靠右的位置j及对应的模式串Pi,则移动距离为lmin-B+1-j
以下是Wu-Manber的伪码表示:
Wu-Manber(P={p1,p2,...,pr},T=t1t2...tn)
1. Preprocessing
2. 用lmin-B+1初始化SHIFT数组
3. For每个模式串P Do
4. pos←lmin-B+1
5. Whilepos≤lmin-1 Do
6. h←h1(Ppos为后缀的B个字符)
7. SHIFT[h]←SHIFT[h]和lmin-pos的最小值
8. 将P加入到链表HASH[h]中;pos←pos+1
9. End of while
10. End of for
11.
12. Searching
13. pos←lmin
14. While pos≤n Do
15. i←h1(tpos为后缀的B个字符)
16. If SHIFT[i]=0 Then
17. list←HASH[i]
18. h←h2(tpos-lmin+1为前缀的B个字符)
19. foreach pattern in list Do
20. If h=h2(pattern的前B个字符)Then
21. Compare T with this pattern.
22. End of if
23. End of foreach
24. pos←pos+1
25. Else pos←pos+SHIFT[i]
26. End of if
27. End of while
(二)改进的Wu-Manber算法:
伪码的17行和24行,本发明对该算法的改进主要体现在这两行:
1)如果当前shift为0,则下一次的移动距离都为1,此处没有充分利用模式串的有用信息;
2)后缀hash值相同的模式串可能有很多,成百上千个,而此处仅仅是遍历所有的模式串,时间消耗很长。
第一个问题,利用专门的变量来存储移动距离为0的hash值,即重新定义一个数组ZERO,当ZERO(hash)为1时,表示该hash值对应的块字符可能为某个模式串的后缀,而SHIFT数组定义为下一次的移动距离(绝对大于0)。其构造过程如下:
1. Preprocessing
2. 用lmin-B+1初始化SHIFT数组,用0初始化ZERO数组
3. For每个模式串P Do
4. pos←lmin-B+1
5. While pos≤lmin-2Do
6. h←h1(Ppos为后缀的B个字符)
7. SHIFT[h]←SHIFT[h]和lmin-pos的最小值
8. 将P加入到链表HASH[h]中;pos←pos+1
9. End of while
10. h←h1(Ppos为后缀的B个字符)
11. ZERO[h]←l
10. End of for
在搜索过程中,先判断ZERO[hash]是否为1,如果是则进行深层次的匹配,下一次移动距离始终为SHIFT[hash]。
第二个问题,利用模式串的前缀(前B个字符)产生hash值,同时以该hash值为关键字构造一个AVL树,将模式串作为数据插入到AVL树的相应结点中;搜索时,不需要遍历所有后缀hash值相同的模式串了,首先在AVL树中查找,是否有相应的hash值存在,如果没有直接移动比较窗口,否则在该AVL结点中搜索。
对于预处理模式串:依照某个方式对每个模式串进行HASH处理,计算每个HASH值对应的移动距离;对于HASH到同一个值的多个模式串,采用AVL树存储,以加快匹配速度。
对于搜索:每次读取一块字符,并计算其HASH值,取该HASH值对应的移动距离,如果距离大于0,则直接移动比较窗口继续搜索,否则在该HASH值对应的AVL树中搜索,在AVL树中搜索完成后移动比较窗口继续搜索。
本发明完整过程如下:
1)预处理模式串:计算每个模式串对应的SHIFT数组,并将该串插入对应的链表或AVL树,参见图1;
a)计算SHIFT数组:模式串P,只考虑P的前lmin个字符,每B个字符为一块(先不考虑最后的一块),计算HASH值,设该HASH值对应的移动距离(不考虑最高位)s1,该字符块到模式串末端(仅lmin个字符长)的距离为s2(s2>0),则该HASH值对应的移动距离重新置为s1和s2的最小值;计算P末端的B个字符的HASH值,将该HASH值对应的移动距离最高位置1,参见图2;
b)模式串插入:模式串P(只考虑前lmin个字符),计算P的后B个字符的HASH值,若其对应的模式串个数小于给定值N,则插入模式串链表,否则计算P的前B个字符的HASH值,以此为关键字插入对应的AVL树,参见图3;
2)搜索:比较窗口长度为lmin个字符,在当前比较窗口下,计算后B个字符块的HASH值,取对应的移动距离shift,若最高位不为1,则直接将比较窗口向右移动shift,否则取该HASH值对应的链表或AVL树,在其中搜索,然后将比较窗口向右移动,移动距离为将最高位清0的shift,参见图4。
由上可见,本发明方法相当于以空间换取时间,多定义了一个ZERO数组来达到加速匹配的目的。但事实上,ZERO数组只用到0和1两个值,完全可以用一个bit来表示,为此将ZERO数组并入SHIFT数组,当shift=SHIFT[hash]时,shift的最高位存储的是ZERO的信息,即如果最高位为0,则直接移动比较窗口,否则进行深层次的比较。
将后缀对应hash值相同的模式串,依据前缀对应的hash值为关键字创建一个AVL树,由于AVL树的搜索时间复杂度为O(logn),因此可以大大加快匹配速度。但是由于AVL树同样占用空间,需要在时间和空间上作权衡,做法是,当如此的模式串个数小于某个给定值(比如为2)时,不生成AVL树,直接用链表存储,只有个数大于等于给定值时才构造AVL树。
综上所述,利用专门的变量表示某个HASH值对应的移动距离是否为0,而移动距离则重新定义为下一次比较窗口的移动距离,该数值绝对大于0;对比Wu-Manber算法,它在移动距离为0时,下一次的移动距离始终为1,因此本发明增大了移动距离,显著加快了匹配过程。将HASH到同一个值的多个模式串以AVL树方式存储,由于AVL树的搜索时间复杂度为O(logn),n为结点个数,因此本发明采用AVL树大大加快了匹配过程。
以上仅是本发明的具体应用范例,对本发明的保护范围不构成任何限制。凡采用等同变换或者等效替换而形成的技术方案,均落在本发明权利保护范围之内。
Claims (3)
1.利用改进的Wu-Manber算法进行多模式串匹配的方法,包括以下步骤——
1)预处理模式串:计算每个模式串对应的SHIFT数组,并将该串插入对应的链表或AVL树;
a)计算SHIFT数组:模式串P,只考虑P的前lmin个字符,每B个字符为一块,计算HASH值,设该HASH值对应的移动距离s1,该字符块到模式串末端的距离为s2,则该HASH值对应的移动距离重新置为s1和s2的最小值;计算P末端的B个字符的HASH值,将该HASH值对应的移动距离最高位置1;
b)模式串插入:模式串P,只考虑前lmin个字符,计算P的后B个字符的HASH值,若其对应的模式串个数小于给定值N,则插入模式串链表,否则计算P的前B个字符的HASH值,以此为关键字插入对应的AVL树;
2)搜索:比较窗口长度为lmin个字符,在当前比较窗口下,计算后B个字符块的HASH值,取对应的移动距离shift,若最高位不为1,则直接将比较窗口向右移动shift,否则取该HASH值对应的链表或AVL树,在其中搜索,然后将比较窗口向右移动,移动距离为将最高位清0的shift。
2.根据权利要求1所述的利用改进的Wu-Manber算法进行多模式串匹配的方法,其特征在于:利用专门的变量存储移动距离为0的hash值,即重新定义一个数组ZERO,当ZERO为1时,表示该hash值对应的块字符为某个模式串的后缀,而SHIFT数组定义为下一次的移动距离,绝对大于0;在搜索过程中,先判断ZERO[hash]是否为1,如果是则进行深层次的匹配,下一次移动距离始终为SHIFT[hash]。
3.根据权利要求1所述的利用改进的Wu-Manber算法进行多模式串匹配的方法,其特征在于:利用模式串的前缀产生hash值,同时以该hash值为关键字构造一个AVL树,将模式串作为数据插入到AVL树的相应结点中;搜索时,首先在AVL树中查找,是否有相应的hash值存在,如果没有直接移动比较窗口,否则在该AVL结点中搜索。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100197279A CN101251845B (zh) | 2008-03-13 | 2008-03-13 | 利用改进的Wu-Manber算法进行多模式串匹配的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100197279A CN101251845B (zh) | 2008-03-13 | 2008-03-13 | 利用改进的Wu-Manber算法进行多模式串匹配的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101251845A true CN101251845A (zh) | 2008-08-27 |
CN101251845B CN101251845B (zh) | 2010-06-09 |
Family
ID=39955236
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008100197279A Active CN101251845B (zh) | 2008-03-13 | 2008-03-13 | 利用改进的Wu-Manber算法进行多模式串匹配的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101251845B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901257A (zh) * | 2010-07-21 | 2010-12-01 | 北京理工大学 | 一种多字符串匹配方法 |
CN102184205A (zh) * | 2011-04-28 | 2011-09-14 | 哈尔滨工业大学 | 基于可扩展精度混沌哈希的多模式串匹配算法 |
CN102609450A (zh) * | 2012-01-10 | 2012-07-25 | 顾乃杰 | 一种按字长匹配的多模式串匹配方法 |
CN104881439A (zh) * | 2015-05-11 | 2015-09-02 | 中国科学院信息工程研究所 | 一种空间高效的多模式串匹配方法和系统 |
CN105426412A (zh) * | 2015-11-03 | 2016-03-23 | 北京锐安科技有限公司 | 多模式的串匹配方法和装置 |
CN105701093A (zh) * | 2014-11-24 | 2016-06-22 | 中兴通讯股份有限公司 | 基于自动机的模式匹配的方法及装置 |
CN113241121A (zh) * | 2021-04-26 | 2021-08-10 | 哈尔滨理工大学 | 一种基于mpi的基因序列精确匹配的方法 |
CN113347214A (zh) * | 2021-08-05 | 2021-09-03 | 湖南戎腾网络科技有限公司 | 一种高频状态匹配方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1538322B (zh) * | 2003-04-14 | 2010-04-21 | 中兴通讯股份有限公司 | 一种用于消除字符串模糊匹配冗余的过滤方法 |
-
2008
- 2008-03-13 CN CN2008100197279A patent/CN101251845B/zh active Active
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901257A (zh) * | 2010-07-21 | 2010-12-01 | 北京理工大学 | 一种多字符串匹配方法 |
CN101901257B (zh) * | 2010-07-21 | 2012-07-04 | 北京理工大学 | 一种搜索引擎中的多字符串匹配方法 |
CN102184205A (zh) * | 2011-04-28 | 2011-09-14 | 哈尔滨工业大学 | 基于可扩展精度混沌哈希的多模式串匹配算法 |
CN102184205B (zh) * | 2011-04-28 | 2016-04-13 | 哈尔滨工业大学 | 基于可扩展精度混沌哈希的多模式串匹配方法 |
CN102609450A (zh) * | 2012-01-10 | 2012-07-25 | 顾乃杰 | 一种按字长匹配的多模式串匹配方法 |
CN102609450B (zh) * | 2012-01-10 | 2014-07-23 | 顾乃杰 | 一种按字长匹配的多模式串匹配方法 |
CN105701093A (zh) * | 2014-11-24 | 2016-06-22 | 中兴通讯股份有限公司 | 基于自动机的模式匹配的方法及装置 |
CN104881439A (zh) * | 2015-05-11 | 2015-09-02 | 中国科学院信息工程研究所 | 一种空间高效的多模式串匹配方法和系统 |
CN104881439B (zh) * | 2015-05-11 | 2019-03-22 | 中国科学院信息工程研究所 | 一种多模式串匹配方法和系统 |
CN105426412A (zh) * | 2015-11-03 | 2016-03-23 | 北京锐安科技有限公司 | 多模式的串匹配方法和装置 |
CN113241121A (zh) * | 2021-04-26 | 2021-08-10 | 哈尔滨理工大学 | 一种基于mpi的基因序列精确匹配的方法 |
CN113347214A (zh) * | 2021-08-05 | 2021-09-03 | 湖南戎腾网络科技有限公司 | 一种高频状态匹配方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN101251845B (zh) | 2010-06-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101251845B (zh) | 利用改进的Wu-Manber算法进行多模式串匹配的方法 | |
CN102768681B (zh) | 一种用于搜索输入的推荐系统及方法 | |
Amir et al. | Text indexing and dictionary matching with one error | |
CN109902142B (zh) | 一种基于编辑距离的字符串模糊匹配和查询方法 | |
CN104268280A (zh) | 一种基于键值数据库的层次化存储与查询方法 | |
Amir et al. | Pattern matching in hypertext | |
Vinga et al. | Pattern matching through Chaos Game Representation: bridging numerical and discrete data structures for biological sequence analysis | |
CN105515997B (zh) | 基于bf_tcam实现零范围扩张的高效范围匹配方法 | |
CN102799600B (zh) | 一种基于编码关联的多模式匹配算法及系统 | |
CN105096944A (zh) | 语音识别方法及装置 | |
Tomohiro et al. | Palindrome pattern matching | |
CN108509505A (zh) | 一种基于分区双数组Trie的字符串检索方法及装置 | |
CN108628907A (zh) | 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 | |
CN104268176A (zh) | 一种基于搜索关键词的推荐方法及系统 | |
CN109446293A (zh) | 一种并行的高维近邻查询方法 | |
Breslauer et al. | Simple real-time constant-space string matching | |
CN110532284B (zh) | 海量数据存储和检索方法、装置、计算机设备及存储介质 | |
Hirvola et al. | Approximate online matching of circular strings | |
Ganguly et al. | A linear space data structure for range LCP queries | |
Nakashima et al. | The position heap of a trie | |
CN109657108B (zh) | 一种域名资产数据存储和查询方法和系统 | |
CN108763170A (zh) | 常数工作空间并行构造后缀数组的方法及系统 | |
Amir et al. | Pattern matching in hypertext | |
Jansson et al. | A fast algorithm for optimal alignment between similar ordered trees | |
Gawrychowski et al. | Validating the Knuth-Morris-Pratt failure function, fast and online |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |