文章目录
一、时间复杂度
- 算法时间复杂度以算法中基本操作重复执行的次数(简称为频度)作为算法的时间度量。一般不必要精确计算出算法的时间复杂度,只要大致计算出相应的数量级即可。
- 计算规则
- 加法规则:多项相加,保留最高阶项,并将系数化为1
- 乘法规则:多项相乘都保留,并将系数化为1
- 加法乘法混合规则:小括号再乘法规则最后加法规则
- 渐进符号
- 递归的事件复杂度,空间复杂度
(1)展开式
事件复杂度=递归次数 x 每次递归的时间复杂度
(2)主观法
二、线性结构
线性结构是一种基本的数据结构,主要用于对客观世界中具有单一前驱和后继的数据关系进行描述。线性结构的特点是数据元素之间呈现一种线性关系,即元素“一个接一个排列”
2.1 线性表
线性表是最简单、最基本也是最常用的一种线性结构。常采用顺序存储和链式存储,主要的基本操作是插入、删除和查找等。
一个线性表是 n(n≥0)个元素的有限序列
非空线性表的特点
(1)存在唯一的一个称作“第一个”的元素。
(2)存在唯一的一个称作“最后一个”的元素。
(3)除第一个元素外,序列中的每个元素均只有一个直接前驱。
(4)除最后一个元素外,序列中的每个元素均只有一个直接后继。
2.2线性表存储结构
线性表的存储结构分为顺序存储和链式存储。
(1)线性表的顺序存储
线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。
- 在表长为n的线性表中插入新元素时,共有n+1个插入位置,新元素在n+1个位置插入的概率相同时,插入一个新元素需要移动的元素个数期望值 E为n/2。时间复杂度最好O(1),最坏O(n),平均O(n)
- 等概率下删除元素时需要移动的元素个数期期望值 E为(n-1)/2。时间复杂度最好O(1),最坏O(n),平均O(n)
- 最好,最坏,平均的时间按复杂度都是O(1)
(2)线性表的链式存储
①时间复杂度
时间复杂度 | 插入 | 删除 | 查询 |
---|---|---|---|
最好 | O(1) | O(1) | O(1) |
最坏 | O(n) | O(n) | O(n) |
平均 | O(n) | O(n) | O(n) |
②存储密度不高
2.3栈
(1)栈是只能通过访问它的一端来实现数据在储和检索的一种线性数据结构。
(2)入栈和出栈都不需要遍历列表
(3)递归
(4)先进后出,后进先出
2.4队列
(1)队列是一种先进先出的线性表,它只允许在表的一端插入元素,而在表的另一端删除元素。在队列中,允许插入元素的一端称为队尾(Rear)允许删除元素的一端称为队头(Front)。
(2)入队和出队都不需要遍历列表
(3)循环队列的优点,入队出队都不需要移动其他元素
2.5串
(1)概念
- 空串:长度为零的串称为空串,空串不包含任何字符。
- 空格串:由一个或多个空格组成的串。虽然空格是一个空白字符,但它也是一个字符,在计算串长度时要将其计算在内。
- 子串:由串中任意长度的连续字符构成的序列称为子串。含有子串的串称为主串。子串在主串中的位置是指子串首次出现时,该子串的第一个字符在主串中的位置。空串是任意串的子串。
- 串相等:指两个串长度相等且对应序号的字符也相同。
- 串比较:两个串比较大小时以字符的ASCI码值(或其他字符编码集合)作为依据。实质上,比较操作从两个串的第一个字符开始进行,字符的码值大者所在的串为大:若其中一个串先结束,则以串长较大者为大。
(2)模式匹配
①时间复杂度
n主串,m模式串
最好O(m),最坏O(n*m),平均O(n+m)
②KMP
串的前缀:包含第一个字符并且不包含最后一个字符的字串
串的后缀:包含最后一个字符并且不包含第一个字符的字串
第i个字符的next值 =从1~(i-1)串中最长相等前后缀长度+1