ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

图解常见匹配算法

图解常见匹配算法

前言

常见匹配算法有BF算法,RK算法,KMP算法,BM算法,Sunday算法

参考资料,很好的文档,值得细细品尝

BF算法

代码部分

逻辑图

RK算法

代码部分

数据调试

逻辑图

摘自霍纳法则

假设有n+2个实数a0,a1,…,an,和x的序列,要对多项式Pn(x)= anxn +an-1xn-1+…+a1x+a0求值,直接方法是对每一项分别求值,并把每一项求的值累加起来,这种方法十分低效,它需要进行n+(n-1)+…+1=n(n+1)/2次乘法运算和n次加法运算。有没有更高效的算法呢?答案是肯定的。通过如下变换我们可以得到一种快得多的算法,即Pn(x)= anxn +an-1xn-1+…+a1x+a0=((…(((anx+an-1)x+an-2)x+ an-3)…)x+a1)x+a0,这种求值的安排我们称为霍纳法则。

KMP算法

代码部分

关于next数组/前缀表

逻辑图

BM算法

关于坏字符和好后缀

BMH版本(只用坏字符表)

完整版本

逻辑图

Sunday算法

代码部分

逻辑图

代码部分

代码传送门

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进