定义:设有主串S和子串t,子串的定位就是要在主串S中找到一个与子串t相等的子串。通常把主串S称作目标串,子串t称作模式串,因此定位也称作模式匹配。
常用两种算法:
1brute-force算法
思路:主串标记指针每次移动一个位置,然后和子串比较,如何相等则返回当前主串指针的位置。
模式匹配过程如图:
图略
上面算法的缺点:主串指针回溯,当与模式串部分匹配后,每次主...
分类:
其他好文 时间:
2014-09-11 12:33:21
阅读次数:
120
前面两篇文章,分别介绍了字符串的概念、抽象数据类型、KMP模式匹配算法。这篇文章,我们来学习字符串的一些常用算法。字符串的相关操作算法StrAssign:/*功能:生成一个其值等于Chars的串T*/Status StrAssign(String T, char *chars){ int i...
分类:
其他好文 时间:
2014-08-29 17:53:38
阅读次数:
183
/*
* KMP 模式匹配算法
*/
#include
#include
using namespace std;
/*
* 计算模式串的next数组
* 模式串既做主串,又做模式串,进行匹配
* 时间复杂度为O(m),m为模式串的长度
*/
void countNext(char* strPattern, int len, int* next)
{
int i = 0, j...
分类:
其他好文 时间:
2014-08-25 17:01:04
阅读次数:
214
最近在研究一些字符串匹配算法,也是由于工作上的需要,强力推荐一本书《柔性字符串匹配》,一本很好的书。网上可以随时搜索到。还是说正题吧。我的前几天研究了一下多模式匹配算法,选了Aho-Corasick算法,因为这个比较基础,相比其他多模式匹配算法其要容易理解的多。所以,现在简单总结一下书上的内容,.....
分类:
其他好文 时间:
2014-08-23 18:52:51
阅读次数:
348
再次回来总结KMP,发现有点力不从心,学久了,越觉得越来越不理解了。估计是写KMP已经不下50遍了吧。每次用都是直接默写。。KMP算法,串模式匹配算法,通过预处理得到next数组,再进行匹配。几个要重点记忆的地方:1. next数组的含义 next[i] = t 表示以i位置结尾的前缀串(相对于原串...
分类:
其他好文 时间:
2014-08-19 00:56:23
阅读次数:
213
1977 年,Robert S.Boyer和J Strother Moore提出了另一种在O(n)时间复杂度内,完成字符串匹配的算法,其在绝大多数场合的性能表现,比KMP算法还要出色,下面我们就来详细了解一下这 一出色的单模式匹配算法,在此之前推荐读者读一下我的另一篇文章《KMP算法详解》,对于透彻...
分类:
其他好文 时间:
2014-08-13 14:28:36
阅读次数:
428
KMP 算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化, 是一个非常优秀的模式匹配算法。但是相较于其他模式匹配算法,该算法晦涩难懂,第一次接触该算法的读者往往会看得一头雾水,主要原因是KMP算法在构造跳 ...
分类:
其他好文 时间:
2014-08-13 14:22:16
阅读次数:
307
在介绍KMP算法之前,先介绍一下BF算法。BF算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。举例说明:...
分类:
其他好文 时间:
2014-07-30 23:34:45
阅读次数:
316
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1711 改进的模式匹配算法--KMP算法,时间复杂度有O(n*m)降到O(n+m),求解next数组之后与常规的模式匹配算法相同。 1 #include 2 const int maxn=100...
分类:
其他好文 时间:
2014-07-27 23:11:29
阅读次数:
221
BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。首先S[1...
分类:
其他好文 时间:
2014-07-27 22:17:29
阅读次数:
227