堆分为最小堆和最大堆。最小堆指的是任意一个节点都有小于他的做儿子和右儿子。最大堆指的是任意一个节点大于打的左儿子右儿子。 最大堆的操作(堆得主要操作就是上滤和下滤) 插入:先将一个节点插入到堆得最后的位置然后上滤,如果他的父亲小于他,就把他父亲的值给他,继续循环,当退出循环的时候就是要插入的节点: ...
分类:
其他好文 时间:
2017-11-28 21:57:20
阅读次数:
206
Treap,也叫做树堆,是指有一个随机附加域满足堆的性质的二叉搜索树。 如果一棵二叉搜索树插入节点的顺序是随机的,那我们得到的二叉搜索树在大多数情况下是平衡的,期望高度是log(n). 但有些情况下我们并不能得知所有待插入节点,打乱以后再插入,这时我们需要给二叉搜索树加上一个随机附加域,并使这个随机 ...
分类:
其他好文 时间:
2017-11-27 21:30:10
阅读次数:
149
【旋转】 平衡树中的旋转是指在不改变中序遍历的前提下改变树的形态的方式。(中序遍历=排名顺序) 右旋将当前点的左节点旋上来,左旋反之。(图侵删) 原根k,新根o。 1.把k的左节点o解放出来并更新为o的右节点。 2.解放出来的o成为新根,其右孩子赋为k。 【Treap】树堆 功能:维护支持单点插入和 ...
分类:
其他好文 时间:
2017-11-27 15:12:33
阅读次数:
167
Prelude 题目传送门: "ヾ(?ω?`)o" Solution 按照题意模拟即可。 维护一个优先队列,里面装的是正在运营中的出租车,关键字是乘客的下车时间。 维护一个线段树,第$i$个位置表示第$i$个房子前面有没有停放出租车,这样在有人需要打车的时候可以快速找到离她最近的车的位置。 对每个房 ...
分类:
其他好文 时间:
2017-11-26 23:01:20
阅读次数:
187
一、二叉树 1.完全二叉树 2.满二叉树 3.平衡二叉树 4.红黑树 5.树堆 6.线索二叉树 二、堆 1.最大/最小堆 2.二项堆 3.斐波那契堆 4.左偏树 三、B树 1.B树 2.B+树 3.B*树 四、字典树 ...
分类:
其他好文 时间:
2017-11-25 14:22:30
阅读次数:
170
堆排序,顾名思义,是采用数据结构堆来进行排序的一种排序算法。 研究没有规律的堆,没有任何意义。特殊的堆有最大堆(父节点值大于等于左右字节点值),最小堆(父节点值小于等于子节点值)。一般采用最大堆来进行排序,图1为最大堆来表示一维数组。 图1 最大堆表示一维数组 2叉树堆的几点特性 1、 最后父节点索 ...
分类:
编程语言 时间:
2017-11-14 20:10:26
阅读次数:
307
const int inf = 1 n2.c; } }; int ans, ans2; void prim(){ priority_queueque; while(!que.empty()) que.pop(); memset(mm, 0, sizeof(mm)); memset(pre, 0, s... ...
分类:
其他好文 时间:
2017-11-10 18:26:17
阅读次数:
141
const int inf = 1que; for(int i = 1; i d[i]){ d[i] = edge[v][i]; que.push(node(i, d[i])); } } } } int main() { int t; int a, b, ... ...
分类:
其他好文 时间:
2017-11-09 11:54:15
阅读次数:
328
package algorithm; public class LargeHeapSort { /** * 对数组进行调整,使得arr[low]成为low-len最大的 * @param arr * @param low 当前二叉树(堆的一部分)的根 * @param len 数组的长度 */ pu... ...
分类:
编程语言 时间:
2017-11-04 13:18:49
阅读次数:
188
堆排序(HeapSort)概念堆在树中是一个完成二叉树
堆分为大顶堆和小顶堆
大顶堆:非叶子结点的值大于或等于其左右孩子结点
小顶堆:非叶子结点的值小于或等于其左右孩子结点
特征:堆的根结点的值肯定是极值堆排序的实现步骤构建完全二叉树
将此完全二叉树调整为堆
根据堆的特性,使..
分类:
编程语言 时间:
2017-10-25 23:36:26
阅读次数:
247