thesby的专栏

专注于机器学习

字符串搜索

字符串搜索是一种非常常见的应用,暴力搜索是直接去匹配各个字符,但是这种方法对于重复度较高的字符串来说,有点浪费计算了。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

阅读更多
版权声明:本文为博主原创文章,转载时务必将原文链接置于转载文章首部可见处,尊重博主劳动。博主研究生一枚,现在正在找工作,对深度学习非常感兴趣,希望有做这方面的公司收留,谢谢! https://blog.csdn.net/thesby/article/details/51559736
文章标签: 算法
个人分类: 算法
想对作者说点什么? 我来说一句

boyer moore算法

2008年05月07日 275KB 下载

快速字符串搜索

2011年09月14日 23KB 下载

豆瓣电影top250爬虫

2017年02月24日 1KB 下载

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

不良信息举报

字符串搜索

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