KMP模式匹配算法实现与改进
2012-02-26 15:49
661 查看
/*KMP模式匹配算法实现*/ //通过计算返回子串T的next数组 void get_next(String T,int * next) { int i,j; i = 1; j = 0; next[1] = 0; while (i < T[o]) //T[0]表示串T的长度 { if (j == 0 || T[i] == T[j]) //T[i]表后缀的单个字符,T[j]表前缀的单个字符 { ++i; ++j; next[i] = j; } else j = next[j]; //若字符不相同,则j值回溯 } } //返回子串T在主串S中的pos个字符之后的位置。若不存在返回值0 int Index_KMP(String S,String T,int pos) { int i = pos; int j = 1; int next[255]; //定义一个next数组 get_next(T,next); //对串T作分析,得到next数组 while (i <= S[0] && j<= T[0]) //S[0]和T[0]为主串个子串的长度 { if (j == 0 || S[i] == T[j]) { ++i; ++j; } else { j = next[j]; //j退回合适的位置,i值不变 } } if (j > T[0]) return i-T[0]; else return 0; }
/*KMP模式匹配算法的改进*/ //通过计算返回子串T的nextval数组 void get_nextval(String T,int * nextval) { int i,j; i = 1; j = 0; nextval[1] = 0; while (i < T[0]) //T[0]表示串T的长度 { if (j == 0 || T[i] == T[j]) //T[i]表后缀的单个字符,T[j]表前缀的单个字符 { ++i; ++j; if (T[i] != T[j]) //若当前字符与前缀字符不同 nextval[i] = j; //则当前的j为nextval在i位置的值 else nextval[i] = nextval[j]; //如果字符相同,则将前缀字符的nextval值赋给nextval在i位置的值 } else j = nextval[j]; //若字符不相同,则j值回溯 } }
相关文章推荐
- KMP模式匹配算法中next,nextval的分别实现
- KMP模式匹配算法 C++实现
- KMP模式匹配算法实现
- KMP字符串模式匹配算法实现
- 使用Python语言写一个简单的KMP模式匹配算法实现
- KMP字符串模式匹配算法实现
- 数据结构之串的KMP模式匹配算法的实现
- 朴素的模式匹配和改进的模式匹配(KMP)算法说明
- C++ 改进的KMP模式匹配算法
- KMP字符串模式匹配算法实现
- 数据结构编程笔记十一:第四章 串 定长顺序串以及模式匹配算法(BF和KMP)的实现
- 理解与实现KMP模式匹配算法
- KMP模式匹配算法分析与实现
- KMP字符串模式匹配算法Java实现
- 【原创】朴素的模式匹配和改进的模式匹配(KMP)算法说明(草稿)
- KMP字符串模式匹配算法实现(php)
- KMP模式匹配算法实现
- 经典算法研究:模式匹配(子串匹配)之 KMP 算法(C语言实现版)
- 9.KMP模式匹配算法实现o(n)复杂度的匹配
- 改进的KMP模式匹配算法