首页 > 其他分享 >3数据结构

3数据结构

时间:2024-04-05 16:23:10浏览次数:17  
标签:编码 复杂度 路径 二叉树 顶点 数据结构 节点

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

标签:编码,复杂度,路径,二叉树,顶点,数据结构,节点
From: https://www.cnblogs.com/baidh/p/18115854

相关文章

  • 数据结构——顺序表
    一、线性表的顺序储存(连续)表示顺序存储的定义:逻辑上相邻的数据元素存储在物理上相邻的存储单位中存储结构。二、线性表的顺序表示和实现        1、线性表存储空间分配#defineList_size100 //存储空间初始分配量typedefintElemtype;// 静态分配typedefst......
  • C语言数据结构专题--顺序表(1基础)
    前言我们在对C语言有一定的了解之后,我们就可以开始数据结构的学习了,数据结构多用指针、结构体、动态内存开辟等知识,若对这些知识还不太了解的朋友,就需要加深其理解了,那么废话不多说,我们正式开始本节的学习什么是数据结构数据结构是由"数据"和"结构"两个词相组合得到的......
  • 什么是数据类型,什么是数据结构。
    数据类型,是人对数据的分类。人用这个信息,人自己或者让编译器做一种运动,将一种形式的数据转换成另一种形式的数据。数据结构,是人认为的数据之间的关系。数据类型是程序设计语言或者编译原理的概念。只讨论数据结构,可以不使用数据类型这个概念,可以不用高级程序设计语言,可以直接用......
  • (Java)数据结构——图(第三节)BFS的实现
    前言本博客是博主用于复习数据结构以及算法的博客,如果疏忽出现错误,还望各位指正。广度优先搜索的原理好了,还是这张图,不过是广度优先搜索不难看出,就是“一层一层”搜这次咱从A开始,因为如果从B开始的话,只需要一次,搜索过程就是B直接搜完,入队ACDE,isVistied全部ture,结束......
  • 驱动对象和设备对象数据结构
    驱动对象:每个驱动程序都会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载时被内核中的对象管理程序所创建的。驱动对象用DRIVER_OBJECT数据结构表示,它作为驱动的一个实例被内核中的I/O管理器负责加载,并且内核对一个驱动只加载一个实例。驱动程序需要在DriverEntry中......
  • 数据结构——从入门到飞升——两个有序链表的交集
    题目:已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有......
  • 数据结构(六)——图的应用
    6.4 图的应用6.4.1最小生成树对于⼀个带权连通⽆向图G=(V,E),⽣成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有⽣成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的最小生成树(Minimum-Spanning-Tree,MST)。最小生成树可能有多个,但边的权值之......
  • CHC5223数据结构和算法
    CHC5223数据结构和算法2023-2024第2学期第1页,共4页课业1价值40%的课程个人工作学习成果学生将能够理解:1.1数据结构1.2数据结构的应用1.3面向对象编程概念1.4程序测试方法学生将掌握以下方面的技能:2.1数据抽象2.2数据结构的使用2.3使用高级面向对象语言进行更高级的编程2.4程序......
  • 数据结构——从入门到飞升——两个有序链表的合并
    首先,我们要知道sort()函数的使用方法:1.需要函数头#include2.sort(begin,end,cmp)begin:指向待分类元素的第一个指针end:指向待分类元素最后一个的指针其中end-begin是所有数的数量cmp:表示排序的样式,没有就是默认从小到大排要是想从大到小排,可写成greater,int也可以写成别的......
  • 散列表的数据结构以及对象在JVM堆中的存储过程
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18032068出自【进步*于辰的博客】参考笔记二,P67、P68.1。目录1、什么是“散列表”?2、关于对象存储过程2.1加载过程2.2注意事项3、Hashtable扩容机制3.1扩容机制是什么......