Boyer Moore 算法
1. 提出:简称为 BM 算法,是由它的两位发明者 Robert S. Boyer 和 J Strother Moore 的名字来命名的。BM 算法是他们在 1977 年提出的高效字符串搜索算法。在实际应用中,比 KMP 算法要快 3~5 倍。
2. 核心思想:对于给定文本串 T 与模式串 p,先对模式串p 进行预处理。然后在匹配的过程中,当发现文本串T 的某个字符与模式串p 不匹配的时候,根据启发策略,能够直接尽可能地跳过一些无法匹配的情况,将模式串多向后滑动几位。
两种启发策略:
「坏字符规则(The Bad Character Rule)」
「好后缀规则(The Good Suffix Shift Rule)」。
这两种启发策略的计算过程只与模式串 p 相关,而与文本串 T 无关。因此在对模式串 p 进行预处理时,可以预先生成「坏字符规则后移表」和「好后缀规则后移表」,然后在匹配的过程中,只需要比较一下两种策略下最大的后移位数进行后移即可。
启发策略
1. 坏字符规则
当文本串 T 中某个字符跟模式串 p 的某个字符不匹配时,则称文本串 T 中这个失配字符为 「坏字符」,此时模式串 p 可以快速向右移动。
「坏字符规则」的移动位数分为两种情况:
情况 1:坏字符出现在模式串 p中。
这种情况下,可将模式串中最后一次出现的坏字符与文本串中的坏字符对齐,如下图所示。
向右移动位数=坏字符在模式串中的失配位置-坏字符在模式串中最后一次出现的位置。