KMP与Sunday算法
来源:互联网 发布:中国网络监督局 编辑:程序博客网 时间:2024/05/21 22:01
KMP的next函数有两种形式,一种是next[0]=-1的,另一种是next[0]=0的,这里采用了第二种。
分两个函数写成,1.求next;2.匹配。
求next和匹配的过程看上去有那么点点类似。上代码:
#include <iostream>#include <iterator>using namespace std; // 求next函数void build_next(char * s,int *next) { int i=0,j=-1; int n = strlen(s); next[0]=-1; while(i<n) { if(j==-1 || s[i]==s[j]) { ++j; ++i;next[i] = j; } else {j = next[j]; } } } // kmp int KMP(char s[],char t[],int m,int n, int *next) { build_next(t, next); int i=-1; int j=-1; while( i<m && j<n) { if(j==-1 || s[i]==t[j]) { ++j; ++i; } else {j = next[j]; } } if(j<n)return -1; else return i-n;} // 求sunday的数组void getsun(char *s, int *sun){memset(sun,0,sizeof(int)*256);int n = strlen(s);int i;for(i=0;i<256;i++)sun[i] = n+1;for (i=0;i<n;i++){sun[s[i]] = n-i;}}// sunday算法int sunday(char s[],char t[],int m,int n, int *sun){int i=0,j=0;while(i<m && j<n){if(s[i] == t[j]){++j;++i;}else{j = 0;i = i - j + int(sun[s[i+n]]);}}if(j<n)return -1;else return i-j;}// 暴力搜索int bf(char s[],char t[],int m,int n, int *sun){int i=0,j=0;while( i<m && j<n ){if (s[i] == t[j] ){++i;++j;}else{i = i-j+1;j = 0;}}if(j<n)return -1;elsereturn i-j;}int next1[20];int main(){char s[] = "abacvhsvababca";char t[] = "ababc";int n=strlen(t);int m=strlen(s);// kmpint index = KMP(s,t,m,n,next1);cout<<"KMP:"<<endl<<index<<" "<<(s+index)<<endl;copy(next1,next1+n,ostream_iterator<int>(cout," "));cout<<endl;// sundayint *sun = new int[256];getsun(t,sun);cout<<endl<<"sunday:"<<endl;//copy(sun,sun+256,ostream_iterator<int>(cout," "));int ii = sunday(s,t,m,n,sun);cout<<endl<<"sunday:"<<endl<<(s+ii)<<endl;delete []sun;cout<<"暴力搜索:"<<endl;cout<<(s+bf(s,t,m,n,next1))<<endl;return 0;}
- KMP与Sunday算法
- Sunday算法和KMP算法
- 字符串匹配算法--BF、KMP、Sunday
- kmp bm sunday 字符串查找算法
- 字符串匹配算法(KMP, BM, Sunday)
- 字符串匹配之KMP、BoyerMoore、Sunday算法
- 字符串匹配算法---Brute force、KMP、Sunday
- 字符串匹配:kmp,bm和sunday算法
- Sunday算法流程与代码
- 对于KMP算法的理解(Sunday)算法的理解
- 比KMP算法更简洁,更高效的sunday算法
- 数据结构与算法系列----Sunday算法详解
- sunday算法研究——超越kmp的字符串匹配
- sunday、kmp、 bm、 horspool字符串匹配算法 code
- 字符串匹配---KMP,Horspool,Boyer-Moore和Sunday等算法
- 字符串匹配算法(KMP、BM和Sunday),及Python实现
- 串模式匹配之BF和KMP,Sunday算法
- 字符串匹配(BF,BM,Sunday,KMP算法解析)
- 面试知识点-- 操作系统执行可执行程序时,内存分配是怎样的?
- linux 环境 c 连接mysql笔记
- VS2010中GetMenu()和GetSubMenu(0)为NULL引发异常的解决方法
- TCP协议的作用?三次握手是通过什么方法来保证通信双方确认的正确?
- CSS Sprite的应用
- KMP与Sunday算法
- QT类的继承结构
- Struts2的标签使用总结
- Linux系统的平均负载
- error C2065: “SOCKET”: 未声明的标识符
- 浏览器页面区域大小的获取
- Http协议详解(稍加整理)
- poj 3254 Corn Fields (状态压缩DP)
- 程序员技术修炼路线