![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 74
。
samarua
while "live" : print("Loli")
展开
-
【数据结构】红黑树(R-B Tree)
定义红黑树(Red-Black Tree)是一棵含有红黑结点、能够自平衡的的二叉排序树。它满足如下定义:1)每个结点或为黑色,或为红色2)根结点是黑色3)每个叶子结点是黑色,注意这里的叶子结点是指NIL结点4)一个红结点的两个子结点必为黑色,即不存在连续的红结点5)任一结点到每个叶子结点的路径都包含相同数量的黑结点,即对于黑结点平衡 红黑树的查找红黑树是一棵不严格的平衡树,但它是一棵严格的排序树/搜索树。因此,查找操作的时间复杂度自然是O(logn)。&nbs原创 2021-06-13 08:43:06 · 334 阅读 · 5 评论 -
【数据结构】二叉平衡树(AVL)
定义二叉平衡树(Balanced Binary Tree)又被称为AVL树,它或为空树,或满足以下定义:1)二叉平衡树首先是一棵二叉搜索树;1)左右子树高度差不大于1(平衡因子的值只能为-1、0、1);2)左右子树也分别一颗二叉平衡树。 最小不平衡子树搜索树在一种极端的情况话会退化为有序链表,平衡树正是因此才应运而生。不妨思考一下,搜索树执行什么操作时会变得不平衡呢(左右子树高度差大于1)?没错,在 插入结点 和 删除结点 时都会导致树变得不平衡。这时,便需要我们对原创 2021-06-13 08:37:04 · 530 阅读 · 1 评论 -
【数据结构】二叉搜索树(BST)
简介二叉搜索树(BST)又称二叉查找树、二叉排序树,它或为一棵空树,或满足以下定义:❶ 若左子树非空,则左子树上的所有结点的值都小于根结点的值❷ 若右子树非空,则右子树上的所有结点的值都大于根结点的值❸ 左、右子树也分别是一棵二叉搜索树❹ 中序遍历的结果是一个递增的有序序列(重要性质) 二叉搜索树实现的功能有:① 节点定义② 插入结点③ 构建二叉树④ 中序遍历⑤ 查找⑥ 返回整棵树的最大最小值⑦ 返回某个结点的直接前驱/直接后继⑧ 删除结点(难点) &n原创 2021-06-13 08:28:05 · 412 阅读 · 0 评论 -
【数据结构】哈夫曼树与哈夫曼编码
哈夫曼树的定义我们给树的结点赋予一个表示某种意义的值,称为该结点的权;我们再定义从根结点到某个结点需要经过的边数,与该结点的权的乘积,称为结点的带权路径长度;所有叶子结点的带权路径长度之和,称为树的带权路径长度,记为WPL。 下面,先来直观感受一下WPL的含义:(a) WPL = 7×2 + 5×2 + 2×2 + 4×2 = 36(b) WPL = 4×2 + 7×3 + 5×3 + 2×1 = 46(c) WPL = 7×1 + 5×2 + 2×3 + 4×3 = 35&n原创 2021-06-13 08:22:06 · 1057 阅读 · 0 评论 -
【数据结构】AOE网——关键路径
相关概念AOE网AOE网(Activity On Edge Network)用边表示活动,用顶点表示事件(活动的完成)。边是带权的,表示活动需要的时间。源点与汇点源点:入度为0的点,表示一个工程的开始。汇点:出度为0的点,表示一个工程的结束。关键活动与关键路径在AOE网中,从源点到汇点最长的路径称为关键路径,在关键路径上的活动称为关键活动。因为AOE网中的活动是可以并行进行的,所以整个工程的时间开销,其实是最长路径的时间开销。即关键路径制约整个工程的工期。 >_<原创 2021-06-02 10:29:22 · 28017 阅读 · 10 评论 -
【数据结构】AOV网——拓扑排序
相关概念AOV网AOV网(Activity On Vertex Network)用顶点表示活动。边是无权的,仅仅用来表示前驱与后继关系。前驱与后继有向边的起点称为终点的前驱,有向边的终点称为起点的后继。拓扑排序的关注点在于前驱——一个结点的前驱结点全部被访问过后,该结点才能被访问。拓扑序列对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。 >_< 看个图理解一原创 2021-06-02 10:23:53 · 1504 阅读 · 0 评论 -
【数据结构】最短路径问题(BFS/DFS算法,Dijkstra算法,Floyd算法,Bellman-Ford算法)
BFS算法——严格层序的BFS核心思路原生广度优先遍历的特点本来就是由源点向外发散,我们通过对队列大小的暂存,可以实现严格的按层遍历,层数即路径长度。适用场景因为本算法将层数看作路径长度,所以这要求图的所有边要么无权、要么权值相等。单源的;可以求到某一个点的最短路径,也可以求到所有点的最短路径。代码实现private void DFS(boolean[][] graph, int source) { int len = graph.length; int[] dist = new int原创 2021-06-01 11:24:10 · 2927 阅读 · 0 评论 -
【数据结构】最小生成树问题(Prim算法和Kruskal算法)
相关概念连通图与它的生成树连通图的生成树是包含图中全部顶点的一个极小连通子图。若图的顶点数为n,则它的生成树含有n-1条边。一个连通图可能拥有多个生成树。最小生成树(Minimum-Spanning-Tree,MST)对于一个带权连通无向图,它的生成树中边权之和最小的那一个,称为最小生成树。一个连通图的最小生成树是不唯一的。边权值之和唯一,但树的形状不唯一。 接下来介绍的Prim算法和Kruskal算法,都是基于贪心算法的。 Prim算法核心思路此算法原创 2021-06-01 11:19:48 · 2428 阅读 · 4 评论 -
【数据结构】排序(应用场景分析)
复杂度与稳定性时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度稳定性选择排序O(n²)O(n²)O(n²)O(1)不稳定插入排序O(n²)O(n²)O(n)O(1)稳定冒泡排序O(n²)O(n²)O(n)O(1)稳定希尔排序O(n)~O(n²)O(1)不稳定快速排序O(nlog2n)O(n²)O(nlog2n)O(log2n)不稳定归并排序O(nlog2n)O(nlog2n)O原创 2021-05-28 17:47:27 · 590 阅读 · 0 评论 -
【数据结构】排序(Java代码实现)
选择排序每趟从未排序的序列中选出最小值,放到已排序序列的末尾。private void selectSort(int[] arr) { int len = arr.length; for (int i = 0; i < len - 1; i++) { // 每一趟从未排序的序列中选出最小值的下标 int minIndex = i; for (int j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) {原创 2021-05-28 16:52:39 · 152 阅读 · 0 评论 -
【数据结构】B+树
B+树的定义原创 2021-05-21 16:47:05 · 4423 阅读 · 2 评论 -
【数据结构】B树
B树的定义B树也叫B-树,是一棵多路平衡查找树。B即Balance。下面,我们看着图,先搞清楚它的定义:一个结点的最大孩子个数称为树的阶,通常用m表示。一棵m阶B树要么是空树,要么满足以下定义:(1)一个结点的结构是:(P0,K1,P1,K2,…,Kn,Pn),其中P为指向子树的指针,K为关键字(2)对于根结点,如果它本身不是叶子结点,则至少拥有2棵子树(3)对于除根结点之外的所有结点,至少拥有 m/2 棵子树,即至少拥有 m/2-1 个关键字(4)B树的关键字是有序的,它具有两层含义,一来原创 2021-05-21 16:35:24 · 4502 阅读 · 0 评论