浅谈kmp算法

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

      浅谈kmp算法_第1张图片

        如果使用暴力的话第一次查找到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 

你可能感兴趣的:(ACM-数据结构)