数据结构之串

目录

4.1 串的基本概念

4.1.1 串的定义

  4.1.2 串的存储结构

4.2 串的模式匹配算法

4.2.1 BF算法(Brute-Force)

4.2.2 KMP算法


(重点是字符串模式匹配:KMP匹配算法,next数组及推理,了解nextval数组的求解)

4.1 串的基本概念

4.1.1 串的定义

Def:由零个或多个字符组成的有限序列

数据结构之串_第1张图片

·子串:一个串中任意多个连续的字符组成的子序列(包含空串)

·主串:包含子串的串

·字符位置:某个字符在串中的序号为该字符在串中的位置

·子串位置:子串的第一个字符在主串中的位置

·空格串:由一个或多个空格组成的串(注意与空串的区分)

·串相等:两个串的长度且每个对应位置的字符都相等

【例】:

数据结构之串_第2张图片·串的抽象类型定义: 

数据结构之串_第3张图片

 【串与线性表的区别】:串的逻辑结构与线性表相似,区别仅在于串的数据对象限定为字符集;在基本操作上和线性表差别较大,线性表主要以单个元素为操作对象,而串的基本操作通常以子串为操作对象

  4.1.2 串的存储结构

(1)串的顺序存储

数据结构之串_第4张图片

(2) 的链式(块链)存储

 该方式操作方便,但存储密度低(存储密度=串值所占存储/实际分配的存储),为了改进可以将多个字符存放在一个结点中,此时每个结点称为块:

数据结构之串_第5张图片

4.2 串的模式匹配算法

算法目的:确定主串中的子串(模式)第一次出现的位置

(例如文档中查找关键字的操作;搜索引擎;拼写检查等)

4.2.1 BF算法(Brute-Force)

·思路:利用穷举法的思路,从主串的每一个字符开始依次与子串的字符进行比较

·具体过程:设主串S=aaaaab,子串T=aaab

数据结构之串_第6张图片

数据结构之串_第7张图片

数据结构之串_第8张图片

 ·具体实现:

数据结构之串_第9张图片

 ·时间复杂度:若主串长度n,子串长度m;最好的情况下比较m次,即O(m);最坏的情况下主串前面的n-m个位置都比较到了的最后一位,即比较了(n-m)*m次,到最后m位时也各比较一次即m次,最终总次数(n-m+1)*m次,当m<

4.2.2 KMP算法

·思想:相较BF算法主串S的指针i不必回溯,为此,定义next[j]函数,表明当模式中第j个字符与主串中相应字符"失配”时,在模式中需重新和主串中该字符进行比较的字符的位置。此时算法复杂度可提高到O(n+m)。

数据结构之串_第10张图片

·next函数的公式: 

数据结构之串_第11张图片

·next函数的推理: 

数据结构之串_第12张图片

 ·具体实现:

数据结构之串_第13张图片

 ·改进的KMP:当出现Pj=Pnext[j]时,需再次递归,将next[j]修正为next[next[j]],直至二者不再相等,更新后的数组命名为nextval

数据结构之串_第14张图片

你可能感兴趣的:(DS,数据结构,算法)