BF + KMP + BM 字符串搜索算法
BF
#include <stdio.h>
#include <string.h> int simplicity(char *s, char *t, int pos); int simplicity(char *s, char *t, int pos)
{
int slen = strlen(s);
int tlen = strlen(t); int i = pos;
int j = 0; while(i < slen && j < tlen) {
if(s[i] == t[j]) {
i++;
j++;
} else {
i = i - j + 1;
j = 0;
}
} // subscripts start at 0 : j == len
// subscripts start at 1 : j > len
if(j == tlen) {
return i - j;
} return -1;
} int main()
{
int pos = 0;
char *s = "goodgoogle";
char *t = "goog"; printf("{s:'%s', t:'%s', pos:'%d', result(subsripts start at 0):'%d'}\n", s, t, pos, simplicity(s, t, pos));
return 0;
}
KMP
#include <stdio.h>
#include <string.h> void get_nextSubscripts(char *t, int *next);
int kmp(char * s, char *t, int pos); void get_nextSubscripts(char *t, int *next)
{
int tlen = strlen(t); int i = 0; // suffix
int j = -1; // prefix next[0] = -1; while(i <= tlen) {
if(j == -1 || t[i] == t[j]) {
i++;
j++; if(t[i] == t[j]) {
next[i] = next[j];
} else {
next[i] = j;
}
} else {
j = next[j];
}
}
} int kmp(char *s, char *t, int pos)
{
int next[255];
int slen = strlen(s);
int tlen = strlen(t); int i = pos;
int j = -1; get_nextSubscripts(t, next); while(i < slen && j < tlen) {
if(j == -1 || s[i] == t[j]) {
i++;
j++;
} else {
j = next[j];
}
} if(j == tlen) {
return i - j;
} return -1;
} int main()
{
int pos = 0;
char *s = "goodgoogle";
char *t = "goog"; printf("{s:'%s', t:'%s', pos:'%d', result(subsripts start at 0):'%d'}\n", s, t, pos, kmp(s, t, pos)); return 0;
}
BM
BF + KMP + BM 字符串搜索算法的更多相关文章
- Boyer–Moore (BM)字符串搜索算法
在计算机科学里,Boyer-Moore字符串搜索算法是一种非常高效的字符串搜索算法.它由Bob Boyer和J Strother Moore设计于1977年.此算法仅对搜索目标字符串(关键字)进行预处 ...
- grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)
这篇长文历时近两天终于完成了,前两天帮网站翻译一篇文章“为什么GNU grep如此之快?”,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解 ...
- grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)(转)
这篇长文历时近两天终于完成了,前两天帮网站翻译一篇文章“为什么GNU grep如此之快?”,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解 ...
- 数据结构学习之字符串匹配算法(BF||KMP)
数据结构学习之字符串匹配算法(BF||KMP) 0x1 实验目的 通过实验深入了解字符串常用的匹配算法(BF暴力匹配.KMP.优化KMP算法)思想. 0x2 实验要求 编写出BF暴力匹配.KM ...
- 字符串搜索算法Boyer-Moore
整理日: 2015年2月16日 1. 主要特征 假设文本串text长度为n,模式串pattern长度为m,BM算法的主要特征为: 从右往左进行比较匹配(一般的字符串搜索算法如KMP都是从从左往右进行匹 ...
- 从入门到精通之Boyer-Moore字符串搜索算法详解
本文讲述的是Boyer-Moore算法,Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解这个算法,发现这个算法一开始还挺难理解的,也许是我理解能力不是很好吧,花了小半天才看懂,看懂了过后 ...
- hdu 4333"Revolving Digits"(KMP求字符串最小循环节+拓展KMP)
传送门 题意: 此题意很好理解,便不在此赘述: 题解: 解题思路:KMP求字符串最小循环节+拓展KMP ①首先,根据KMP求字符串最小循环节的算法求出字符串s的最小循环节的长度,记为 k: ②根据拓展 ...
- 常用算法3 - 字符串查找/模式匹配算法(BF & KMP算法)
相信我们都有在linux下查找文本内容的经历,比如当我们使用vim查找文本文件中的某个字或者某段话时,Linux很快做出反应并给出相应结果,特别方便快捷! 那么,我们有木有想过linux是如何在浩如烟 ...
- 第4章学习小结_串(BF&KMP算法)、数组(三元组)
这一章学习之后,我想对串这个部分写一下我的总结体会. 串也有顺序和链式两种存储结构,但大多采用顺序存储结构比较方便.字符串定义可以用字符数组比如:char c[10];也可以用C++中定义一个字符串s ...
随机推荐
- eclipse 快捷键设置
“window→Preferences→General→Keys→你想设置的快捷键" PS(Postscript)我常用的快捷键: 撤销 Undo Ctrl+Z 还原 Redo ...
- 最简单的回射客户/服务器程序、time_wait 状态
下面通过最简单的客户端/服务器程序的实例来学习socket API. echoser.c 程序的功能是从客户端读取字符然后直接回射回去. C++ Code 1 2 3 4 5 6 7 8 9 10 ...
- 目的可疑,但方法非常值得学习的书——leo鉴书56
书中提到写作手法绝对值得学习,为此能够打四颗星. 作者是个买直销产品的.靠写字让别人买自己的东西.当中特别强调了卖的多是太空时代的产品,意思就是读者非常可能并不须要,多半是被眼花缭乱的广告词儿骗了 ...
- jmeter 非GUI执行测试,导入jtl文件没有响应数据出来办法
jemter 官方也一直强调要在非GUI下执行 Run your JMeter test in command-line non-GUI mode as 在linux下执行jmeter压力测试,生成j ...
- 使用xshell远程登录ubuntu使用vi编辑不能使用删除键方向键
近期安装了xshell,远程登录上ubuntu后,在插入模式下,按删除键没有任何反应,按方向键分别打印出A.B.C.D,每个字符一行. 这是因为ubuntu初始化安装的是vi的tiny版本,解决办法安 ...
- MySql按字段分组取最大值记录
数据库原始数据如下:数据库名:tbl_clothers 需求是:按照type分组,并获取个分组中price中的最大值,解决sql如下: 方法一: select * from (select type, ...
- 深入浅出 妙用Javascript中apply、call、bind【转】
网上文章虽多,大多复制粘贴,且晦涩难懂,我希望能够通过这篇文章,能够清晰的提升对apply.call.bind的认识,并且列出一些它们的妙用加深记忆. apply.call 在 javascript ...
- linux怎么查看一个文件夹的大小
linux查看一个文件夹的大小的命令为: -lh 该文件夹的完整路径 例,查询/var文件夹的大小: -lh /var du 递归查询该路径下所有文件的大小(若不加任何参数,则显示文件夹内的所有文件, ...
- 关于DDR3非常棒的文章
xilinx平台DDR3设计教程之仿真篇 http://wenku.baidu.com/view/c452d9a5524de518964b7dca.html?pn=50
- 并行开发系列 Plinq等
http://www.cnblogs.com/huangxincheng/archive/2012/04/03/2430638.html