但求心安的博客

赤子之心,我不会一直跑,但我不会停下

浅谈kmp算法

                              kmp算法我刚开始学习的时候,是为了查找字符串的时候节省时间。在一个很长的字符串中,查找一个很长的字符串kmp算法可以节省大量的时间。

      

        如果使用暴力的话第一次查找到s【4】下次还要从s【1】开始查找,kmp算法是从s【4】继续往下查找

        kmp算法的核心是求解next【】的值。next【】就是直接从s【5】往下查找的核心。

        T字符串的next【】代表的是什么?应该怎么求?我迷惑的半年多,突然想通了,感觉这就是kmp算法的核心。

   

        next[j]=k    意义:模式串T中下标为j的字符,如果j的前面k个字符与开头的k个字符相等。

     next【0】=-1是人为规定。

    为什么有了next就可以从s【5】直接往下探查了呢。nxet【5】等于5代表s【3】和T【0】,s【4】和T【1】相同可以直接让s【5】和T【2】相比较。理解的next【】的用法,就基本kmp算法入门了

对字符串s=“aaaab”取next[].next[i]=j代表的是s[i]前面有j个字母和s[j]前面的j个字母完全重合
     i 0 1 2 3 4 5
     s a a a a b
next  -1 0 1 2 3 0
next[3]=2 就代表s[3]前两个字母aa和s[2]前两个字母aa完全重合

图片参考:http://www.cppblog.com/oosky/archive/2006/07/06/9486.html 

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/clx55555/article/details/52346626
文章标签: kmp
个人分类: 数据结构
上一篇The Minimum Length
下一篇c++ vector各种函数介绍及其用法
想对作者说点什么? 我来说一句

K M P 算 法 . p p t

2011年08月10日 2.29MB 下载

KMP算法算法 KMP算法 KMP

2010年05月22日 1KB 下载

KMP算法详解 KMP算法详解

2010年08月10日 33KB 下载

没有更多推荐了,返回首页

关闭
关闭