二叉堆可以被看作是一个数组,也可以简单的看作是一个近似的完全二叉树,二叉堆有最大堆和最小堆,分别具有堆的性质:最大堆的某个结点的值最多与其父结点一样大,最小堆则是某个结点的值最多与其父结点一样小。所以最大堆中最大的结点永远是根结点,最小堆中最小的结点永远是根节点。 既然二叉堆是一种数据结构,就有其支 ...
分类:
其他好文 时间:
2018-12-22 17:28:49
阅读次数:
187
堆是一种类似二叉树的数据结构,分为最大堆和最小堆,最大堆得定义是当前节点必须大于左右子节点,堆中所有节点都要符合这个定义。最小堆反之。这一点不同于二叉树排序。假设有数组int a[10] = {90,45,21,43,22,77,13,89,56,84},根据最大堆来初始化数组 最大堆初始化代码思路 ...
分类:
编程语言 时间:
2018-12-11 18:15:18
阅读次数:
230
单源最短路径 给定一个图,和一个源顶点src,找到从src到其它所有所有顶点的最短路径,图中可能含有负权值的边。 Dijksra的算法是一个贪婪算法,时间复杂度是O(VLogV)(使用最小堆)。但是迪杰斯特拉算法在有负权值边的图中不适用,Bellman-Ford适合这样的图。在网络路由中,该算法会被 ...
分类:
编程语言 时间:
2018-12-09 21:29:09
阅读次数:
692
TopK问题是指从大量数据(源数据)中获取最大(或最小)的K个数据。 TopK问题是指从大量数据(源数据)中获取最大(或最小)的K个数据。 TopK问题是指从大量数据(源数据)中获取最大(或最小)的K个数据。 TopK问题是指从大量数据(源数据)中获取最大(或最小)的K个数据。 TopK问题是个很常 ...
分类:
编程语言 时间:
2018-12-01 18:44:57
阅读次数:
276
STL中的set和multiset基于红黑树实现,默认排序为从小到大。 定义三个multiset实例,进行测试: 输出结果: 可以为multiset指定排序方式,以此实现类似最大堆、最小堆的功能。 比如:当前排序方式为降序,那么greaterSet.begin()所指向的值就是最大值。 可以参考《剑 ...
分类:
编程语言 时间:
2018-11-30 20:19:46
阅读次数:
354
20172316 2018 2019 1《程序设计与数据结构》第九周学习总结 教材学习内容总结 第十五章 图 图: 堆是具有两个附加属性得的一棵二叉树: 它是一棵完全树; 对每一节点,它小(大)于或等于其左孩子和右孩子。 堆的分类 :按照堆中元素排列规律将堆分为两类: 最小堆(minheap),本章 ...
分类:
其他好文 时间:
2018-11-18 22:34:35
阅读次数:
215
20172307 2018 2019 1 《程序设计与数据结构》第9周学习总结 教材学习内容总结 + 堆是一棵完全二叉树,其中的每一结点都小于或等于它的两个孩子。 + 最小堆将其最小元素存储在该二叉树的根处,且其根的两个孩子同样也是最小堆。 + addElement方法将给定的Comparable元 ...
分类:
其他好文 时间:
2018-11-18 22:33:45
阅读次数:
201
20172315 2018 2019 1 《程序设计与数据结构》第八周学习总结 教材学习内容总结 + 堆是一棵完全二叉树,其中的每一结点都小于或等于它的两个孩子。 + 一个堆也可以是最大堆(maxheap),其中的结点大于或等于它的左右孩子。 + 最小堆将其最小元素存储在该二又树的根处,且其根的两个 ...
分类:
其他好文 时间:
2018-11-11 00:03:56
阅读次数:
215
20172304 《程序设计与数据结构》第八周学习总结 教材学习内容总结 本周主要学习的内容是堆。堆是二叉树的扩展 什么是堆 堆就是具有两个附加属性的一棵二叉树 1.它是一棵完全树。 2.对每一结点,他小于或等于其左孩子和右孩子(最小堆)最大堆与最小堆相反。 堆的操作 |操作|说明| |: :|: ...
分类:
其他好文 时间:
2018-11-10 23:55:31
阅读次数:
201
20172324 2018 2019 1 《程序设计与数据结构》第八周学习总结 教材学习内容总结 堆 具有两个附加属性的二叉树: 1. 是一颗完全树 2. 对每一结点,它小于或等于其左孩子和右孩子(最小堆) 3. 最大堆的结点大于或等于它的左右孩子 4. 最小堆将其最小元素存储在该二叉树的根处,其根 ...
分类:
其他好文 时间:
2018-11-10 23:51:15
阅读次数:
180