转载请注明出处 [ametake版权所有]http://blog.csdn.net/ametake
先放上题目,出自USACO
题目描述 Description
农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(1
农夫John很狡猾。他知道他可以训练这些奶牛,让它们在听到铃声时去一个特定的牧场。他打算将糖放在那里然后下午发出铃声,以至他...
分类:
其他好文 时间:
2015-05-23 11:34:54
阅读次数:
261
给出一个整数数组,堆化操作就是把它变成一个最小堆数组。
对于堆数组A,A[0]是堆的根,并对于每个A[i],A [i * 2 + 1]是A[i]的左儿子并且A[i * 2 + 2]是A[i]的右儿子。
样例
给出 [3,2,1,4,5],返回[1,2,3,4,5] 或者任何一个合法的堆数组
挑战
O(n)的时间复杂度完成堆化
说明
什么是堆...
分类:
其他好文 时间:
2015-05-18 20:51:16
阅读次数:
288
问题描述通常在刷题的时候,会遇到最大堆、最小堆的问题,这个时候如果自己去实现一个也是OK的,但是通常时间不太够,那么如何处理?这时,就可以借助C++ STL的priority_queue。具体分析
需要注意的是,C++ STL默认的priority_queue是将优先级最大的放在队列最前面,也即是最大堆。那么如何实现最小堆呢?
假设有如下一个struct:struct Node {
int...
分类:
编程语言 时间:
2015-05-14 22:06:43
阅读次数:
317
本文记录了使用C++模板实现了堆的基本操作,对于其他一些有用操作如IncreaseKey和DecreaseKey等则没有实现,这是因为使用模板把最小堆和最大堆揉在一起,对Key的增减我还没有找到比较好的处理方式,而现在写这个堆数据结构主要是因为在Hoffman树算法需要,基本操作已经够用了。
堆是一棵完全二叉树,所谓完全二叉树就是一棵从上倒下,从左到右依次填满每一个位置的二叉树,除了最后一层节点没...
分类:
其他好文 时间:
2015-05-14 16:35:04
阅读次数:
126
最小堆排序先用一个筛的方法形成一个最小堆那什么是最小堆呢?也就是每一个父节点都比它的左右儿子大 如何筛?从最后一个非叶节点开始(也就是最后一个有儿子的节点),先比较它的左右儿子大小,和最大的交换。最小堆形成后 根节点是最大的把根节点和最后一个节点交换 那么最后一个节点就是排完序的最大值 存到数组中然...
分类:
其他好文 时间:
2015-05-13 21:17:28
阅读次数:
111
堆排序是利用堆积树这种数据结构设计的一种算法。
要学习堆排序,我们首先要了解什么是二叉堆:
二叉堆是完全二叉树这这是近似完全二叉树。二叉堆可分为两种形式:最大堆和最小堆。
最大堆的性质是指某个结点的值至多与起父结点的值一样大,最小堆的性质就是指某个节点的值都大于其父结点的值。下图是一个最大堆和一个最小堆。
在堆排序中我们一般使用最大堆。我们要进行堆排序,首先需要把我们的数组转化成一个最大堆...
分类:
编程语言 时间:
2015-05-10 10:01:00
阅读次数:
170
堆排序是利用堆积树这种数据结构设计的一种算法。
要学习堆排序,我们首先要了解什么是二叉堆:
二叉堆是完全二叉树这这是近似完全二叉树。二叉堆可分为两种形式:最大堆和最小堆。
最大堆的性质是指某个结点的值至多与起父结点的值一样大,最小堆的性质就是指某个节点的值都大于其父结点的值。下图是一个最大堆和一个最小堆。
在堆排序中我们一般使用最大堆。我们要进行堆排序,首先需要把我们的数组转化成一...
分类:
编程语言 时间:
2015-05-10 09:44:24
阅读次数:
133
//你知道为什么快速排序的时间复杂度是nlgn吗?
//我们将数组当作完全二叉数来看的话,放在小堆中,
//每个节点排序需要o(h),也就是h次,h是完全相应节点的二叉树高度,
//N为总共节点数,排好一个节点需要o(h)次,那么排好N个节点呢?下面:
//且2^h=N-1(完全二叉树性质);
//—>h=log2(N);当有N个节点需要排序是就是N*lg(N),
//得到快速排序的时...
分类:
编程语言 时间:
2015-05-09 10:22:04
阅读次数:
163
优先队列我们在之前讲过的《堆的基础知识》和《堆排序》之后,我们来讲讲最大堆和最小堆的具体应用优先队列!优先队列基础知识我们来看看这样的场景,给定你一组数据,要你在这组数据里面找到最大的那个数据,你要怎么做?
你可能会说直接遍历一次就行啦,运行时间也就O(n)O(n),但是如果要求你在这堆数据里面找到最大的,然后删除,再在剩下的元素里面找到最大的,那还是要遍历一般所有数据。那有没有其他快速的方法呢?...
分类:
其他好文 时间:
2015-05-07 22:12:26
阅读次数:
204
1.堆的概念
参考:http://www.cnblogs.com/luchen927/archive/2012/03/08/2381446.html
堆(heap),一种数据结构,堆分为最大堆和最小堆,其实就是完全二叉树。最大堆要求节点的元素都要大于其孩子,最小堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求,其实很好理解。有了上面的定义,我们可以得知,处于最大堆的根节点的元...
分类:
编程语言 时间:
2015-05-07 12:30:53
阅读次数:
137