sunday算法实现
来源:互联网 发布:创业软件待遇 编辑:程序博客网 时间:2024/06/11 05:25
这个算法比其他的kmp bm 好理解的太多,而且速度还很快。
sunday思路是:
1,Sunday算法是Daniel M.Sunday于1990年提出的一种比BM算法搜索速度更快的算法。
2,Sunday算法其实思想跟BM算法很相似,只不过Sunday算法是从前往后匹配,在匹配失败时关注的是文本串中参加匹配的最末位字符的下一位字符。如果该字符没有在匹配串中出现则直接跳过,即移动步长= 匹配串长度+ 1;否则,同BM算法一样其移动步长=匹配串中最右端的该字符到末尾的距离+1。
3,举例:
匹配串:abcbczdxzc
模式串:zbcac
这里我们看到z-a没有对上,我们就看匹配串中的z在模式串的位置,然后对齐。
匹配串:abcbczdxzc
模式串: zbcac
如果模式串中的没有那个字符的话就跳过去。
匹配串:abcbcedxzcs
模式串:zbcac
e不在模式串中出现,那么我们就
匹配串:abcbcedxzcs
模式串: zbcac
#include <stdio.h>#include <stdlib.h>#include <string.h>int Sunday(char text[],char pattern[]){int i = 0;int j = 0;int pos = -1; while(i < strlen(text) && j < strlen(pattern)) { if(text[i] == pattern[j]) { i++; j++; } else { int k = strlen(pattern) - 1; while(k >= 0) { if(text[i+strlen(pattern)+1]==pattern[k]) { break; } else { k--; } } i += (strlen(pattern) - (k+1)+1); j = 0; } } printf("j is %d i is %d\n",j,i); printf("%d\n",strlen(text)); if(i==strlen(text)) { return pos; } else { return -1; }} int main(void){char text[] = "ABC ABCDAB ABCDABCDABDE";char pattern[] = "ABCDABD";char *ch = text;int i = Sunday(text, pattern);if(i >= 0) printf("matched@: %s\n", ch + i); printf("pos is %d\n",i);return 0;}
有点小小的问题 ,但是思路没有问题,写在博客中督促自己再次将它简洁地实现出来
0 0
- SUNDAY 算法 c#实现
- sunday算法实现
- Sunday算法java实现
- sunday算法的实现
- Java实现Sunday算法
- 关于Sunday算法以及实现
- Sunday算法c语言版实现
- 字符串匹配Sunday算法实现
- 字符串匹配Sunday算法实现
- sunday算法的简单实现
- 模式匹配算法 sunday算法python实现
- Sunday字符串搜索算法Delphi实现
- Sunday字符串匹配算法,java实现
- Sunday 算法的 O-C语言实现
- Sunday 算法的 O-C语言实现
- 字符串查找算法Sunday的实现
- 字符串匹配--Sunday算法-C语言实现
- 字符串匹配Sunday算法C++实现
- 双网卡绑定相关知识
- Centos 7 安装 JDK
- 2015,新的开始
- MongDB学习资料大集合
- 如何获得正确的基数估计值
- sunday算法实现
- 判断socket断开
- hdu1710 Binary Tree Traversals
- AE视频功能
- lower_bound二分的三种写法
- Android高手进阶教程(十八)之---列出Android设备中所有启动的服务,及判断某个服务是否开启!
- Mongodb监控之monogstat
- 堆排序算法——Java实现
- App设计之路——WebApp浅谈