Wu-Manber字符串多模式匹配

Wu-Manber算法采用跳跃不可能匹配字符和hash散列的方法,加速匹配的进行。该方法需要对所有模式进行预处理,构建SHIFT,HASH和PREFIX这3个表。SHIFT表同Boyer-Moore算法里的转移表,用来存储字符集中所有块字符在文本中出现时的转移距离;HASH表用来存储匹配窗口内尾块字符散列值相同的模式串;PREFIX表用来存储匹配窗口内首块字符散列值相同的模式串。在对模式串进行匹配的时候就是利用这三个表完成文本的扫描和寻找匹配的过程。


首先介绍预处理过程:

1、计算模式集合P中最短的模式长度m。后续讨论仅考虑每个模式串的前m个字符(那剩余的怎么办呢?o还没想明白),设这些长度为m的模式串组成新集合P’。

2、对P’中每个模式串进行分块,以B个字符为块长度,每次比较长度为B的块。推荐取B=log|Σ|(2*m*k),其中k是模式串的个数,|Σ|是the size of alphabet。

3、构建一个SHIFT表,该表用于在扫描文本串时,根据读入的块决定移动的距离。对于|Σ|大小的字符集,长度为B的块的组合方式有|Σ|^B种可能,因此表的大小为|Σ|^B。

4、将每个长度为B的块用哈希函数计算出一个整数值h,将h为SHIFT表的索引值。

5、穷举P’中所有长度为B的块,对于每个块Bl,计算其相应的SHIFT表值。计算规则如下:找出Bl在P’的每个模式串中出现的最右位置,设这些位置中的最大值为j(以末尾位置为准),则SHIFT[h]=m-j。[注1]

6、其余所有不在P’中的块,SHIFT表值为m-B+1。[注2] [注3]


7、构建HASH表:设HASH[h]=p,p指向两个单独的表:PAT_POINT和PREFIX[注4]。有一个排序过的(根据模式串末B位的哈希值排序)指针链表PAT_POINT,存储着指向所有模式串的指针。p指向PAT_POINT中末B位哈希值为h的第一个节点。

8、构建PREFIX表:将每个模式串前B’位(B’的推荐值为2)的哈希值存入PREFIX表[注5],用于检查前缀是否匹配,可以进一步减少需要朴素匹配的模式串个数。

[注1] 等同于BM算法的“坏字符规则”

[注2] SHIFT表值为m-B+1的原因:这B个字符不出现在P’中,说明最多可能有(B-1)个字符出现在P’中,因此SHIFT表值为m-(B-1)=m-B+1。

[注3] 预处理的5、6步与原文表述的顺序不同,但效果是一样的。原文的做法是先将SHIFT表所有位置初始化为m-B+1,再根据本文的第5步更新SHIFT表值。参见原文第4页第1自然段。

[注4] 此处的表述是按照自己的理解总结得出的,可能不正确。原文第4~5页表述如下:“Let h be the hash value of the current suffix in the text and assume that SHIFT[h] = 0. The value of HASH[h] is a pointer p that points into two separate tables at the same time: We keep a list of pointers to the patterns, PAT_POINT, sorted by the hash values of the last B characters of each pattern. The pointer p points to the beginning of the list of patterns whose hash value is h. To find the end of this list, we keep incrementing this pointer until it is equal to the value in HASH[h+1] (because the whole list is sorted according to the hash values). So, for example, if SHIFT [h] 0, then HASH [h] = HASH [h+1] (because no pattern has a suffix that hash to h). In addition,
we keep a table called PREFIX, which will be described shortly.”

[注5] 预处理过程SHIFT、HASH和PREFIX表的内存位置关系图(根据个人对原文的理解画出,可能不正确):


SHIFT表的构造
不用等到实际考查text时再计算SHIFT,我们预处理各pat就可以把SHIFT表填上。对于每个pat,计算其每个长度为Bsubpat(aj-B+1…aj)的值,SHIFT[hashFun(subpat)]=min{m-B+1,m-j}
HASH表的构造
记现正扫描的text的末B位的哈希值为h。那么HASH[h]的值是pp指向PAT_POINT中哈希值为h的第一个结点处)。
HASH[]表大小同SHIFT,但相对就稀疏多了,人那儿存着所有可能的组合的SHIFT值。哎,牺牲空间换时间,时空一向两难全。
PREFIX表的构造
对每一个pat,要记录其首B’位字符的哈希值(PREFIX)。

复杂度OBN/M),BM含义同前,Ntext字符数。Patterns很短或很少的时候,Wu-Manber不是很牛叉。而成千上万的patterns一起匹配过去,Wu-Manber牛气冲天了。

转载于:https://www.cnblogs.com/StevenL/p/6818450.html

