1K+ 次浏览
与二项堆类似,斐波那契堆是树的集合。它们松散地基于二项堆。与二项堆中是有序树不同,斐波那契堆中的树是有根的但无序的。斐波那契堆中每个节点x包含一个指向其父节点的指针p[x],以及一个指向其任意一个子节点的指针child[x]。x的子节点通过一个称为x的子列表的循环双向链表连接在一起。子列表中的每个子节点y都有指针left[y]和right[y]分别指向y的左右兄弟。如果节点y是唯一的子节点……阅读更多
3K+ 次浏览
二项堆是二项树的集合。二项树Bk是一个递归定义的有序树。二项树B0由单个节点组成。二项树Bk由两个二项树Bk-1组成,它们连接在一起。其中一个的根是另一个的左最子节点。一些二项堆如下所示:二项树的一些属性:Bk的二项树具有2k个节点。树的高度是k。在深度i处恰好有 $$\left(\begin{array}{c}k\ j\end{array}\right)$$ 个节点,对于0到k范围内的所有i。二项堆……阅读更多
在本节中,我们将看到欧拉图和哈密顿图。但在深入研究之前,首先我们必须了解图中的轨迹是什么。假设我们有一个如下所示的图:轨迹是一条路径,它是一系列边(v1, v2), (v2, v3), …, (vk - 1, vk),其中所有顶点(v1, v2, … , vk)可能不都不同,但所有边都不同。在这个例子中,一条轨迹是{(B, A), (A, C), (C, D), (D, A), (A, F)}。这是一条轨迹。但这不被认为是简单的……阅读更多
550 次浏览
图的深度优先搜索类似。但是对于有向图,我们可以找到一些类型的边。DFS算法形成一棵称为DFS树的树。有四种类型的边:树边(T) - 存在于DFS树中的边;前向边(F) - 与一组树边平行。(从较小的DFS编号到较大的DFS编号,以及较大的DFS完成编号到较小的DFS完成编号);后向边(B) - 从较大的DFS编号到较小的DFS编号,以及较小的DFS完成编号到较大的DFS完成编号;交叉边……阅读更多
2K+ 次浏览
我们知道图是一种非线性数据结构。在这种数据结构中,我们将一些值放入节点中,节点通过不同的边连接在一起。当我们可以将数据存储到图结构中时,我们也需要从图中搜索元素才能使用它们。对于图中的搜索,有两种不同的方法。广度优先搜索和深度优先搜索技术。广度优先搜索(BFS)广度优先搜索(BFS)遍历是一种算法,用于访问给定图的所有节点。在这个遍历算法中,选择一个节点……阅读更多
17K+ 次浏览
我们知道图可以分为不同的变体。它们可以是有向的或无向的,可以是加权的或非加权的。在这里,我们将看到如何在内存中表示加权图。考虑以下图:邻接矩阵表示要使用邻接矩阵形式存储加权图,我们将矩阵称为代价矩阵。这里,位置M[i, j]的每个单元格都保存从边i到j的权重。如果边不存在,则为无穷大。对于相同的节点,它将为0。0∞63∞30∞∞∞∞∞02∞∞110∞∞4∞20邻接表表示在邻接表中,每个元素……阅读更多
5K+ 次浏览
在这里,我们将看到如何从二叉堆数据结构中插入和删除元素。假设初始树如下所示:插入算法insert(heap, n, item):开始 如果堆已满,则退出 否则 n := n + 1 对于 i := n, i > 1, 在每次迭代中设置 i := i / 2,执行 如果 item
389 次浏览
堆或二叉堆是平衡二叉树数据结构的一种特例。这是一个完整的二叉树结构。所以最多到l-1层是满的,在l层,所有节点都从左边开始。这里,根节点键与其子节点进行比较并相应地排列。如果a有子节点b,则-key(a) ≥ key(b)由于父节点的值大于子节点的值,因此此属性会生成最大堆。根据这个标准,堆可以分为两种类型:最大堆和最小堆。这些分别是最大堆和最小堆的例子……阅读更多
在这里,我们将看到线程二叉树数据结构。我们知道二叉树节点最多可以有两个子节点。但是,如果它们只有一个子节点或没有子节点,则链表表示中的链接部分将保持为空。使用线程二叉树表示,我们可以通过创建一些线程来重用这些空链接。如果一个节点有一些空闲的左子节点或右子节点区域,则将用作线程。线程二叉树有两种类型。单线程树或全线程二叉树。在单线程模式下,还有另外两种变体……阅读更多
在本节中,我们将看到广义表。广义表可以定义如下:广义表L是n个元素的有限序列(n ≥ 0)。元素ei或者是原子(单个元素),或者是另一个广义表。不是原子的元素ei将是L的子列表。假设L是((A, B, C), ((D, E), F), G)。这里L有三个元素:子列表(A, B, C)、子列表((D, E), F)和原子G。子列表((D, E), F)又有两个元素:子列表(D, E)和原子F。在C++中,我们……阅读更多