浅谈WM算法
1. WM(Wu-Manber)算法的简单理解: (1)WM算法需要的参数: ∑:字母集 c: 字母集数目 m:模式串集合中,字符串长度最小的模式串的长度 B:字符块长度,是shift表的索引,一般取2或者3 h:当前扫描过程中长度为B的模式串子串 T:文本串 N:文本串总长度 P={P1, P2....Pk}:模式串集合 k:模式串的数目 C:前缀长度(PREFIX表使用) (2)WM算法的时间复杂度: O(BN/kM),由此可以看出,WM使用于大规模的模式串集合且模式串集合中最小长度较大的场景! (3)WM算法的核心思想: WM算法是对BM算法的延伸继承,用BM算法的核心框架,用字符块来计算shift表(取代坏字符表)进行跳转,在进行匹配时,用hash和prefix计算前后缀的hash值来从众多可选的模式串中快速筛选出正确匹配的模式串。 (4)WM算法的三张核心表: shift表:用于记录文本串向右移动的长度,即一张跳转表( ps:有点类似BM算法的坏字符表,不过BM是针对单字符,WM是针对字符块 )。 hash表:hash表记录了所有模式串后缀(长度为B)与模式串本身的映射关系。当shift[h]=0时,B与对应模式串P的映射关系,但是存在一对多的映射,因为模式串集合中存在相同后缀的模式串,所以hash表的value应该是一个链表的形式,存储多个模式串( ps:当shift