
数据结构
一剑风寒起
向着目标,缓慢而坚定!
展开
-
串匹配算法的理解之简单算法
串匹配的算法主要有三个,简单算法,首尾算法,KMP算法,简单算法是其它两个算法的基础. 1,简单算法//效率低,从表面上是一个单层循环,实际是一个双重循环 看一下这个算法的复杂度:对于每一个起始的i值,i和j两个指针相加, 相加的j还没有大于这个的时候,又产生不等的情况,i指针要回溯了 回溯i=i-j+2,在起始的第两个位置开始,对于每一个i值来说,从pos 到串长,对j来说,比较串长,原创 2012-02-05 16:31:44 · 436 阅读 · 0 评论 -
修正版求KMP中next值求法
S='aaabaaabaaabaaabaaab' T='aaaab' next[j]=01234 修正: nextval[j]=00004 //修正next后算法 void get_nextVal(SString &T,int &next[]){ //求模式串T的next函数值班差存入数组next. i=1;next[1]=0;j=0; while(i if(j=0||T[i]原创 2012-02-05 16:34:50 · 745 阅读 · 0 评论 -
KMP算法next值的求解
//求next函数值的过程本身是一个递归过程,分析如下: //next[7]=2,存在T[6]=T[1] k-1 T[7]=T[2] //'t[6,7]'='t[1,2]' next[8]=3 //t1=t3 已知:next[1]=0; 假设:next[j]=k;又T[j]=T[k] 则:next[j+1]=k+1 若:T[j]!=T[k] 则需要往前朔,检查T[j]=T[?]原创 2012-02-05 16:33:57 · 664 阅读 · 0 评论 -
串匹配算法之进阶首尾匹配法
2,首尾匹配算法 先比较第一个字符串,再比较最后一个字符串 int Index(SString S,SString T,int pos){ sLength=S[0];tLength=T[0]; i=pos; patStartChar=T[1];patEndChar=T[tLength]; while(i if(S[i]!=patStartChar) ++i;//重新查找匹配起点 e原创 2012-02-05 16:32:34 · 1434 阅读 · 0 评论 -
串匹配算法之最终版KMP算法
KMP算法理解起来真的有难度,听视频足足两次,花两个小时才搞懂,不容易啊! kmp算法(线性复杂度O(m+n) int Index_KMP(SString S,SString T,int pos){ //返回子串T在主串S中第pos个字符的位置,若不存大,则函数值为0 //其中,T非空,1 i=pos; j=1; while(i if(j=0||S[i]==T[j]){++i;++原创 2012-02-05 16:33:06 · 333 阅读 · 0 评论