优先队列包括二叉堆、d-堆、左式堆、斜堆、二项队列等
1、二叉堆
堆是一棵被完全填满的二叉树,有可能例外的是在底层,底层上的元素从左到右填入。这样的树称为完全二叉树。
堆序的性质:在一个堆中,对于每一个节点X,X的父亲的关键字小于(或等于)X中的关键字,根节点除外(它没有父节点)。完全二叉树可以用数组实现。...
分类:
其他好文 时间:
2014-11-30 20:10:24
阅读次数:
205
树-堆结构练习——合并果子之哈夫曼树Time Limit: 1000MS Memory limit: 65536K题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重...
分类:
其他好文 时间:
2014-11-23 15:46:39
阅读次数:
256
#include
#include
#define N 30000
using namespace std;
int a[N+1],o=0;
typedef struct
{
int weight;
int parent,lchild,rchild;
}htnode;
typedef struct
{
int weight;
}htcode;
void huffmanselect(htno...
分类:
其他好文 时间:
2014-11-04 19:42:45
阅读次数:
397
认识堆是从堆排序开始的
二叉堆是完全二叉树或者是近似完全二叉树,堆存储在数组中:
根结点下标为0时,下标为n的元素的子结点下标分别为2*n+1,2*n+2,其父结点下标为(n-1)/2
二叉堆的特性:
1、父结点的键值总是>=(
2、每个结点的左右子树都是二叉堆
当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。
当父结点的键值总是小于或...
分类:
编程语言 时间:
2014-11-04 17:35:16
阅读次数:
262
首先来看完全二叉树的定义:
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。而将一维数组视为完全二叉树书得到的即为堆。
堆效率极高,像十分常用的排序算法、Dijkstra算法、Prim算法等都要用堆才能优化,几乎每次都要考到的二叉排序树的效率也要借助平衡性来提高,而平衡性基于完全二叉树...
分类:
其他好文 时间:
2014-10-13 20:50:17
阅读次数:
150
题目大意:给定n个数,求这n个数两两异或的值中的前k小
首先我们对所有数字建立二进制Trie树,可以利用Trie树上的size域查询出一个数与其它数异或值的第k小
然后我们维护一个堆,将所有数与其它异或值的第2小加入堆(第一小是自己异或自己,不在题目要求范围内),当取出一个数异或值的第k小后,将第k+1小加入堆
一个异或值会被两个数分别取出一次,所以取出奇数次时输出,取2*k次即可
时间复...
分类:
其他好文 时间:
2014-10-11 15:27:51
阅读次数:
190
题目大意:给定一个序列,找到k个长度在[l,r]之间的序列,使得和最大
暴力O(n^2logn),肯定过不去
看到这题的第一眼我OTZ了一下午。。。后来研究了很久别人的题解才弄明白怎么回事。。。蒟蒻果然不能理解大神的思路啊0.0
首先维护前缀和,那么以第i个元素结尾的和最大的序列自然就是sum[i]-min{sum[j]}(i-r
然后我们维护一个大根堆,每取走一个以i为结尾的元素,加入s...
分类:
其他好文 时间:
2014-09-30 14:55:09
阅读次数:
139
maxheap.h
#include
template
class MaxHeap
{
public:
MaxHeap(int num);
MaxHeap(T Arr[], int arrsize, int totalsize);
bool insert(const T&);
bool del(T&);
void show() const;
void showonlevel()...
分类:
其他好文 时间:
2014-09-13 21:32:55
阅读次数:
300
树-堆结构练习——合并果子之哈夫曼树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。
每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,...
分类:
其他好文 时间:
2014-08-29 13:06:57
阅读次数:
203
堆排序1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2]即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。堆分为大顶堆和小顶堆,满足Key[..
分类:
其他好文 时间:
2014-07-30 15:05:24
阅读次数:
172