horspool算法为字符串匹配算法,比较的时候从模式的最右边开始和文本中的字符进行一一标胶,如果全部匹配成功就完成了,但是如果遇到不一样的,我们不会像蛮力法那样才移动一格,根据不同情况移动步子不同,有以下几种情况。(四种情况从算法课本里抄出来的,O(∩_∩)O哈哈~)
1:假设在文本中,对齐模式最后一个字符的元素是字符c,如果模式中不存在c(在我们的例子中,c就是字母S),模式安全移动的幅度就是他的全部长度
文本:A D C……………… S……………………
模式: B A R E B R
移动: B A R B E R
2:如果模式中存在c,但它不是模式的最好一个字符(在我们的例子中,c就是字母B),移动时应该把模式中最右边的c和文本中的c对齐:
文本:A D C……………… B……………………
模式: B A R E B R
移动: B A R B E R
3:如果c正好是模式中最后一个字符,但在模式中其他m-1个字符中不包含c,移动情况类似1,移动幅度为m
文本:A D C………… M B R……………………
模式: B A R E B R
移动ÿ