关闭

浅谈kmp算法

标签: kmp
242人阅读 评论(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
查看评论

浅谈KMP算法

学习KMP之前有一点要知道,我们通常所知道的也容易xia
  • u013447865
  • u013447865
  • 2014-09-27 22:04
  • 431

kmp算法浅谈

最近在学习kmp算法,想了很久,终于于前日想通。 首先要说明,学习过程中主要参考了如下两篇文章: 这篇文章的讲解过程非常清晰 但是代码应该VB http://www.matrix67.com/blog/archives/115/ 这篇文章的代码不错 http://www.cnblo...
  • luxiaotong713
  • luxiaotong713
  • 2012-04-19 10:11
  • 157

KMP算法应用

KMP算法应用题目描述: 给定一个字符串,求其中出现重复的任意一个字符?再求其中最长的重复子串?题目分析: 如果明白KMP原理,明白next数组next[j]=k的具体含义,这样的题目可以用next数组来求解。next[j]=k,表示在模式串p中第j个字符前有长度为k的相同前缀和后缀。相同的前缀...
  • zxc995293774
  • zxc995293774
  • 2015-07-29 20:38
  • 557

kmp算法总结

搞ACM也有三年了,期间学习了不少算法,到12月把上海站打完也要成退役狗了。最近突然想把学过的一些算法回过头来好好总结一下,于是就有了我的算法总结系列。这是这个系列的开端,所以先写一个简单点的算法,以后会慢慢复习一些复杂的算法,最后还是希望自己能够坚持下去吧。 KMP算法 KMP算法是一种线性时间...
  • dyx404514
  • dyx404514
  • 2014-11-20 16:00
  • 3474

KMP算法的效率分析

上一节,我们研究了KMP算法的实现原理,这节,我们从分析的角度看看KMP算法的时间复杂度,通过分析证明,我们代码对算法的实现,是能保证线性复杂度的
  • tyler_download
  • tyler_download
  • 2016-10-20 12:55
  • 646

KMP算法图解之过程实现

本文是图中的老人所写的中文版,作者是谁无法确定,毕竟转载已经让原作者消失在网络的海洋,不过我依然要在此表示对两位作者由衷的感谢。      读完本文,对KMP有了初步的认识,但文中对关键的部分匹配值没有讲解,后续会补充上。   ...
  • u010232171
  • u010232171
  • 2014-12-15 17:06
  • 752

【笔记】KMP算法相关计算题(选择题)

KMP算法的相关计算
  • Aprilxdy
  • Aprilxdy
  • 2017-09-08 11:11
  • 383

KMP算法 Next数组详解(【洛谷3375】KMP字符串匹配 )

KMP算法题面题目描述如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置。为了减少骗分的情况,接下来还要输出子串的前缀数组next。如果你不知道这是什么意思也不要问,去百度搜[kmp算法]学习一下就知道了。 输入输出格式输入格式:第一行为一个字符串,即为s1(仅包...
  • qq_30974369
  • qq_30974369
  • 2017-07-03 21:13
  • 912

KMP算法--C语言

字符串匹配算法--KMP算法详解(C语言)
  • u010593680
  • u010593680
  • 2015-03-23 21:08
  • 1656

KMP算法next数组通俗理解,适合考研及基础学习者

KMP算法是主要用来做字符串的匹配,有一个文本次T和一个模式串P,就是拿模式串P去匹配文本串T。 匹配的步骤分为两步,先做模式串自身匹配,即求出next数组;然后在进行T与P的匹配。 那么可能会问,为什么要做模式串自身匹配,这么做的优点体现在哪里?     ...
  • wust_ZJX
  • wust_ZJX
  • 2016-11-20 00:38
  • 755
    青春将逝,血依然滚烫
    acm是很多人的的憧憬,是很多人的梦想,也埋葬了很多人的青春,很多人都会犹豫踌躇,在acm的路上留下或多或少的遗憾,多多少少因为太难太枯燥想过放弃。我也不会例外,如果说acm是一座高达千米的山峰,我可能到了200米的位置,都说沿途的风景是最好的,高处只有光秃秃的山头,我感觉这些人没有考虑过山下人的感受,沿途会累,会各种不适,我想只要我在路上,我有一天会到达500米的路上,还有最多一年吧,我认为我会看到这座山一半的风景,这不是体育,不会流血,但我愿意付出我的所有的青春,不留遗憾。
    个人资料
    • 访问:73479次
    • 积分:4658
    • 等级:
    • 排名:第7455名
    • 原创:407篇
    • 转载:6篇
    • 译文:0篇
    • 评论:58条
    最新评论