线性表-串:KMP模式匹配算法】的更多相关文章

(一)定义 由于BF模式匹配算法的低效(有太多不必要的回溯和匹配),于是某三个前辈发表了一个模式匹配算法,可以大大避免重复遍历的情况,称之为克努特-莫里斯-普拉特算法,简称KMP算法 (二)KMP算法了解 问题由模式串T决定,而不是由目标串S决定 可以避免不必要的回溯和多余的匹配 1.思路启发一(避免了所有的回溯): 前提:对于模式串和目标串的匹配,我们在前4个完全匹配,直到i5与j5才失配 上面匹配到j5与i5时失配,那么我们下一步应该如何匹配呢?是按照BF算法回溯到i=i-j+-->i2处继…
KMP算法实现 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 40 typedef int ElemType; typedef int Status; //设置串的存储结构 typede…
(一)获取模式串T的next数组值 1.回顾 我们所知道的KMP算法next数组的作用 next[j]表示当前模式串T的j下标对目标串S的i值失配时,我们应该使用模式串的下标为next[j]接着去和目标串失配的i值进行匹配 而KMP算法的next求值函数 我们可以知道next除了j=1时,next[1]为0,其他情况都是比较前缀和后缀串的相似度(第三种情况是当相似度为0时,next值为0+1=1) next数组,是用来评判前后缀的相识度,而next值,则是等于相似度加一 2.思考 虽然我们知道是…
一.简单模式匹配算法(略,逐字符比较即可) 二.KMP模式匹配算法 next数组:j为字符序号,从1开始. (1)当j=1时,next=0: (2)当存在前缀=后缀情况,next=相同字符数+1: (3)当前缀 != 后缀且j != 1时,next=1. 如下: abcdex next=011111 abcabx next=011123 ababaaaba next=011234223 说明:0位置为情况1: 1.2位置为情况3: 3-5位置一直有前缀对称,所以一直累加:         6位置…
[从今天开始修炼数据结构]基本概念 [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList [从今天开始修炼数据结构]栈.斐波那契数列.逆波兰四则运算的实现 [从今天开始修炼数据结构]队列.循环队列.PriorityQueue的原理及实现 一.什么是串? 串是羊肉牛肉等用铁签穿过的食物,常碳烤.油炸.不对,错了…… 串String是由零个或多个字符组成的有限序列,又名字符串. 二.串的比较 在计算机中串的大小取决于它们挨个字母的字典顺序,比如“…
本文根据<大话数据结构>一书,实现了Java版的串的朴素模式匹配算法.KMP模式匹配算法.KMP模式匹配算法的改进算法. 1.朴素的模式匹配算法 为主串和子串分别定义指针i,j. (1)当 i 和 j 位置上的字母相同时,两个指针都指向下一个位置继续比较: (2)当 i 和 j 位置上的字母不同时,i 退回上次匹配首位的下一位,j 则返回子串的首位. (注:该图从下标为1开始 ) 实现程序: /** * 朴素的模式匹配算法 * 说明:下标从0开始,与书稍有不同,但原理一样 * @author…
--喜欢记得关注我哟[shoshana]-- 目录 1.朴素的模式匹配算法2.KMP模式匹配算法 2.1 KMP模式匹配算法的主体思路 2.2 next[]的定义与求解 2.3 KMP完整代码 2.4 一道题目3.KMP模式匹配算法改进 4.朴素算法和KMP算法的时间复杂度分析 5.KMP算法next[]数组理解附: 正文 字符串匹配 给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置. 如下面两个字符串: string s = "bacbababadababa…
//串的模式匹配算法 //KMP算法,时间复杂度为O(n+m) #include <iostream> #include <string> #include <cstring> using namespace std; //-----串的定长顺序存储结构----- #define MAXLEN 255 //串的最大长度 typedef struct { ]; //存储串的一维数组 int length; //串的当前长度 }SString; ]; ]; int Inde…
  数据结构- 串的模式匹配算法:BF和 KMP算法  Brute-Force算法的思想 1.BF(Brute-Force)算法 Brute-Force算法的基本思想是: 1) 从目标串s 的第一个字符起和模式串t的第一个字符进行比较,若相等,则继续逐个比较后续字符,否则从串s 的第二个字符起再重新和串t进行比较. 2) 依此类推,直至串t 中的每个字符依次和串s的一个连续的字符序列相等,则称模式匹配成功,此时串t的第一个字符在串s 中的位置就是t 在s中的位置,否则模式匹配不成功. Brute…
串的模式匹配算法     问题:         求子串位置的定位函数如何写? int index(SString S,SString T,int pos);         给定串S,子串T,问T在S中从pos位开始第一次出现的位置是? 我没有使用字符数组或者string,而是自己实现SString,(这其实是数据结构作业).S[0]中存放的是串的长度. 方法一:大暴力 #include<iostream> #include<cstdio> #define MAXSTRLEN 2…