字符串匹配朴素算法
2015-09-07 17:11
441 查看
本文转自字符串匹配朴素算法
这个朴素算法的英文命名为BruteForce,暴力的意思,所谓的朴素算法就是算法分析上常讲的暴力求解方法。这是一种方法,也是一种算法思想,就是不考虑空间时间复杂度,以最简单的看待问题的视角去思考,去解决。比如八皇后问题,使用8重循环来依依判断,比如全排列,使用多重循环枚举的方式等等。
字符串匹配问题的朴素算法是字符串算法中最基本也可以算是最简单的算法了。他就是按照大多数人们的思维去思考这么一个匹配问题的,假设文本字符串为T[1,,,n],模板字符串P[1,,,m]。m <= n;一般说来,我们认为文本和模板的字母表相同。如果存在整数s 使
得0<= s <= n-m且T[s+1..s + m]=P[1..m],我们说模板P在文本T的偏移(shift) s出现,也可以说在位置s+1出现(因为T[s+1]=P[1])。字符串问题就是要找出所有合法的偏移。
下面是算法描述:
下面是C++实现代码:
由于书中是用序数代表的下标,我还是直接用下标来表示一切,与控制循环等。
[cpp] view
plaincopy
//字符串匹配算法,暴力求解
#include <string>
using std::string;
int AlmostBruteForce(string Text, string Pattern)
{
int lenT = Text.length();
int lenP = Pattern.length();
int s,i;
for (s = 0; s <= lenT-lenP; s++)
{
i = 0;
bool bEqual = true;
while (bEqual && (i < lenP))
{
if (Text[s+i] == Pattern[i])
{
i++;
}
else
{
bEqual = false;
}
}
if (bEqual)
{
return s;
}
}
return -1;
}
这个朴素算法的英文命名为BruteForce,暴力的意思,所谓的朴素算法就是算法分析上常讲的暴力求解方法。这是一种方法,也是一种算法思想,就是不考虑空间时间复杂度,以最简单的看待问题的视角去思考,去解决。比如八皇后问题,使用8重循环来依依判断,比如全排列,使用多重循环枚举的方式等等。
字符串匹配问题的朴素算法是字符串算法中最基本也可以算是最简单的算法了。他就是按照大多数人们的思维去思考这么一个匹配问题的,假设文本字符串为T[1,,,n],模板字符串P[1,,,m]。m <= n;一般说来,我们认为文本和模板的字母表相同。如果存在整数s 使
得0<= s <= n-m且T[s+1..s + m]=P[1..m],我们说模板P在文本T的偏移(shift) s出现,也可以说在位置s+1出现(因为T[s+1]=P[1])。字符串问题就是要找出所有合法的偏移。
下面是算法描述:
下面是C++实现代码:
由于书中是用序数代表的下标,我还是直接用下标来表示一切,与控制循环等。
[cpp] view
plaincopy
//字符串匹配算法,暴力求解
#include <string>
using std::string;
int AlmostBruteForce(string Text, string Pattern)
{
int lenT = Text.length();
int lenP = Pattern.length();
int s,i;
for (s = 0; s <= lenT-lenP; s++)
{
i = 0;
bool bEqual = true;
while (bEqual && (i < lenP))
{
if (Text[s+i] == Pattern[i])
{
i++;
}
else
{
bEqual = false;
}
}
if (bEqual)
{
return s;
}
}
return -1;
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C++联合体转换成C#结构的实现方法
- C#实现的算24点游戏算法实例分析
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析