KMP算法中最难理解的地方的理解
来源:互联网 发布:画面撕裂 知乎 编辑:程序博客网 时间:2024/06/03 17:44
曾经最难理解的地方就是“要搜索的字符串的预处理”部分:
假设要搜索的字符串是【人1,人2,人3,人4,人5,人6,人7,人8】,
假设扫描到【人6】时前后最大相等的长度是4,即【人1,人2,人3,人4】==【人3,人4,人5,人6】,
那么我们看【人7】时的情况:
如果【人7】==【人5】,那么此时的前后最大相等的长度是【人6】的最大长度加1,等于5,这很好理解;
如果【人7】!=【人5】,
这时,有一点可以肯定的是【人7】的“最大长度”肯定小于或等于【人6】的“最大长度”,因为【人7】的“最大长度”不可能比【人6】的“最大长度”大2,证明如下:
假设【人7】的“最大长度”为6(【人6】为4),即
【人1,人2,人3,人4,人5,人6】==【人2,人3,人4,人5,人6,人7】,
上述等式左右各去掉一项即:【人1,人2,人3,人4,人5】==【人2,人3,人4,人5,人6】,
说明【人6】时的前后最大相等长度就是5,而不是4,与已知条件相违。
所以,【人7】的前后最大相等长度肯定小于4,
下面就到了“最难理解”的地方,因为这里我们最容易忽视一个对理解下面至关重要的地方,因为【人6】的最大长度是4,即:
【人1,人2,人3,人4】==【人3,人4,人5,人6】,即【人1,人2,人3,人4】和【人3,人4,人5,人6】是完全一样的,可以看成是同一个序列。
假设【人7】的最大长度是4,则必然有:
【人1,人2,人3,人4】==【人4,人5,人6,人7】,
因为【人1,人2,人3,人4】==【人3,人4,人5,人6】,所以
【人4,人5,人6】==【人2,人3,人4】,也就是
【人1,人2,人3】==【人2,人3,人4】,也就是说【人4】时的前后最大相等长度是3。
反过来说也就是:
如果【人4】的“最大长度”为3,即【人1,人2,人3】==【人2,人3,人4】,
那么,如果【人7】==【人4】,就会有
【人1,人2,人3,人4】==【人2,人3,人4,人7】,
因为【人1,人2,人3,人4】==【人3,人4,人5,人6】,所以
【人1,人2,人3,人4】==【人4,人5,人6,人7】,
即【人7】的“最大长度”为【人4】的最大长度加1,等于4。
同理,如果【人7】!=【人4】,因为【人4】的“最大长度”是3,假设【人3】的最大长度是2,
那么,如果【人7】==【人(2+1=3)】的话,【人7】的“最大长度”就是【人3】的最大长度加1,等于3,
依此类推……
- KMP算法中最难理解的地方的理解
- KMP算法的理解
- KMP算法的理解
- 【算法】KMP的理解
- KMP算法的理解
- KMP算法的理解
- KMP算法的理解
- KMP算法的理解
- KMP算法的详细理解
- KMP算法的个人理解
- 对KMP算法的理解
- 对KMP算法的理解
- 对KMP算法的理解
- KMP算法的理解(二)
- 关于KMP算法的理解
- 对于KMP算法的理解
- kmp算法的理解方式
- KMP算法的学习理解
- .net读取输出项目中html文件
- 华中科大校长李培根在2010年毕业典礼上的演讲
- NET 连接池救生员
- WCF学习总结(四)
- 位运算
- KMP算法中最难理解的地方的理解
- Asp.net MVC2.0系列文章-添加操作
- POJ_1458_Common Subsequence
- Nexus one 解锁,root,升级,vpn全攻略
- js验证用户名的方法
- SUSE+SVN+APACHE apache Internal Server Error 解决办法
- 利用层次化查询解决某问题
- JavaScript:String转XML
- 产业合作,共推MeeGo产品创新——英特尔MeeGo论坛在大连软交会期间举行