3数据结构

p'数据结构

57-65 9分 数据结构+算法

时间复杂度

image-20220815151829291

加法规则

image-20220815152305376

多项相加,保留高阶项,系数化为1(最高阶太大了,其余的可以忽略不计),系数化为1。

乘法规则

多项相乘,都保留,并将系数化为1

image-20220816140024430时间复杂度实例

空间复杂度

O(1) O(n) O($n^2$)

渐进符号

image-20220816141532727渐进上界的括号内要大于等于等式左边的计算结果。

image-20220816141550452渐进下界的括号内要小于等于等式左边的计算结果。

image-20220816141603420渐进紧致界 想要正确 就得渐进上限相等&&渐进下限相等。

递归 时时间、空间复杂度

对于每次递归过程中时间复杂度不变的情况:递归时间复杂度 = 递归的次数*每次递归的时间复杂度。

image-20220816142655598每趟递归中的时间复杂度和n有关。

顺序表

链表

单链表

双链表

循环链表

image-20220816160156593

矩阵

对称矩阵

二维对称矩阵压缩一维对应公式为:

arr[0...m,0...n]

arr[i,j] = $(1+i)i/2+j$

arr[1...m,1...n]

arr[i,j] = $(1+(i-1))(i-1)/2+(j-1)$

对角矩阵

image-20220816202020874问题:对角的0不需要存储image-20220816203314205公式:前面的i列+当前元素前面的行数

下标0: $i*3-1+j-i+2$ = $2i+j+1$

下标:2(i-1)+(j-1)+1

稀疏矩阵

image-20220816203828516容量大,但可用元素很少。

三元表

十字链表

概念

孩子,父亲,兄弟

节点度:节点的子树个数。

树的度:所有节点度的最大值

叶子节点:

内部节点:度不为0

节点的层:

树的高度:最大层数。

性质

  1. 节点的个数=所有度数和加1。
  2. image-20220817201201171度为m的树中第i层至多有$m^(i-1)$个节点。 i从1开始

3.image-20220817201520138度为m的树中最多有$m^h-1/m-1$个节点

等比数列求和 公比q = $a2/a1 = m1/m0 = m$

等比数列求和公式推导image-20220817203006622

$1(1-m^h)/1-m = 1-m^h/1-m = m^h-1/m-1$

公式为$m^h-1/m-1$

4.具有n个节点度为m的树,最低的高度为:$「h=logm^(n(m-1)+1)⌉$image-20220817204311621

$n = m^h-1/m-1$

=> $n(m-1) = m^h-1$

=>$n(m-1)+1=m^h$

=>$h=logm^{n(m-1)+1}$

二叉树

性质

  1. 对于任何二叉树,叶子节点的个数 = 度为2节点的个数+1

    $n_0+n_1+n_2+1 = n$

    $n_00 + n_11+n_2*2 = n$

    $n_0+n_1+n_2+1 = n_00 + n_11+n_2*2$

    $=>n_0+n_1+n_2+1 = n_1+n_2*2 $

    $=>n_0+1 = n_2 $

    $=>n_0 = n_2-1 $

  2. 二叉树的第i(i>=1)层上至多有$2^(i-1)$个节点

  3. 高度为h的二叉树最多有 $2^h-1/2-1 = $ $2^h-1$

  4. image-20220818134207713具有n个结点的完全二叉树的高度为[logzn]+1或[log2(n + 1)]

卡特兰树

公式 = $c^n_{2n}/n+1$

$c^m_n = n!/m!*(m-1)!$

image-20220818140911372

二叉树存储

顺序存储

image-20220818143426445
  • i=1 当前节点为根节点,无双亲若 若i>1,则该结点的双亲结点为i/2 下取整。
  • 2i <= n 2i 为i的左孩子,否则无左孩子。
  • 2i + 1<= n 2i+1 为i的右孩子,否则无右孩子。

链式存储

image-20220818150610895

平衡二叉树

二叉树中任意节点的左右子树相差绝对值小于等于1

二叉排序树

二叉排序树(二叉查找树)

根结点的关键字大于左子树所有结点的关键字,

小于右子树所有结点的关键字,

左右子树也是一颗二叉排序树,

中序遍历得到的序列是有序序列,

最优二叉树(哈夫曼树)

带权路径最短的树(权值大离根节点近):

  • 树的路径长度:从根节点到叶子节点的路径长度和。
  • 节点的带权路径长度:权值*节点的路径长度
  • 树的带权路径长度和:树中所有叶子节点带权路径长度和

性质:

  1. 最优二叉树不唯一但WPL(树的带权路径长度和)是唯一的
  2. 只有度为0和度为2的节点
  3. 总节点个数为:

$节点的总个数 = n_0+n_2$

$n_0 = n_2+1$ => $n_2 = n_0-1$

=> $总个数 = n_0+ n_0-1 = 2n_0-1$

哈夫曼编码

  1. 构造二叉树
  2. 左0右1编码

压缩比

等长编码

image-20220819133347639

需要表示六个不同的字符的编码

$ 2^x = 6 => x = 3$

(40+10+20+16+14)*3 = 300

哈夫曼编码

image-20220819133359806

编码长度不相同

$401+3(11+20+16+14) = 220$

等长编码:(40+10+20+16+14)*3 = 300

哈夫曼编码:$401+3(11+20+16+14) = 220$

压缩比:等长编码-哈夫曼编码 / 等长编码 = (300 - 220 )/ 300 = 0.27

分类

有向图

顶点集合$<V_i,V_j>$

无向图

顶点集合$(V_i,V_j)$

完全图

任意两个顶点之间都有边

有向完全图

image-20220819144847970

无向完全图

image-20220819145042972

和顶点v相关联的边

有向图:

无向图:度=出度+入度

总度数 = 2 * 边

路径

路径:一个顶点到另一个顶点的边

回路:路径大于1 且 起点和终点相同。image-20220819150106779

简单路径:除起点和终点相同,其余路径均不相同。image-20220819150224070

连通图

任意两个顶点之间都有路径

连通图:

最少:n-1

最多(完全图):n(n-1)/2

强连通图

最少:n

最多(完全图):n(n-1)

存储结构

邻接矩阵

image-20220819154701300

有向图一个顶点一个1

无向图一个顶点两个1

邻接表

为每个顶点创建一个单链表

无向图表节点 = 2 * 边

有向图表节点 = 边

稠密图和稀疏图

稠密图:边多 ->使用邻接矩阵存储

稀疏图:边少->使用邻接表存储

边上带权值

image-20220819160155787

遍历

深度优先遍历(递归 ) 广度优先遍历(队列)

采用邻接矩阵存储的时间复杂度:$O(n^2)$(n 节点个数)。

采用邻接表存储的时间复杂度:$无向图=O(n+e)$遍历所有节点的时间复杂度+所有边的时间复杂度。

拓扑排序

image-20220819203247184

posted on   吃可乐的陈伽  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示