字符串搜索

原创 2016年06月01日 22:37:10

字符串搜索是一种非常常见的应用,暴力搜索是直接去匹配各个字符,但是这种方法对于重复度较高的字符串来说,有点浪费计算了。KMP算法利用子串本身的特性,试图建立一种状态机,指出匹配到当前字符串的状态如何。http://blog.csdn.net/thesby/article/details/51243270

Next数组怎么求?

next数组的求解方法是:第一位的next值为0,第二位的next值为1,后面求解每一位的next值时,根据前一位进行比较。首先将前一位与其next值对应的内容进行比较,如果相等,则该位的next值就是前一位的next值加上1;如果不等,向前继续寻找next值对应的内容来与前一位进行比较,直到找到某个位上内容的next值对应的内容与前一位相等为止,则这个位对应的值加上1即为需求的next值;如果找到第一位都没有找到与前一位相等的内容,那么需求的位上的next值即为1。

这样的描述好像不太容易理解,我们可以直接看一个例子。
1 2 3 4 5 6 7 8
a b a a b c a c
所以,第一步的next
1 2 3 4 5 6 7 8
a b a a b c a c
0 1
第二步,看第三位的前一个是b,它与自己next位置1的字符a比较,不相等,所以他就是1了。
接下来,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1
第三步,看第三个字符a,可见它与自己next对应的是相等的,那就是在此基础上+1,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2
第四步,第四个字符的a和它对应的next位置2的b不等,所以它就是再和2位置b的next比较,此时相等了,那么就是2了,所以
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2
第五步,第五个字符b和自己对应next字符相等,所以+1,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2 3
第六步,第六个字符c没有与前面的重复,所以第七个位置的next就是1,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2 3 1
最后一个,看第七个是a,它对应next位置字符刚好和它相等,所以第八个next就是2了,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2 3 1 2

参考了http://blog.csdn.net/quitepig/article/details/7933977

版权声明:本文为博主原创文章,转载时务必将原文链接置于转载文章首部可见处,尊重博主劳动。博主研究生一枚,现在正在找工作,对深度学习非常感兴趣,希望有做这方面的公司收留,谢谢!

相关文章推荐

字符串搜索之Boyer-Moore算法

在用于查找子字符串的算法当中,BM(Boyer-Moore)算法是目前被认为最高效的字符串搜索算法,它由Bob Boyer和J Strother Moore设计于1977年。 一般情况下,比KMP算法...

在数据库中搜索字符串

  • 2014-02-26 15:21
  • 656B
  • 下载

模拟类似linux:find . -name "*.*" |xargs grep -i "搜索字符串"

package com.util.exam; import java.io.BufferedReader; import java.io.File; import java.io.FileI...

快速字符串搜索

  • 2011-09-14 13:20
  • 23KB
  • 下载

字符串搜索

  • 2016-06-18 14:55
  • 5.98MB
  • 下载

linux平台学x86汇编(十三 ):字符串的比较与搜索

【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】         cmps指令用于比较字符串值,cmps指令有三种格式:cm...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)