使用递归的方法求next值来理解KMP算法(待继)
来源:互联网 发布:离婚率数据 编辑:程序博客网 时间:2024/06/06 01:29
转载请注明本地址啊
关于数据结构的书都会有这样的主题:”有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢?“。最锉的做法就是一个字节一个字节的比对和偏移,直至找到全部值,这也是所谓暴力解法。另一个巧妙的算法就是KMP算法。不知道什么KMP算法?!咳咳……没关系了,向你推荐JULY大神的”巨著“,这篇文章讲得实在太好太详细了,以至我都没能耐心地看完
那这编文章不会是来打酱油的吧~
请放心,这篇文章绝不是为了混个脸熟的。
身边有不少的朋友对KMP里的模式串P的next值是怎么求得的还不是很明白,我也是费了好些神才算彻底搞懂。这里写下我的一些心得:用递归的方法,用另一种讲解思路向大家描述next值是怎么求得的。
#include <stdio.h>#include <string.h>#include <stdlib.h>int get_kmp_ext_(char *src, char next[], int k, int p, int src_len, char next_val){if(next_val != -1){next[k] = next_val;}if(k >= src_len){return 0;}if(src[k] == src[p]){k++;p++;next_val = p;printf("(src[k] == src[p]) -- (%d, %c), (%d, %c) next=%d\n", k, src[k], p, src[p], next_val);}else{if(p == 0){k++;next_val = 0;printf("(p == 0) -- (%d, %c), (%d, %c) next=%d\n", k, src[k], p, src[p], next_val);}else{p = next[p];next_val = -1;printf("(p != 0) -- (%d, %c), (%d, %c) next=%d\n", k, src[k], p, src[p], next_val);}}return get_kmp_ext_(src, next, k, p, src_len, next_val);}int get_kmp_ext(char *src, char next[], int src_len){next[0] = -1;return get_kmp_ext_(src, next, 1, 0, src_len, 0);}int main(int argc, char *argv[]){char *src;char *next;int src_len;if(argc < 2){printf("arg is too less - argc=%d\n", argc);return -1;}src = argv[1];printf("src:\n%s\n", src);src_len = strlen(src);next = malloc(src_len);get_kmp_ext(src, next, src_len);printf("get_kmp_ext finished\n");int i;printf("next:\n");for(i = 0; i < src_len; i++){printf("%d ", next[i]);}printf("\n");return 0;}
运行结果:
- 使用递归的方法求next值来理解KMP算法(待继)
- KMP算法求next数组的方法
- KMP算法之求next 的值
- kmp求next数组值的方法
- KMP算法求next数组的一些理解
- 使用KMP算法求next数组
- KMP算法(求模式串的next及nextval值)
- KMP算法 求next数组的原理
- KMP算法:KMP算法个人理解+next数组细节处理的方法
- KMP算法next数组的理解
- KMP算法对next数组的理解
- 帮你理解KMP算法以及怎么求next数组
- KMP算法求next数组
- KMP算法求next数组和nextval数组的简单方法
- KMP算法求next数组和nextval数组的简单方法
- KMP算法求next数组和nextval数组的简单方法
- KMP算法求next数组和nextval数组的简单方法
- KMP算法之我见(NEXT数组的递归解析)
- ASIHTTPRequest系列(二):文件下载
- 关于类的继承后基类在派生类中访问方式的改变
- ASIHTTPRequest系列(三):文件上传
- 黑马程序员-接口和多态
- zigbee学习笔记——四种地址绑定模式
- 使用递归的方法求next值来理解KMP算法(待继)
- ASIHTTPRequest系列(四):Cookies
- ASIHTTPRequest系列(四):Cookies
- 123
- 各大主流的虚拟机比较
- 问题小结(7)-sd卡和/data分区使用情况检测
- dm9000AE调试记录
- zigbee学习笔记---通信例程之GenericApp
- Struts,Hibernate,Spring经典面试题