BM算法, Boyer-Moore,非常高效,是KMP算法的3~4倍。
高能预警,此算法较难。
核心思想
匹配过程其实就是模式串在主串中不停地往后滑动。
当遇到不匹配的字符时,BF和RK算法做法是往后滑动一位,从模式串第一个字符重新匹配。
上图中,主串中的 c
其实在模式串中并不存在,所以滑动时只要与 c
有重合,肯定无法匹配。
所以可以把模式串多滑动几位,移到c后面再开始匹配。这样效率就提高了。
那么如何寻找这种规律?这就是BM算法的本质了。
算法原理
BM算法包含两部分坏字符规则( bad character rule )和 好后缀规则( good suffix
shift )。
坏字符规则
BM 算法的匹配顺序按照模式串下标从大到小的顺序,倒着匹配的。
倒着匹配时,主串中某个字符在模式串中没法匹配,把这个没有匹配的字符叫作 坏字符(上图中的 c