数据结构之串

目录

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:由零个或多个字符组成的有限序列

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

·主串:包含子串的串

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

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

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

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

【例】:

·串的抽象类型定义: 

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

  4.1.2 串的存储结构

(1)串的顺序存储

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

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

4.2 串的模式匹配算法

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

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

4.2.1 BF算法(Brute-Force)

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

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

 ·具体实现:

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

4.2.2 KMP算法

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

·next函数的公式: 

·next函数的推理: 

 ·具体实现:

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

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值