最小堆算法: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 10 using namespace std; 11 12 #def...
分类:
编程语言 时间:
2014-10-29 14:40:51
阅读次数:
247
二叉堆:一般我们拿来用的就是最大堆和最小堆。最小堆:每个节点的值比它的左右子节点的值要大。代码实现如下:参考Mark Allen Weiss《数据结构和算法分析》(第二版) 1 #include 2 #include 3 4 #define MIN (1items =(Item*)ma...
分类:
其他好文 时间:
2014-10-28 23:55:06
阅读次数:
997
堆排序基本思路:根据完全二叉树,建立最大最小堆来排序时间复杂度:O(nlongn)/** * */package com;/** * @author wenb * @time 下午03:52:55 * @date 2014-10-24 */public class HeapSort { pu...
分类:
编程语言 时间:
2014-10-24 18:29:10
阅读次数:
221
题目大意:给定一张图,和每个点的油价,知道每条路的耗油量,给定一些询问,求从起点到终点用指定油箱容量的车所得到的最小耗费。
解题思路:BFS+优先队列
优先队列介绍:采用stl中的priority_queue实现。priority_queue默认的是最大优先队列,声明时只要priority_queue q就行了。如果是最小堆,麻烦一些
priority_queue,cmp> q。其中cmp函...
分类:
其他好文 时间:
2014-10-24 14:45:31
阅读次数:
205
堆在实现优先权队列和求最大最小的n个数问题上,有这莫大的优势!
对于最大堆和最小堆的定义此处不再赘述,课参考网上文章:http://blog.csdn.net/genios/article/details/8157031
本文主要是对最小堆进行实现和应用,仅供菜鸟参考。
优先权队列
优先权队列是一种非常有用的数据结构,操作系统的进程调度就有优先权队列的应用,如果用最小值表示最高的优...
分类:
编程语言 时间:
2014-10-22 18:16:13
阅读次数:
244
题目链接:http://poj.org/problem?id=2833思路:由于数据量较大,超出存储范围,使用不能使用数组存储数据在进行排序。考虑维护一个最大堆与最小堆,依次读取数据,记录数据中的n1个最大数字与n2个最小数据,所有数据累计和减去堆中数据即可。注:注意使用记录n2个最大数据要使用最小...
分类:
其他好文 时间:
2014-10-22 06:18:49
阅读次数:
106
题目链接:http://poj.org/problem?id=1442思路:维护一个最小堆与最大堆,最大堆中存储最小的K个数,其余存储在最小堆中代码:#include#includeusing namespace std;struct cmp1{ bool operator() ( cons...
分类:
其他好文 时间:
2014-10-22 00:26:42
阅读次数:
223
public class MinHeap { /* * * Top K个问题,求给定数据中最小的K个数 * * 最小堆解决:堆顶元素为堆中最大元素 * * * */ private int MAX_DATA = 1...
分类:
其他好文 时间:
2014-10-21 19:04:46
阅读次数:
253
堆数据结构实际上是一种数组对象,是以数组的形式存储的,可是它能够被视为一颗全然二叉树,因此又叫二叉堆。堆分为下面两种类型:大顶堆:父结点的值不小于其子结点的值,堆顶元素最大小顶堆:父结点的值不大于其子结点的值,堆顶元素最小堆排序的时间复杂度跟合并排序一样,都是O(nlgn),可是合并排序不是原地排序...
分类:
编程语言 时间:
2014-10-20 21:14:02
阅读次数:
239
拓扑排序如果是随便输出的话,那么只需要用一个队列就可以维护了。复杂度O(n)如果是要求字典序最小输入的话,使用小堆维护,正常建边即可。复杂度O(nlog(n))如果要求尽量使最小值在前输出的话(例如312 优先级高于 231)那么可以反向建边,然后在使用大堆维护,最后把顺序reverse()下。复杂...
分类:
编程语言 时间:
2014-10-20 13:10:27
阅读次数:
202