《大话数据结构》学习笔记--chapter 5
2017-07-22 22:06
246 查看
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函数进行改良:nextval5.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 2
- 《大话数据结构》学习笔记--chapter 4
- 《大话数据结构》学习笔记--chapter 3
- 《大话数据结构》学习笔记--chapter 1
- [学习笔记]Inside Windows 2000(1)Chapter 1 Concepts and Tools
- Apue.2e学习笔记chapter3
- Data Structures and Other Objects Using C++ (Chapter 2) 学习笔记五
- 《大话数据结构》--学习笔记8 ***重点***
- Perl学习笔记 Learning Perl Chapter IV
- 机器学习学习笔记 PRML Chapter 1.1 Introduction
- Effective C++学习笔记 chapter 3
- [学习笔记]Inside WIN2K (2) Chapter 2 System Architecture
- APUE 学习笔记 - Chapter 7 . Process Environment
- CSAPP 学习笔记 Chapter two & three
- Python学习笔记_Chapter 7web开发
- headfirstjava 学习笔记(chapter1-5)
- 一个菜鸟的算法导论学习笔记【Chapter 4】
- Data Structures and Other Objects Using C++ (Chapter 1) 学习笔记三
- C++ Primer 5th Chapter 2 学习笔记
- 《大话数据结构》--学习笔记3