关于KMP的一些个人理解
2013-07-08 16:15
537 查看
KMP算法需要大量的时间来研究,当然,会了之后基本上就感觉很简单了。本文就是大致讲一下我在学习kmp的过程中的一些感悟和理解吧。
首先,还不了解kmp的可以先看一下别的大牛的博客,例如http://www.cppblog.com/oosky/archive/2006/07/06/9486.html,了解一下kmp的基本原理以及它的优越性在哪。
其次,KMP中有个next函数,这就是KMP的核心。它有两个版本http://www.cnblogs.com/destinydesigner/archive/2009/10/17/1585063.html ,每个版本的话next[]表示的意义不同
我所学习的是第二个版本的next数组。表示的是如果第i位的t[i]开始与s[i]不匹配了(即前面i-1为都和S数组匹配),下面一步就把s[i]与t[next[i]]相比较。 而这个版本的话,注意next
是存在的,n是t[]数组的长度,不存在t
但是存在next
,因为next[n-1]是不包括t[n-1]在内,而为了解决这个问题,所以只能增加一个next
,这样的话next
就能包括t[n-1]位了.
其次next[j]=k 意义:模式串T中下标为j的字符,如果j的前面(不包括t[j])k个字符与开头的k个字符相等
(next[]函数那一段程序,如果先不理解,可以记着)
再其次,kmp中一般有三种题型。一种是求最小匹配子串,一种是求最小覆盖子串,另一种就是kmp匹配算法。
第一种求最小匹配子串,大概有POJ 1981和POJ 2406,原理的话,可以看http://www.cnblogs.com/vongang/archive/2012/05/04/2483419.html这个博客
第二种的话,有POJ 2185
我所做过的一些Kmp题:
POJ 1961 http://blog.csdn.net/u010489766/article/details/9273097
POJ 2406http://blog.csdn.net/u010489766/article/details/9273171
POJ 2752http://blog.csdn.net/u010489766/article/details/9273245
POJ 3461 http://blog.csdn.net/u010489766/article/details/9273343
POJ 3080http://blog.csdn.net/u010489766/article/details/9273409
首先,还不了解kmp的可以先看一下别的大牛的博客,例如http://www.cppblog.com/oosky/archive/2006/07/06/9486.html,了解一下kmp的基本原理以及它的优越性在哪。
其次,KMP中有个next函数,这就是KMP的核心。它有两个版本http://www.cnblogs.com/destinydesigner/archive/2009/10/17/1585063.html ,每个版本的话next[]表示的意义不同
我所学习的是第二个版本的next数组。表示的是如果第i位的t[i]开始与s[i]不匹配了(即前面i-1为都和S数组匹配),下面一步就把s[i]与t[next[i]]相比较。 而这个版本的话,注意next
是存在的,n是t[]数组的长度,不存在t
但是存在next
,因为next[n-1]是不包括t[n-1]在内,而为了解决这个问题,所以只能增加一个next
,这样的话next
就能包括t[n-1]位了.
其次next[j]=k 意义:模式串T中下标为j的字符,如果j的前面(不包括t[j])k个字符与开头的k个字符相等
(next[]函数那一段程序,如果先不理解,可以记着)
再其次,kmp中一般有三种题型。一种是求最小匹配子串,一种是求最小覆盖子串,另一种就是kmp匹配算法。
第一种求最小匹配子串,大概有POJ 1981和POJ 2406,原理的话,可以看http://www.cnblogs.com/vongang/archive/2012/05/04/2483419.html这个博客
第二种的话,有POJ 2185
我所做过的一些Kmp题:
POJ 1961 http://blog.csdn.net/u010489766/article/details/9273097
POJ 2406http://blog.csdn.net/u010489766/article/details/9273171
POJ 2752http://blog.csdn.net/u010489766/article/details/9273245
POJ 3461 http://blog.csdn.net/u010489766/article/details/9273343
POJ 3080http://blog.csdn.net/u010489766/article/details/9273409
相关文章推荐
- 关于事件与委托的一些个人简单理解
- 关于技术美术的一些个人理解
- 关于内核中spinlock的一些个人理解 【转】
- js中关于可视区、实际区域一些知识的个人理解
- 【原创】关于操作符重载的一些个人理解
- 关于Volatile关键字含义的一些个人理解
- 关于python锁的一些个人理解
- 关于wordpress的$post全局变量,以及主循环the loop的一些个人理解。
- 关于google protocol buffer(PB)的优缺点和一些个人的理解
- 关于内核中spinlock的一些个人理解
- 关于技术美术的一些个人理解
- 关于Bean\Entity\Model\POJO的一些个人理解
- 关于线程和父子进程的一些个人理解
- 关于bash与sh的话题(限于一般linux),以下个人的一些总结及理解,有理解错误的地方还望指点
- 关于socket的一些个人理解
- 关于"从头到尾彻底理解KMP(2014年8月22日版)"的个人理解
- 关于数组的一些个人理解和源码
- 关于线程方法的一些个人理解
- 关于Python2/3多进程的一些个人理解
- 关于Myeclipse调试的一些个人理解