Java实现堆排序(大根堆) 堆排序是一种树形选择排序方法,它的特点是:在排序的过程中,将array[0,...,n-1]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲节点和孩子结点之间的内在关系,在当前无序区中选择关键字最大(最小)的元素。 1. 若array[0,...,n-1]表示一 ...
分类:
编程语言 时间:
2018-03-25 11:58:00
阅读次数:
191
题目传送门 分析:这题和另外一个题目中位数非常相似,有兴趣可以先看看,比这一题简单。首先暴力模拟还是别想了,估计30%的数据都有点悬。正解应该是用二叉堆。但是如果用一个堆当然不方便,所以建两个堆,一个大根堆,一个小根堆,每次只要出现询问操作,就把小根堆的堆顶丢进大根堆中维护,然后输出就可以了,但是要 ...
分类:
其他好文 时间:
2018-03-18 21:41:32
阅读次数:
240
篇首: 二叉堆是非常非常简单的数据结构,是入门级别的基础,但是我知道算法思想,没有去实践过(一般用到堆时直接STL的priority_queue),最近在刷刷基础且李总让我们总结算法,于是心血来潮手打一波二叉堆。(重要的事情说三遍:priority_queue是大根堆性质、priority_queu ...
分类:
其他好文 时间:
2018-03-10 00:20:53
阅读次数:
174
Treap是为了解决BST(二叉查找树)退化成链的问题 Tree=tree+heap 即在BST的基础上多了一个信息:优先级 优先级就按照堆的性质维护 若是大根堆,将优先级高的转到树的上面 前提是保证BST的性质,即中序遍历不变,如图: 观察发现,前一个图的a向上旋转后,中序遍历不变(当然,右图的b ...
分类:
其他好文 时间:
2018-02-23 22:24:54
阅读次数:
145
1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者。但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全毁坏。现在的情况是:T部落基地 ...
分类:
Web程序 时间:
2018-02-14 20:42:38
阅读次数:
209
Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点。每个点有一个权值v_i。 你需要将这棵树转化成一个大根堆。确切地说,你需要选择尽可能多的节点,满足大根堆的性质:对于任意两个点i,j,如果i在树上是j的祖先,那么v_i v_j。 请计算可选的最多的点数,注意这些 ...
分类:
其他好文 时间:
2018-02-11 00:08:18
阅读次数:
161
题目:http://poj.org/problem?id=3784 将较小的数放入大根堆,较大的数放入小根堆,控制较小数堆大小比较大数堆小1,则较大数堆堆顶即为中位数。 代码如下: ...
分类:
其他好文 时间:
2018-02-11 00:06:54
阅读次数:
180
知识点总结报告 知识点: 归并排序 (原理)归并排序是多次将两个或两个以上的有序表合并成一个新的有序表。最简单的归并是直接将两个有序的子表合并成一个有序的表,即二路归并。 二路归并排序基本思路是将R[0..n-1]成是n个长度为1的有序序列,然后进行两两归并,得到|¯n/2¯|个长度为2(最后一个有 ...
分类:
编程语言 时间:
2018-01-28 15:35:13
阅读次数:
150
一、定义 ①堆通常是可被视为完全二叉树的数组。 ②堆中任意节点的数值总是大于或等于其左右子节点,为大根堆。 ③堆中任意节点的数值总是小于或等于其左右子节点,为小根堆。 二、存储 对于任意节点T[i] ①若其父节点存在,为T[(i - 1) / 2] ②若其左兄弟节点存在,为T[i - 1] ③若其右 ...
分类:
编程语言 时间:
2018-01-23 13:05:35
阅读次数:
198
大根堆 1 priority_queue<int,vector<int>,less<int> > que; 小根堆 1 priority_queue<int,vector<int>,greater<int> >que; 结构体内重载 以重载小于号为例。。 ...
分类:
其他好文 时间:
2018-01-21 01:08:30
阅读次数:
164