本文详细阐述了大小堆的创建,堆的插入和删除;为了加深记忆还用堆实现了优先级队列问题,topk问题,堆排序问题(包含原理,思路,代码实现,以及测试用例)。本文在windows平台下vs2008上采用C语言实现。 ...
分类:
其他好文 时间:
2018-02-26 11:29:20
阅读次数:
176
一 堆 堆给人的感觉是一个二叉树,但是其本质是一种数组对象,因为对堆进行操作的时候将堆视为一颗完全二叉树,树种每个节点与数组中的存放该节点值的那个元素对应。所以堆又称为二叉堆,堆与完全二叉树的对应关系如下图所示: 二叉堆可以分为两种形式:最大堆和最小堆。在这两种堆中,结点的值都要满足堆的性质。 在最 ...
分类:
编程语言 时间:
2018-02-23 16:01:48
阅读次数:
210
1. 先讲的堆,其实上周的dijkstra就有涉及到堆的内容,但是这周才详细的讲堆本身。堆逻辑上是一个二叉树,父节点的值比两个子节点都要大(或者比两个小)。堆是一个完全二叉树,所以很适合直接就用数组表示,因为父节点和字节点的位置关系是确定的(2n和2n+1)。 堆的特点是它一直把最大/最小值放在根节 ...
分类:
其他好文 时间:
2018-02-15 10:27:45
阅读次数:
153
1. 完全二叉树:叶节点只能出现在最后层或次下层,并且最下面一层的节点都集中在该层的最左边的二叉树。 2. 二叉堆:堆是一颗二叉树,并且满足下面的条件: (1)树的每一层都是满,除了最后一层的最右边元素 (2)任意一个父节点都大于或等于(小于或等于)两个子节点。(大于或等于的为最大堆,小于或等于的为 ...
分类:
编程语言 时间:
2018-01-17 01:13:05
阅读次数:
192
STL heap和first\_queue 标签(空格分隔): @zhshh STL heap first_queue 可以看看这个文章 大家都知道,priority_queue是用堆实现的,可以通过重载()运算符选择使用最大堆或最小堆。以前一直觉得stl里面的heap相关的函数都是多余的,因为一般 ...
分类:
其他好文 时间:
2018-01-03 16:05:34
阅读次数:
145
一、堆的概念 所谓堆,它是一个数组,也能够被看成一个近似的全然二叉树。树上每一个结点相应数组的一个元素。二叉堆分为二种:最大堆和最小堆。本文主要介绍最大堆,最小堆类似。最大堆的特点:对于随意某个结点,该结点的值大于左孩子、右孩子的值,可是左右孩子的值没有要求。 二、堆排序算法 首先,按堆的定义将数组 ...
分类:
编程语言 时间:
2017-12-02 15:12:16
阅读次数:
136
堆分为最小堆和最大堆。最小堆指的是任意一个节点都有小于他的做儿子和右儿子。最大堆指的是任意一个节点大于打的左儿子右儿子。 最大堆的操作(堆得主要操作就是上滤和下滤) 插入:先将一个节点插入到堆得最后的位置然后上滤,如果他的父亲小于他,就把他父亲的值给他,继续循环,当退出循环的时候就是要插入的节点: ...
分类:
其他好文 时间:
2017-11-28 21:57:20
阅读次数:
206
题目:http://codeforces.com/contest/867/problem/E 题意:模拟股票操作,每天只能买一只股票或者卖一只股票或者什么也不做,求最大利润。 题解:仔细想想是非常简单的一个贪心问题,理解为连续的多次贪心买入卖出可以合并为一次的买入卖出,且值为最优。只需要用一个最小堆 ...
分类:
数据库 时间:
2017-11-28 18:47:37
阅读次数:
185
在堆排序中,我们首先需要建立一个最大堆(每个最小堆的堆顶元素大于它的子节点),,建立好后在堆顶的元素一定是最大元素,此时我们将这个元素和最后一个元素进行交换,然后重新调整树,让它满足最大堆,以此类推直到交换到第二个元素停止交换。 以下是代码实现: int n = 14; int[] arrs = n ...
分类:
编程语言 时间:
2017-11-26 22:57:43
阅读次数:
239
一、二叉树 1.完全二叉树 2.满二叉树 3.平衡二叉树 4.红黑树 5.树堆 6.线索二叉树 二、堆 1.最大/最小堆 2.二项堆 3.斐波那契堆 4.左偏树 三、B树 1.B树 2.B+树 3.B*树 四、字典树 ...
分类:
其他好文 时间:
2017-11-25 14:22:30
阅读次数:
170