二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。 二叉堆有两种:最大堆和最小堆。 最大堆:父结点的键值总是大于或等于任何一个子节点的键值。 最小堆:父结点的键值总是小于或等于任何一个子节点的键值。 下面举例子来看看一个二叉堆插入数据的例子(最小堆,即queue里面的 ...
分类:
编程语言 时间:
2020-05-21 14:39:00
阅读次数:
49
本质上是一种完全二叉树 分为两个类型: 1.最大堆: 所有父节点的值都大于左右孩子节点的值 2.最小堆:所有父节点的值都小于左右孩子节点的值 二叉堆根节点叫堆顶 1.二叉堆的自我调整 自我调整就是把不符合堆性质的完全二叉树调整成一个堆。 1.插入节点(最小堆举例) 插入时insert到最后一个节点 ...
分类:
其他好文 时间:
2020-04-24 18:44:14
阅读次数:
51
如何手写一个堆? 1. 插入一个数 2. 求集合当中的最小值 3. 删除最小值 4. 删除任意一个元素 5. 修改任意一个元素 堆的基本结构。 性质: 堆是一颗完全二叉树。按照序号来的 除了最后一层,其他都是满的 每一个点都是小于等于儿子 存储 用一维数组来存 x的左儿子是2x,x的右儿子是2x+1 ...
分类:
编程语言 时间:
2020-03-15 11:30:27
阅读次数:
60
什么是堆 堆是一种特殊的树,他满足一下两点要求 堆是一个完全二叉树 堆中每一个节点的值都必须大于等于(或小于等于)其子树中的值 最大堆 最大堆和最小堆是二查堆的两种形式,最大堆和最小堆很相似,所以本文只实现最大堆以及堆排序 最大堆:根节点的键值是所有结点键值中的最大者,且每个结点的值都比孩子结点大 ...
分类:
其他好文 时间:
2019-06-06 23:04:52
阅读次数:
217
此随笔以最小堆为例,记录一些关于堆的知识点,例如建堆、插入、取min、堆排序... 用结构体把堆封装起来,面向对象? 有时间一定要把传引用,面向对象这些知识点系统的学习一遍 ...
分类:
其他好文 时间:
2019-04-21 14:26:50
阅读次数:
130
构建堆的过程,O(N) 从下面的元素向下沉 堆排序,每次交换堆顶的元素和结尾的元素,调整堆,每次O(logN) 堆插入,push_heap每次将元素放在结尾,将结尾元素向上查找更大或更小的元素下沉,每次O(logN) 堆删除,pop_heap,删除堆顶元素,将堆顶元素放在结尾等待删除,将剩下的元素重 ...
分类:
其他好文 时间:
2018-08-06 19:49:12
阅读次数:
484
哈夫曼树处理这样的一种问题: 给出一棵n个叶子的k叉树,每个叶子有一个权值wi,要求最小化∑wi*di di表示,第i个叶子节点到根节点的距离。(一般是边数) 处理方法比较固定。 贪心的思路:我们让权值较大的叶子节点 的深度越小越好。 建立一个小根堆。 1.插入n个叶子的权值。 2.每次取出最小的k ...
分类:
其他好文 时间:
2018-07-31 22:08:13
阅读次数:
166
建立堆 堆排序 堆内某个元素值变大(优先级提升)后调整堆 插入元素到堆尾 ...
分类:
编程语言 时间:
2018-07-02 20:23:14
阅读次数:
318
package testpackage; import java.util.Arrays; public class Heap { //建立大顶堆 public static void buildMaxHeap(int[] a) { for(int i=(a.length/2)-1;i>=0;i--... ...
分类:
编程语言 时间:
2018-05-03 22:04:38
阅读次数:
179