数据结构(公式及重点汇总)
- 格式:doc
- 大小:125.50 KB
- 文档页数:2
数据结构期末复习重点知识点总结一、数据结构概述数据结构是计算机科学中一门关于数据组织、存储和管理的学科。
它涉及到各种数据类型和它们之间的关系,以及对这些数据类型进行有效操作和处理的算法。
二、基本数据结构1. 数组- 数组是一种线性数据结构,用于存储相同类型的数据元素。
- 数组的特点是随机访问和连续存储。
- 数组的插入和删除操作需要移动其他元素,时间复杂度为O(n)。
2. 链表- 链表是一种线性数据结构,通过节点之间的指针链接来组织数据。
- 链表的特点是插入和删除操作简单,时间复杂度为O(1)。
- 链表分为单链表、双向链表和循环链表等不同类型。
3. 栈- 栈是一种具有后进先出(LIFO)特性的数据结构。
- 栈的操作主要包括压栈(Push)和弹栈(Pop)两个操作。
- 栈常用于表达式求值、递归算法的实现等场景。
4. 队列- 队列是一种具有先进先出(FIFO)特性的数据结构。
- 队列的操作主要包括入队(Enqueue)和出队(Dequeue)两个操作。
- 队列常用于实现缓冲区、消息队列等场景。
5. 树- 树是一种非线性的数据结构,由节点和边组成。
- 树的节点具有层级关系,由根节点、子节点和叶节点等组成。
- 常见的树结构有二叉树、红黑树、B树等。
6. 图- 图是一种非线性的数据结构,由节点和边组成。
- 图的节点之间可以有多对多的关系。
- 图的遍历方式有深度优先搜索(DFS)和广度优先搜索(BFS)。
三、常见的数据结构算法1. 排序算法- 冒泡排序、插入排序、选择排序等简单但效率较低的排序算法。
- 快速排序、归并排序、堆排序等高效的排序算法。
- 基数排序、桶排序等适用于特定场景的排序算法。
2. 查找算法- 顺序查找、二分查找等常用的查找算法。
- 树结构相关的查找算法,如二叉搜索树、红黑树等。
- 哈希查找、索引查找等高效的查找算法。
3. 图算法- Dijkstra算法、Bellman-Ford算法等最短路径算法。
第1章绪论内容提要:◆数据结构研究的内容。
针对非数值计算的程序设计问题,研究计算机的操作对象以及它们之间的关系和操作。
数据结构涵盖的内容:◆基本概念:数据、数据元素、数据对象、数据结构、数据类型、抽象数据类型。
数据——所有能被计算机识别、存储和处理的符号的集合。
数据元素——是数据的基本单位,具有完整确定的实际意义。
数据对象——具有相同性质的数据元素的集合,是数据的一个子集。
数据结构——是相互之间存在一种或多种特定关系的数据元素的集合,表示为:Data_Structure=(D, R)数据类型——是一个值的集合和定义在该值上的一组操作的总称。
抽象数据类型——由用户定义的一个数学模型与定义在该模型上的一组操作,它由基本的数据类型构成。
◆算法的定义及五个特征。
算法——是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。
算法的基本特性:输入、输出、有穷性、确定性、可行性◆算法设计要求。
①正确性、②可读性、③健壮性、④效率与低存储量需求◆算法分析。
时间复杂度、空间复杂度、稳定性学习重点:◆数据结构的“三要素”:逻辑结构、物理(存储)结构及在这种结构上所定义的操作(运算)。
◆用计算语句频度来估算算法的时间复杂度。
第二章线性表内容提要:◆线性表的逻辑结构定义,对线性表定义的操作。
线性表的定义:用数据元素的有限序列表示◆线性表的存储结构:顺序存储结构和链式存储结构。
顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。
链式存储结构: 其结点在存储器中的位置是随意的,即逻辑上相邻的数据元素在物理上不一定相邻。
通过指针来实现!◆线性表的操作在两种存储结构中的实现。
数据结构的基本运算:修改、插入、删除、查找、排序1)修改——通过数组的下标便可访问某个特定元素并修改之。
核心语句:V[i]=x;顺序表修改操作的时间效率是O(1)2) 插入——在线性表的第i个位置前插入一个元素实现步骤:①将第n至第i 位的元素向后移动一个位置;②将要插入的元素写到第i个位置;③表长加1。
数据结构重点1.数据结构+算法=程序设计2.数据元素是数据的基本单位,数据项是数据的不可分割的最小单位3.数据对象:性质相同的数据元素的集合,是数据的一个子集。
4.数据结构:带有某种结构的数据元素的集合。
5.数据结构的4种基本类型:(1)集合(2)线性结构(3)树形结构(4)图状结构或网状结构6.数据的物理结构(又称存储结构):数据结构在计算机中的表示(又称映像)7.在计算机中,表示信息最小单位是二进制数的一位叫做(位)8.数据元素之间的关系在计算机中的表示方法有:(1)顺序映像(2)非顺序映像9.线性结构的特点:在数据元素的非空有限集合中(1)存在唯一的一个被称作“第一个”的数据元素(2)存在唯一的一个被称作“最后一个”的数据元素(3)除第一个外,集合中的每个元素均只有一个前驱;(4)除最后一个外,集合中每个数据元素均只有一个后继10.线性表的顺序表示用一组地址连续的存储单元依次存储线性表的数据元素。
11.线性表的第i个元素的存储位置为LOC(ai)=LOC(a1)+(i-1)*L12.队列:先进先出。
它只允许在表的一端插入,而在另一端删除元素描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。
解:头指针是指向链表中第一个结点的指针。
首元结点是指链表中存储第一个数据元素的结点。
头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的操作。
它可以对空表、非空表以及首元结点的操作进行统一处理。
2.2 填空题。
解:(1) 在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与元素在表中的位置有关。
(2) 顺序表中逻辑上相邻的元素的物理位置必定紧邻。
单链表中逻辑上相邻的元素的物理位置不一定紧邻。
(3) 在单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的链域的值指示。
(4) 在单链表中设置头结点的作用是插入和删除首元结点时不用进行特殊处理。
完整版常用的计算机科学公式大全在这个信息化时代,计算机科学已经成为了一门重要的学科,涵盖了众多的理论和应用知识。
而作为计算机科学的基础,各种计算机科学公式无疑是我们学习和工作中必不可少的工具。
本文将为您介绍一些常用的计算机科学公式,帮助您更好地理解和应用这些公式。
一、数据结构与算法公式1. 算法时间复杂度公式:在算法分析中,我们经常需要计算算法的时间复杂度。
其中,最常用的时间复杂度公式包括大O、大Ω和大θ符号。
它们的计算方法如下:- 大O符号:表示算法的最坏时间复杂度,表示算法的上界,即在最坏情况下算法的时间消耗。
例如,O(1)表示常数时间复杂度,O(log n)表示对数时间复杂度,O(n)表示线性时间复杂度,O(n^2)表示平方时间复杂度,O(2^n)表示指数时间复杂度等等。
- 大Ω符号:表示算法的最好时间复杂度,表示算法的下界,即在最好情况下算法的时间消耗。
- 大θ符号:表示算法的平均时间复杂度,即在各种情况下算法的时间消耗的平均值。
通过计算算法的时间复杂度,我们可以评估算法的性能,并选择最合适的算法来解决问题。
2. 排序算法公式:排序算法是计算机科学中常见的算法之一,目的是将一组数据按照一定的规则进行排列。
常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。
这些排序算法都有各自的时间复杂度公式,例如快速排序的时间复杂度为O(nlog n),归并排序的时间复杂度也为O(nlog n)。
二、计算机网络公式1. TCP/IP协议公式:TCP/IP协议是互联网上最常用的网络协议,它包括传输控制协议(TCP)和网际协议(IP)两部分。
其中,TCP通过三次握手建立连接、四次挥手断开连接,而IP负责将数据包进行路由传输。
TCP/IP协议的公式可以用以下方式表示:- 带宽延迟积(BDP)= 带宽(bps) ×延迟(秒)- 带宽时延积(BDT)= 带宽(bps) ×时延(秒)- 拥塞窗口大小(cwnd)= cwnd * 2通过掌握TCP/IP协议的公式,我们可以更好地了解和优化网络传输的性能。
数据结构重点总结数据结构可真是咱们计算机相关专业的“心头宝”呢!今天就来唠唠它的重点吧。
一、数组。
数组这个东西呀,就像是住在集体宿舍的大家都有自己固定的床位(下标)。
它最大的特点就是存储在连续的内存空间里。
这就好比是一排紧挨着的小房间,每个房间只能住一个类型相同的小伙伴(元素类型相同)。
数组的查找速度那可是相当快的,只要知道了床位号(下标),一下子就能找到对应的小伙伴。
不过呢,数组的缺点就是插入和删除操作有点麻烦。
就像是在宿舍里,突然要在中间加个床位或者撤掉一个床位,那可就得把周围的小伙伴都挪一挪位置,可费劲啦。
二、链表。
链表就和数组不太一样喽。
链表就像是一群手拉手的小朋友,每个小朋友(节点)除了自己有东西(数据域),还拉着旁边小朋友的手(指针域)。
链表分为单链表、双链表和循环链表。
单链表就只有一只手拉住下一个小朋友,双链表呢就有两只手,一只拉前面的小朋友,一只拉后面的小朋友,这样就可以双向走动啦。
循环链表就更有趣了,最后一个小朋友拉着第一个小朋友的手,形成了一个圈。
链表的插入和删除就比较轻松啦,就像小朋友们手拉手的队伍里,要加入或者离开一个小朋友,只要松开和拉住相应的手就行,不需要挪动其他小朋友的位置。
但是链表查找起来就没有数组那么方便了,得一个一个顺着找下去,就像在小朋友队伍里找人得一个一个看过去一样。
三、栈。
栈这个概念就像是一摞盘子。
只能从最上面(栈顶)放盘子(入栈)或者拿盘子(出栈),下面的盘子被压着就动不了啦。
这就是栈的后进先出原则。
比如说在函数调用的时候,就会用到栈。
当一个函数调用另一个函数的时候,就把当前函数的一些信息像盘子一样压到栈里,等被调用的函数执行完了,再从栈顶把之前压进去的信息拿出来,这样就能回到原来函数的状态继续执行了。
四、队列。
队列就像在食堂排队打饭的队伍一样。
大家按照先来后到的顺序排队,从队尾加入(入队),从队首离开(出队),这就是先进先出的原则。
在很多场景下都会用到队列呢,比如计算机处理任务的时候,按照任务到达的顺序来处理,就可以用队列来实现。
数据结构知识点归纳数据结构知识点归纳1-线性数据结构1-1 数组1-2 链表1-2-1 单向链表1-2-2 双向链表1-2-3 循环链表1-3 栈1-4 队列2-非线性数据结构2-1 树2-1-1 二叉树2-1-2 平衡二叉树2-1-3 B树2-1-4 红黑树2-2 图2-2-1 有向图2-2-2 无向图2-3 堆2-4 散列表2-5 图的搜索算法2-5-1 深度优先搜索(DFS) 2-5-2 广度优先搜索(BFS)3-排序算法3-1 冒泡排序3-2 插入排序3-3 选择排序3-4 快速排序3-5 归并排序3-6 堆排序4-查找算法4-1 顺序查找4-2 二分查找4-3 哈希查找4-4 平衡二叉树查找5-图算法5-1 最短路径算法5-2 最小树算法5-3 拓扑排序算法5-4 关键路径算法附件:本文档所涉及附件●数据结构实现代码示例●图相关的示意图法律名词及注释:●数据结构:指数据的组织、管理和存储方式的一种技术●数组:一种线性数据结构,按照连续的内存地质存储同一类型的数据●链表:一种线性数据结构,由节点组成,每个节点包含数据和指向下一个节点的指针●栈:一种特殊的线性数据结构,只能在一端进行插入和删除操作的数据结构●队列:一种特殊的线性数据结构,遵循先进先出(FIFO)的原则●树:一种非线性数据结构,由节点组成,每个节点可以连接多个子节点●图:一种非线性数据结构,由顶点和边组成,顶点表示数据,边表示数据之间的关系●排序算法:一种将数据按照某个规则进行排列的算法●查找算法:一种在数据集中找到目标元素的算法●最短路径算法:一种寻找图的两个顶点之间最短路径的算法●最小树算法:一种寻找连接图中所有顶点的最小总权值的树的算法●拓扑排序算法:一种对有向无环图进行排序的算法●关键路径算法:一种查找项目中关键路径的算法。
第一章数据结构概念——数据结构,数据元素,数据项,数据类型,抽象数据类型,算法,等。
数据结构定义——指互相有关联的数据元素的集合,用D_S=( D, S ) 或S=( D, R) 表示。
数据结构内容——数据的逻辑结构、存储结构和运算算法效率指标——时间效率(时间复杂度)和空间效率(空间复杂度)总结:数据的逻辑结构和存储结构数据的逻辑结构是数据的机外表示,数据的存储结构是数据的机内表示。
(2) 一种数据的逻辑结构可以用多种存储结构来存储。
(3) 数据结构的基本操作是定义(存在)于逻辑结构,计算机程序设计过程中实现于存储结构。
(4) 采用不同的存储结构,其数据处理的效率往往是不同的。
数据结构?有限个同构数据元素的集合,存在着一定的结构关系,可进行一定的运算。
算法--是对特定问题求解步骤的一种描述,是指令的有限序列。
算法有5个基本特性:有穷性、确定性、可行性、输入和输出第二章1. 数据的逻辑结构是指数据元素之间的逻辑关系,是用户按使用需要建立的。
对2. 线性表的逻辑结构定义是唯一的,不依赖于计算机。
对3. 线性结构反映结点间的逻辑关系是一对一的。
对4. 一维向量是线性表,但二维或N维数组不是。
错5. “同一数据逻辑结构中的所有数据元素都具有相同的 特性”是指数据元素所包含的数据项的个数都相等。
错 插入概率p(i)=1/(n+1) ,删除概率q(i)=1/n插入操作时间效率(平均移动次数)2)1(11)1(1111ni n n i n p E n i n i i is =+-+=+-=∑∑+=+=删除操作时间效率(平均移动次数)21)(1)(11-=-=-=∑∑==n i n n i n q E ni n i i dl 线性表顺序存储结构特点:逻辑关系上相邻的两个元素在物理存储位置上也相邻; 优点:可以随机存取表中任一元素;无需为表示表中元素 之间的逻辑关系而增加额外的存储空间;缺点:在插入、删除某一元素时,需要移动大量元素;表的容量难以确定,表的容量难以扩充。
数据结构知识点全面总结_精华版数据结构是计算机科学中的重要概念,它涉及到如何有效地存储和组织数据,以便于程序的操作和管理。
在本文中,我将全面总结数据结构的核心知识点,以帮助读者深入理解和掌握这一领域的基础概念和算法。
一、线性结构1. 数组(Array)数组是一种线性结构,它由相同类型的元素组成,通过索引访问。
数组的特点是随机访问快,但插入和删除操作较慢。
2. 链表(LinkedList)链表由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
链表的特点是插入和删除操作快,但访问元素需要遍历整个链表。
3. 栈(Stack)栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。
栈的应用场景包括表达式求值、函数调用和递归等。
4. 队列(Queue)队列是一种先进先出(FIFO)的数据结构,只允许在队尾插入元素,在队头删除元素。
队列的应用场景包括任务调度和缓冲区管理等。
二、树形结构1. 二叉树(Binary Tree)二叉树是一种每个节点最多只有两个子节点的树形结构,它可以为空树。
二叉树的遍历方式包括前序、中序和后序遍历。
2. 堆(Heap)堆是一种完全二叉树,其中每个节点的值都大于等于(或小于等于)其子节点的值。
堆常用于实现优先队列和排序算法。
3. 平衡二叉树(Balanced Binary Tree)平衡二叉树是一种高度平衡的二叉树,它的左右子树的高度差不超过1。
平衡二叉树的例子包括AVL树和红黑树。
4. B树(B-Tree)B树是一种多路搜索树,它在一个节点中可以存储多个元素。
B树常用于数据库索引和文件系统等。
三、图形结构1. 图(Graph)图由节点和边组成,节点表示数据元素,边表示节点之间的关系。
图分为有向图和无向图,常用的表示方式有邻接矩阵和邻接表。
2. 深度优先搜索(DFS)深度优先搜索是一种用于图的遍历算法,它从起始节点开始,沿着一条路径尽可能深入,直到不能继续为止,然后回溯到前一个节点继续搜索。
计算机常用公式计算机常用公式在计算机科学和工程领域中起着至关重要的作用。
这些公式帮助我们解决各种计算和问题。
在本文中,我们将讨论一些常见的计算机公式,并详细介绍其应用。
1. 数据结构和算法公式1.1 大O表示法(时间复杂度和空间复杂度)大O表示法是分析算法效率的常用方法之一。
它表示算法的时间复杂度或空间复杂度随输入规模增长的趋势。
常见的时间复杂度有O(1)、O(log n)、O(n)、O(n log n)和O(n^2)等。
1.2 平均时间复杂度平均时间复杂度是指算法在所有输入情况下执行的平均操作次数。
通常通过概率分析来计算。
1.3 递归关系式递归关系式用于描述递归算法的性能。
它包含一个或多个递归调用,并定义了问题的规模和递归终止条件。
2. 数据库相关公式2.1 关系数据库范式关系数据库范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等。
这些范式用于设计高效和良好结构化的关系数据库,减少数据冗余和更新异常。
2.2 数据库查询优化公式数据库查询优化公式用于评估查询的执行效率。
其中对查询的约束条件、索引使用、关联表的选择等进行定量化分析。
3. 网络通信公式3.1 带宽、吞吐量和延迟的关系带宽、吞吐量和延迟是描述网络性能的重要指标。
它们之间的关系可用公式表示,帮助优化网络的传输效率。
3.2 传输速率计算传输速率是指单位时间内传输的数据量。
通过计算数据量和传输时间,可以得到传输速率。
3.3 网络时延公式网络时延包括传输时延、排队时延、处理时延和传播时延。
这些时延的计算可以帮助我们评估网络的性能。
4. 图像处理公式4.1 图像压缩率公式图像压缩率用于评估压缩算法的效果。
它表示压缩之后的图像与原始图像的差异程度。
4.2 图像质量评估公式图像质量评估公式用于量化图像质量。
这些公式可以测量图像的清晰度、对比度、饱和度等指标。
5. 密码学公式5.1 对称加密算法中的密钥长度与安全性对称加密算法中,密钥长度与算法的安全性密切相关。
数据结构公式总结好嘞,以下是为您生成的关于“数据结构公式总结”的文章:在咱们学习数据结构的这个大“旅程”中,那公式可真是像一颗颗闪闪发光的宝石,镶嵌在知识的皇冠上。
今儿个,我就来给大伙好好总结总结这些宝贝公式。
先来说说链表,这就好比是一串糖葫芦,每个山楂(节点)都有自己的“芯”(数据),还有一根竹签(指针)把它们串起来。
在单向链表中,要找第 n 个节点,那公式就是:从头节点开始,顺着指针走 n -1 步。
我记得有一次,老师让我们在课堂上模拟链表的操作。
我当时就特别紧张,生怕自己出错。
我紧紧盯着黑板上画的那些节点和指针,心里默默计算着步数,眼睛都不敢眨一下。
等我终于成功找到指定的节点时,那种成就感,简直爆棚!再说说栈,这就像一个只能从一端进出的筒子。
入栈和出栈的操作那也是有规律可循的。
栈的最大容量有限,要是满了还往里塞,那就会“爆仓”。
队列呢,就像是在银行排队办业务,先来的先办,后来的排队等着。
循环队列中判断队空和队满的公式可得记牢了。
二叉树也是个重要的家伙。
计算二叉树的深度、节点数,都有对应的公式。
就像我之前参加编程比赛,遇到一个关于二叉树节点计算的问题。
我一开始没弄明白公式,急得满头大汗。
后来静下心来,仔细回忆老师讲的知识点,终于把公式用对了,顺利解决了问题。
还有哈希表,通过哈希函数来确定元素的存储位置。
哈希冲突解决的方法和相关公式,也是不能马虎的。
总之,数据结构的这些公式就像是我们手中的工具,用好了就能在编程的世界里如鱼得水。
但要记住,光记住公式可不行,还得多多实践,多敲代码,多做练习题,才能真正掌握它们的精髓。
希望大家在学习数据结构的道路上,都能把这些公式运用自如,让它们成为我们攻克难题的利器!加油吧!。
1.O(1)、O(log2n)、O(n)、O(nlog2n)、O(n2) O(n3)、O(n k)、O(2n)。
2.在顺序表中第i个位置插入一个结点的移动次数为n-i+1,插入平均移动n/2次,
删除顺序表第i个结点移动次数为n-i,平均移动(n-1)/2次。
3.定义变量p=(LinkList)malloc(sizeof(ListNode))或p=(LinkNode*)malloc(sizeof(ListNode))
4.单循环链表判断空:head= =head->next
5.共享向量空间判断满top1=top2-1
6.入队EnQueue,出队DeQueue,front=rear空队列,循环队列克服假上溢
7.循环队列判断队满(rear+1)%m=front,循环队列指针移动方向顺时针。
8.链队列判空:Q->front=Q->rear=NULL
9.求串长strlen,串复制strcpy(to,from),联接strcat(to,from),串比较strcmp(s1大就大于s1小就小于,
小写字母>大写字母),字符定位strchr
10.串的子串定位(模式匹配)下标从0开始,最坏情况下时间复杂度比较次数O((n-m+1)m)
11.二维数组下标为0公式:行优先LOC(a00)+[i*n+j]*d,列优先LOC(a00)+[j*m+i]*d
12.三维数组下标为0公式:三维数组A mnp按行优先LOC(a ijk)=LOC(a000)+[i*n*p+j*p+k]*d
13.对称矩阵一共有n(n+1)/2个元素,存储位置k=I*(I+1)/2+J(I=max(i,j),J=min(i,j))下标0开始
14.上三角矩阵:k=i*(2n-i+1)+j-i,下三角矩阵:k=i*(i+1)/2+j。
上三角i>j下三角i<j常数n*(n+1)/2
15.对角矩阵:若︱i-j︱>(k-1)/2,则元素a ij=0
16.三元组表组成:i(行)j(列)v(值),转置时间复杂度O(m*n),带行表的三元组表是一种顺序存储结构。
17.广义表的深度是指表展开后所含括号的层数。
分纯表(限制了共享和递归)、再入表(允许结点共享)、递归表
18.树可以有一个前驱,多个后继。
一个结点拥有的子树称为该结点的度。
一棵树的度是指该树中结点最大的度数,
度为零的结点称为叶子,树之间连接称路径,树中结点的最大层数称为树的高度或深度。
19.二叉树第i层上的结点数目最多为2i-1,深度为k的二叉树至多有2K-1个结点。
终端结点的个数为n0,度为2
的结点数为n2,则n0=n2+1。
一棵深度为k且有2k-1个结点的二叉树称满二叉树。
具有n个结点的完全二叉树的深度为⌊lgn⌋+1 或⌈lg(n+1)⌉
20.完全二叉树中编号i>⌊n/2⌋的结点必定是叶结点。
21.二叉链表共有2n个指针域,其中n-1个用来指示结点的左右孩子,其余的n+1个指针域为空。
22.线索二叉树ltag=0左孩子,ltag=1左线索;rtag=0右孩子,rtag=1右线索。
线索查找对查找指定结点的后续
后继无帮助。
23.森林转换为二叉树:第一步:根连起来,第二步:原来和根连的左孩子继续向左,第三步:原来和根连的右孩
子向右,第四步:下一层,原来向左的继续向左,原来笔直的也向左,原来向右的还是向右。
24.树的存储结构:双亲链表表示法(结点附设一个指向其双亲的指针parent)、孩子链表表示法(每个结点设置一
个孩子链表)、孩子兄弟链表表示法(附加两个分别指向该结点最左孩子和右邻兄弟的指针域)。
25.树的遍历:前序相当于二叉树前序,后续相当于二叉树中序遍历。
26.最优二叉树:哈夫曼树WPL带权路径长度=第几层(第0层开始)*权值,累加。
哈夫曼树共有2n-1个结点,其中
n为原始结点,生产过程中产生n-1个新结点,如原始结点为4,新结点为3,哈夫曼树则有2*4-1七个结点。
27.构造哈夫曼树过程:选两个权值最小的,合并成一个新的权值,再在剩下的权值中(包括新合并的权值)再造
两个最小的,再合并,直到所有权值合并结束。
哈夫曼树编码,左边为0右边为1。
28.无向完全图有n*(n-1)/2条边,有向完全图有n(n-1)条边。
一条有向边<v i,v j>v i邻接到v j,v j邻接于v i
29.顶点数n、边数e和度数D(v i)关系边数e=1/2(入度+出度)之和
30.有向图的极大强连通子图称为G的强连通分量。
强连通图只有一个强连通分量,即是其自身。
非强连通有向图
有多个强连通分量,其中一个是其自身。
31.邻接矩阵:行代表入度,列代表出度。
邻接表:无向图:顶点表,边表。
有向图:顶点表,出边表,入边表。
32.稀疏图用邻接表,稠密图用邻接矩阵。
无向图:邻接表表示中有n个顶点和2e个边表结点,有向图,有n个顶
点和e个边表结点。
空间复杂度O(n+e)
33.深度优先遍历类似于前序遍历,从出发点v,依次经过v的每个邻接点,并将其标记为已访问过,然后依次从v
出发搜索v的每个邻接点w,若未曾访问过,则以该点出发继续深度优先遍历,用栈来实现。
广度优先遍历类似于按层次遍历,首先访问v所有邻接点w1,w2,w3,然后再访问与w1,w2,w3邻接的所有未曾访问过的顶点,用队列来实现。
34.n个顶点的连通图至少有n-1条边。
35.最小生成树:普里姆(prim)算法,克鲁斯卡尔(kruskal)算法。
最短路径:迪杰斯特拉(Dijkstra)算法。
36.拓扑排序:图中存在有向环,则不可能使顶点满足拓扑次序。
无前趋的顶点优先,无后继的顶点优先。