多模式匹配算法:AC算法、WM算法 一、AC(Aho—Corasiek)算法 snort中实现了基于NFA状态和基于DFA状态的AC算法。 这两个算法的代码实现参考本文末源代码:acsmx.cpp 二、WM(Wu-Manber算法算法的实现参考源代码:WuManber_core.cpp, WuManber.cpp 算法实现及对微博数据解析的测试源码 下载: http://download.csdn. 阅读详情

相关推荐

人工智能算法多模式匹配算法

AC自动机中,转移的最小单位是一个字符。也就是说,匹配后只能移动一个字符,复杂度是线性的O(n) 。然而线性并非最快,Boyer-Moore算法匹配后可以跳过多个字符,比线性还快。据说在实践中,利用Boyer-Moore优化的AC自动机总是更快。 来熟悉一下Boyer-Moore算法的基本思路。假设模式串的长度为m ,母文本为t。算法不是去母文本中找模式串,而是在模式串中从右到左找文本的第...

张晨光老师的播客 1590

多模匹配算法 Wu-Manber 以及官方源码

Wu-Manber 多模匹配算法以及官方源码 http://code.google.com/p/wu-manber-com/

Wu-Manber字符串多模式匹配算法详解实战

Wu-Manber算法是计算机科学中的一个重要突破,属于多模式匹配算法的一种,它有效地解决了多个字符串同时进行匹配的复杂问题。本章将带你初步了解Wu-Manber算法,包括其核心理念、工作原理以及在多模式匹配场景中的应用价值。在现代信息技术领域,尤其是在文本处理和数据挖掘中,处理大量数据时需要对许多模式进行快速匹配

weixin_42581846的博客 984

我改进后的Wu-Manber经典多模式匹配算法(Java源码)

本人去年因某短彩信平台系统产品中需要进行关键词检测,参阅了多篇论文资料后,选取并改进(加上前后缀)了WuManber算法,很经典、实用后性能很优,Java实现很难得!

Wu-Manber 经典多模式匹配算法

提到多模式匹配算法,就得说一下Wu-Manber算法,其在多模式匹配领域相较于Aho-Corasick算法,就好象在单模式匹配算法中BM算法相较于KMP算法一样,在绝大多数场合,Wu-Manber算法匹配效率要好于Aho-Corasick算法。这个算法是由吴升(台湾)和他的导师Udi Manber在九十年代提出。当然,要想充分理解WM算法如何加快多模式匹配的效率,还需要对BM算法的深刻了解,可以

pi9nc的专栏 1万+

模式匹配】之——多模匹配 Wu-Manber算法

本文对应代码下载地址: http://download.csdn.net/detail/sun2043430/5323248 本文参考以下两篇文章,在此表示感谢 https://memorycn.wordpress.com/2011/11/05/matching_algorithm_-_wu-manber_algorithm_based_on_the_the_suffix_s

超然于物外 烟火于一瞬 9027

字符串匹配-Wu-Manber算法

字符串匹配-Wu-Manber算法  

深未来技术 290

几篇关于模式匹配算法的文章

Boyer-Moore 经典单模式匹配算法Wu-Manber 经典多模式匹配算法AC 经典多模式匹配算法  

醉翁的专栏 754

WM算法详解

提到多模式匹配算法,就得说一下Wu-Manber算法,其在多模式匹配领域相较于Aho-Corasick算法,就好象在单模式匹配算法中BM算法相较于KMP算法一样,在绝大多数场合,Wu-Manber算法匹配效率要好于Aho-Corasick算法。这个算法是由吴升(台湾)和他的导师Udi Manber在九十年代提出。当然,要想充分理解WM算法如何加快多模式匹配的效率,还需要对B...

aigui1439的博客 369

WM(Wu-Manber)算法详解及C语言实现

WM(Wu-Manber)算法详解及C语言实现程序代码解析参考 可直接运行。

wu-manber字符串多模式匹配算法

wu-manber字符串多模式匹配算法,可以快速匹配多个模式串在目标串中的位置。支持中英文

Wu-Manber算法论文

算法是由台湾学者发明,是模式匹配算法中最著名的快速匹配算法之一。 该算法采用哈希的方式以及BM算法中的坏字符规则达到快速检索、跳跃式步进的效果。建议读者先学习BM算法中的坏字符规则再学习Wu-Manber算法

掌握Wu-Manber多模匹配算法及源码解析

多模匹配算法是一种广泛应用于计算机科学领域,包括文本处理、数据挖掘和信息检索等领域的基础算法。它主要通过同时处理多种模型或模式,从而实现对复杂数据的高效匹配检索。在最基础的形式中,多模匹配算法可以被看作是一种寻找和识别多个模式的算法。这些模式可以是简单或复杂的,它们可以是一个或多个数据集,也可以是定义在特定数据类型上的结构。在多模匹配的背景下,模式可以理解为需要在文本中搜索的字符串序列。在Wu-Manber算法中,模式通常被分类为单个字符、字符串前缀或后缀以及特定长度的字符序列。

weixin_42466857的博客 747
上一篇: 再谈KMP/BM算法(I)
下一篇: ACBM算法
aigui1439
博客等级 码龄10年 5粉丝 127原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值