关闭

浅谈kmp算法

标签: kmp
80人阅读 评论(0) 收藏 举报
分类:

                              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 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    青春将逝,血依然滚烫
    acm是很多人的的憧憬,是很多人的梦想,也埋葬了很多人的青春,很多人都会犹豫踌躇,在acm的路上留下或多或少的遗憾,多多少少因为太难太枯燥想过放弃。我也不会例外,如果说acm是一座高达千米的山峰,我可能到了200米的位置,都说沿途的风景是最好的,高处只有光秃秃的山头,我感觉这些人没有考虑过山下人的感受,沿途会累,会各种不适,我想只要我在路上,我有一天会到达500米的路上,还有最多一年吧,我认为我会看到这座山一半的风景,这不是体育,不会流血,但我愿意付出我的所有的青春,不留遗憾。
    个人资料
    • 访问:32264次
    • 积分:2902
    • 等级:
    • 排名:第12216名
    • 原创:268篇
    • 转载:6篇
    • 译文:0篇
    • 评论:30条
    最新评论