BM算法
先来看【后缀匹配】,是指模式串的比较从右到左,模式串的移动也是从左到右的匹配过程。
经典的BM算法其实是对后缀蛮力匹配算法的改进。(每次往后移动一位效率简直太低了。。。)
为了实现更快移动模式串,BM算法定义了两个规则,坏字符规则和好后缀规则:
首先从宏观上看看这什么意思:
1.如果字符不匹配,我们就利用这个不匹配的信息去决定Skip多少;
2.如果我们已经有了部分匹配的字符,那我们同样利用这些信息去决定Skip策略;
3.这一点我理解的也不太透彻,暂且把它理解成:模式串的比较从右到左,模式串的移动从左到右吧。
【坏字符规则】
- 坏字符没出现在模式串中,这时可以把模式串移动到坏字符的下一个字符,继续比较;
- 坏字符出现在模式串中,这时可以把模式串第一个出现的坏字符和母串的坏字符对齐,当然,这样可能造成模式串倒退移动。
【好后缀规则】
好后缀的处理规则中最核心的内容:
- 在模式串中,查找跟好后缀匹配的另一个子串;
- 在好后缀的后缀子串中,查找最长的、能跟模式串前缀子串匹配的后缀字串。
【合并:两种策略并行,选择最优的Skip策略】
【性能评估】