《大话数据结构》学习笔记--chapter 5
来源:互联网 发布:组态软件学哪个 编辑:程序博客网 时间:2024/06/05 01:54
Chap 5 串
5.2 串的定义
l 串是由零个或多个字符组成的有限序列,又名叫字符串;
l 字符数目称为串的长度;
l 串中任意个数的连续字符组成的子序列称为该串的子串;
l 子串在主串中的位置就是子串的第一个字符在主串中的序号;
5.3 串的比较
l 判断C语言中两个串是否相等:必须长度和各个位置对应的字符都相等,才算是相等;
l 其他的例子:hap< happy;happen < happy;
5.4 串的抽象数据类型
ClearString(s);//清空
Concat(T, s1, s2);//用T返回s1和s2组成的新串;
5.5 串的存储结构
5.5.1 串的顺序存储结构
l 用一组地址连续的存储单元来存储串中的字符序列;为每个定义的串变量分配一个固定长度的存储区;一般是用定长数组来定义;
l 在下标为0或最后的位置保存串的长度值;
l 或者在串值后面加一个不计入串长度的结束标记字符,同个遍历获得长度;
l 这种存储结构有缺点;操作时可能超出数组的长度;
5.5.2 串的链式存储结构
与线性表相似;一个结点可以存放多个字符;
5.6 朴素的模式匹配算法
子串定位操作:串的匹配模式;
对主串S做大循环,对每个字符开头做子串T长度的小循环;直到匹配成功或全部遍历完成;
有很多重复比较操作,低效!
5.7 KMP模式匹配算法
5.7.1 KMP模式匹配算法推理
l 经过第一次比较,如果发现主串S和子串T的前N位是相等的,而子串的这前N位又互不相等,那么可以避免N-1次不必要的比较;
l 对于子串中有与首字符相等的字符,也是可以省略一部分不必要的判断步骤;
l 在朴素模式匹配算法中,主串的i值是不断地回溯来完成的,而在KMP模式匹配算法中是不需要回溯的;即i值不可以变小;所以变化的是j值;
l J值的多少取决于当前字符之前的串的前后缀的相似度;
l T串各个位置的j值变化定义为一个数组:next,next的长度就是T串的长度;
5.7.2 next数组值推导
l Next[j]取值:
n J=1时,next[j] = 0;
n J由j到j-1串前后缀无相等字符,next[j] = 1;
n 前后缀1个字符相等,next[j]= 2;两个字符相等,next[j]=3;以此类推。。。
² Next数组的作用是:当出现失配情况S[i] != T[j]时,next[j]就指示使用T中以next[j]为下标的字符与S[i]进行比较;
5.7.3 KMP模式匹配算法实现
5.7.4 KMP模式匹配算法改进
对next函数进行改良:nextval
5.7.5 nextval数组值推导
For instance: T = “ababaaaba”;
先推算出next数组的值;011234223;
J = 1时,nextval[1] = 0;
J = 2 时,next[2]=1;对应T串的第1位的值是a, b!=a,所以nextval[2]= next[2]=1;
J = 4 时,next[4]=2;对应T串的第2位的值是b, b=b, 所以nextval[4]=nextval[2]=1;
J = 7 时,next[7]=2;对应T串的第2位的值是b,a!=b, 所以nextval[7]=next[7]=2;
² 如果a位字符与他next值指向的b位字符相等,则该a位的nextval指向b位的nextval值;如果不等,则该a位的nextval值就是他自己a位的next的值;
- 《大话数据结构》学习笔记--chapter 5
- 《大话数据结构》学习笔记--chapter 1
- 《大话数据结构》学习笔记--chapter 2
- 《大话数据结构》学习笔记--chapter 3
- 《大话数据结构》学习笔记--chapter 4
- 《大话数据结构》学习笔记--chapter 6
- 《大话数据结构》--学习笔记5
- 大话数据结构学习笔记
- 《大话数据结构》第一章学习笔记
- 《大话数据结构》--学习笔记1
- 《大话数据结构》--学习笔记2
- 《大话数据结构》--学习笔记3
- 《大话数据结构》--学习笔记4
- 《大话数据结构》--学习笔记6
- 《大话数据结构》--学习笔记7
- 大话数据结构学习笔记1
- 大话数据结构学习笔记2
- 《大话数据结构》学习笔记(1)
- Python金融行业必备工具
- IDEA 使用maven创建web项目
- 第 3 章 视图(续)
- Gradle配置签名问题解决
- 虚拟机的封装
- 《大话数据结构》学习笔记--chapter 5
- 求取两个数的最大公约数
- 单列模式读取properties配置文件
- 第二章Hello World-跟赵大笨笨学SpringMVC
- java处理百度编辑器ueditor上传的图片等多媒体文件
- 素数筛选及优化
- 遍历二叉树
- [深度探索C++对象模型]trival constructor和non-trival constructor
- JVM G1收集器