湖大计学考研系列文章目录
- 22湖南大学计算机学硕上岸经验
- 22湖南大学 866 数据结构真题(回忆版)
- 866数据结构重点内容
- 866 数据结构模拟题(一)及解析
- 866数据结构笔记 - 第一章 绪论
- 866数据结构笔记 - 第二章 线性表
- 866数据结构笔记 - 第三章 栈和队列
- 866数据结构笔记 - 第四章 串
- 866数据结构笔记 - 第五章 树和二叉树
- 866数据结构笔记 - 第六章 图
- 866数据结构笔记 - 第七章 查找
- 866数据结构笔记 - 第八章 排序
目录
重点内容
虽然串并不在866数据结构的大纲中,但据说在前几年的考研真题中出现过选择题,所以有时间的情况下建议掌握next数组和nextval数组的计算。我估计撑死考一个选择题,大题应该不可能,选择题考点就是next数组和nextval数组的计算。
- next数组和nextval数组计算
一、基本概念
- 模式匹配:子串的定位操作称为串的模式,它求的是子串(常称模式串)在主串中的位置。
- 朴素模式匹配:最差时间复杂度为O(mn),其中m是主串长,n是模式串长。
- KMP算法:平均时间复杂度O(m+n)。
- 串前缀:包含第一个字符,且不包含最后一个字符的字串。
- 串后缀:包含最后一个字符,且不包含第一个字符的字串。
二、next数组计算
若第j个字符匹配失败,由前1~j-1个字符组成的串记为S,next[j]=S最长相等前后缀长度+1,特别地,next[1]=0。
关于next数组的计算可以参考这篇博客:算法:next数组的求法详解
nextval数组计算:串——求解next数组和nextval数组 - 简书 (jianshu.com)
// nextval数组的求法
// 1.先算出next数组
// 2.令nextval[1]=0
for (int j = 2; j <= T.length; j++){
if (T.ch[next[j]] == T.ch[j])
nextval[j] = nextval[next[j]];
else
nextval[j] = next[j];
}
参考(具体细节见原文)
参考书目:
- 王道:《数据结构》
湖大本科: 《数据结构与算法分析( C++版)(第三版)》Clifford A. Shaffer 著,张铭、刘晓丹等译。