BM算法

BM算法和KMP算法同样都是一种字符串匹配算法,全称是 Boyer-Moore算法, 由Robert S.Boyer和 J Strother Moore提出, 比KMP算法效率高因此更常用,貌似很多文本编辑器的查找功能都是基于BM算法做的。其时间复杂度最坏是O(m*n) 最好是O(n/m)

与众不同的是,BM算法不是从头开始比较,而是从尾部开始比较。

BM算法分为两个阶段,预处理阶段和搜索阶段。

  1. 预处理阶段,BM算法有两个规则,坏字符规则和好后缀规则,这两个规则的目的都是让模式串每次向右移动尽可能大的距离。BM算法每次 在向右移动模式串的时候,按照好后缀规则和坏字符规则中的最大值向右移动。

坏字符的定义: 搜索串里的字符和模式串的当前字符不匹配,则搜索串中的字符称为坏字符。

好后缀的定义: 在遇到坏字符前文本串和模式串已经匹配的子串。

Written on October 28, 2019