首先我们可以发现如果错过了一个加油站,而继续往前走的时候没有油了,可以再假装之前经过加油站的时候加过油于是我们维护一个大根堆,表示错过的加油站是哪些,每当没有油的时候从堆顶取出最大值加上去即可 1 /**************************************************...
分类:
其他好文 时间:
2015-05-05 23:46:48
阅读次数:
462
1.堆排序不仅拥有与归并排序一样的时间复杂度为o(nlgn),而且空间复杂度所占秩序额外的几个元素空间,这个又有插入排序的优势。
2.堆排序分为3部分,第一部分是保持堆的性质的函数MAX_HEAPIFY函数,用于保持堆的性质:父结点的值要大于子节点。
第二部分是创建大根堆的函数,BUILD_MAX_HEAP这个函数从第一...
分类:
编程语言 时间:
2015-05-03 23:45:15
阅读次数:
210
priority_queue(queue类似)完全以底部容器为根据,再加上二叉堆(大根堆或者小根堆)的实现原理,所以其实现非常简单,缺省情况下priority_queue以vector作为底部容器。另外priority_queue缺省比较规则是less:class Compare = lessles...
分类:
其他好文 时间:
2015-04-29 16:42:42
阅读次数:
155
堆排序
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。
堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]]
>= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。
维护堆的性质
M...
分类:
其他好文 时间:
2015-04-17 11:37:45
阅读次数:
138
排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的...
分类:
编程语言 时间:
2015-04-16 21:15:41
阅读次数:
124
堆排序 1 // 将待排序的最后一个元素current插入大根堆中 2 void insert_heap(int *arr, int current, int low, int high) 3 { 4 //记录low的孩子结点中较大元素的下标,初始化为左孩子 5 int large ...
分类:
编程语言 时间:
2015-04-14 16:23:24
阅读次数:
181
1.堆排序a.堆的定义n个元素序列{k1,k2,...,kn}当且仅当满足以下关系时,称之为堆。ki=k2i且ki>=k2i+1 (大根堆)以下针对最大堆b.维护堆的性质Max-Heapify通过让A[i]的值在最大堆中"逐级下降"(A[i]的值小于其左右孩子的值时),从而使得以i为根结点的子树重新...
分类:
编程语言 时间:
2015-04-06 15:34:34
阅读次数:
218
即求连续k个数的中位数。。。我们维护两个堆,一个大根堆一个小根堆:小根堆维护的是区间前一半大的数,大根堆维护的是区间后一半小的数,且小根堆中的所有数都比大根堆内所有数大这样子中位数就是大根堆的堆顶元素 or 小根堆的堆顶元素 or 他们的平均数(貌似并没有区别QAQ)每次区间移动一位的时候,把其中的...
分类:
其他好文 时间:
2015-04-05 14:35:20
阅读次数:
135
双堆求中位数
算法描述:
1、创建两个堆(一个小根堆、一个大根堆),堆大小至少为给定数据个数的一半,向上取整;
2、假定变量mid用来保存中位数,取定第一个元素,赋值给mid,即作为初始的中位数;
3、依次遍历后面的每一个数据,如果比mid小,则插入大根堆;否则插入小根堆;
4、如果大根堆和小根堆上的数据个数相差为2,则将mid插入到元素个数较少的堆中,然后从元素个数较多的堆中删除根节点,并将跟节点赋值给mid;
5、重复步骤3和4,直到所有的数据遍历结束;
此时,mid保存了一个数,再加上两...
分类:
其他好文 时间:
2015-03-31 10:50:03
阅读次数:
140
今天自己研究了堆排序,发现个问题,你认证他就很简单你不认真就很难。用心去看任何算法都是很有魅力的,以前复习的时候感觉所有的算法都是背会的,这次复习感觉很爽所有的都是靠理解来处理;下面我就把自己简单的理解写写做个小记录方便后续巩固1.先把数据构建一个堆,这里我们选用大根堆(就是每个节点的值都不大于其父...
分类:
编程语言 时间:
2015-03-31 00:36:19
阅读次数:
164