算法导论——Rabin-Karp算法求模证明(2)

上一篇算法导论——Rabin-Karp算法求模证明(1)
我们证明了Rabin-Karp算法的初始化求模部分,即算法导论——Rabin-Karp算法求模证明(2)接下来,我们来证明,这一部分
算法导论——Rabin-Karp算法求模证明(2)

公式

1.(a+b) mod p=[(a mod p)+(b mod p)] mod p1.(a+b)\ mod\ p = [(a\ mod \ p)+(b\ mod \ p)] \ mod \ p
2.(ab) mod p=[(a mod p)(b mod p)] mod p2.(a*b)\ mod\ p = [(a\ mod \ p)*(b\ mod \ p)] \ mod \ p

欲证

((ftTsbasem1)base+Ts+m)mod q=((ftTsbasem1mod q)base+Ts+m)mod q((ft-T_s*base^{m-1})*base+T_{s+m}) mod\ q =((ft-T_s*base^{m-1}mod\ q)*base+T_{s+m}) mod\ q

证明

首先ft<qmod qftq,ft mod q=ftft<q,因为mod\ q就是把结果ft约束在q内,因此ft \ mod \ q =ft。根据公式1,有以下递推式成立。
((ftTsbasem1mod q)base+Ts+m)mod q=((ft((ft-T_s*base^{m-1}mod\ q)*base+T_{s+m}) mod\ q\\= ((ft mod q\ mod \ qTsbasem1mod q)base+Ts+m)mod q=((ft-T_s*base^{m-1}mod\ q)*base+T_{s+m}) mod\ q\\= ((ft mod q\ mod \ qTsbasem1mod q)base-T_s*base^{m-1}mod\ q)*base mod q\ mod \ q+Ts+m+T_{s+m} mod q\ mod \ q)mod q=(((ft) mod\ q\\= (((ft mod q\ mod \ q+(Tsbasem1)+(-T_s*base^{m-1}) mod q\ mod \ q)) mod q\ mod \ qbase*base mod q\ mod \ q)) mod q\ mod \ q+Ts+m+T_{s+m} mod q\ mod \ q)mod q=(((ftTsbasem1)) mod\ q\\=(((ft-T_s*base^{m-1}) mod q\ mod \ qbase*base mod q\ mod \ q)) mod q\ mod \ q+Ts+m+T_{s+m} mod q\ mod \ q)mod q=((ftTsbasem1)base+Ts+m)mod q) mod\ q\\= ((ft-T_s*base^{m-1})*base+T_{s+m}) mod\ q

证毕。

结论

base=10base =10时,算法就如下图所示
算法导论——Rabin-Karp算法求模证明(2)

相关文章: