详细描述在joylnwang的blog!!!
如: http://blog.csdn.net/joylnwang/article/details/6785743
单模式匹配算法:
KMP算法:
- KMP算法对于朴素匹配算法的改进是引入了一个跳转表next[];
- 从前向后匹配;
BM算法:
- 从后向前匹配;
- 使用了两个跳转表,一个是坏字符表,一个是好后缀表;
- 坏字符表,可以用于加速任何的单模式匹配算法,而不仅限于BM算法,对于KMP算法,坏字符表同样可以起到大幅增加匹配速度的效果;
- BM算法使用“后缀自包含”;
多模式匹配算法
WM算法:
- 多模式匹配场景,如果模式集合的规模较大的话,很可能会覆盖很大一部分输入字符,导致坏字符跳转没有用武之地。所以WM算法中使用的坏字符跳转,不是指一个字符,而是一个字符块,或者说几个连续的字符。通过字符快的引入,扩大了字符范围,使得实现坏字符跳转的可能性大大增加。
- 一般由三个表构成,SHIFT,HASH,PREFIX。
- 从程序适应性的角度讲,AC算法对于任何模式结合,任何目标串都是O(n)的时间复杂度,而WM算法,对于某些模式集和目标串可能会发生退化现象。
AC算法: