当然对于前缀函数π一定可以起到有效位移的判断,导论还是给了证明。这里就说明其证明依据和结论。
前缀函数迭代引理:设P是长度为m的模式,其前缀函数为π,对q=1,2…,m,有π*[q]= {k:k<q且Pk是Pq的后缀}。
设P是长度为m的模式,π是P的前缀函数,对q=1,2…,m,如果π[q]>0,则π[q]-1∈π*[q-1]。
实际上自动机匹配算法和KMP匹配算法是等价的,都是对模式自身规律的研究来提升朴素算法的无效位移,而Rabin-Karp算法则是利用Hash映射来提升性能。可以看出,要很好实现算法,最主要的是将问题形式化建立起数学模型,然后应用数学原理来解决,这还是建模的思路,主要当然还是数学原理的应用。比如Rabin-Karp算法将字符通过基数进制化,再利用数论原理和霍纳法则来解决;对于很多机器学习算法来说,最重要是对现实构建软件可处理的数据,一般就是向量化过程。