堆排序是使用二叉堆实现的优先队列来进行排序的。 先介绍几个概念: 第一个是优先队列,优先队列是一种数据结构,它支持两种操作:删除最大元素和插入元素。 第二个是二叉堆,二叉堆是一种数据结构,它能够和那红的实现优先队列的基本操作。它使用一个数组来保存数据,在这个数组中,每个元素都要保证大于等于另两个特定 ...
分类:
编程语言 时间:
2018-05-19 23:24:42
阅读次数:
231
颓了差不多一周后,决定重开DP 这一周,怎么说,学了学trie树,学了学二叉堆,又学了学树状数组,差不多就这样,然后和cdc一番交流后发现,学这么多有用吗?noip的范围不就是提高篇向外扩展一下,现在向下推进度,该不会写题还是不会,水平能有什么提高,应该老老实实看完DP的所有内容和图论的基本内容,再 ...
分类:
其他好文 时间:
2018-05-13 21:03:08
阅读次数:
135
支持两种操作:删除最大元素和插入元素的数据类型叫做优先队列。 队列:删除最老的元素。 栈:删除最新的元素。 基于二叉堆数据结构的一种优先队列的经典实现方法,用数组保存元素并按照一定条件排序。 数据结构二叉堆能够很好地实现优先队列的基本操作。在二叉堆的数组中,每个元素都要保证大于等于另两个特定位置的元 ...
分类:
其他好文 时间:
2018-05-10 23:26:54
阅读次数:
198
二叉树 定义: 来自于百度百科。 在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左 ...
分类:
编程语言 时间:
2018-05-09 14:35:12
阅读次数:
184
`Python` 二叉堆(binary heap) 二叉堆是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足堆特性:父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子树和右子树都是一个二叉堆。 当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆。 当父节 ...
分类:
编程语言 时间:
2018-05-06 10:40:22
阅读次数:
738
这周学习了优先队列,最重要的操作是删除最大元素和插入元素。类包括创建优先队列的构造函数、向优先队列中插入一个元素、返回最大元素、删除最大元素、判断队列是否为空、返回优先队列中的元素个数。当二叉树的每个结点都大于等于它的两个子结点时为堆有序,那么根结点是堆有序的二叉树中的最大结点。使用二叉堆就可以用数 ...
分类:
编程语言 时间:
2018-04-29 14:37:35
阅读次数:
204
二叉堆: 以前写过二叉堆,但很少使用,快忘了。最近又查了一些关于堆的资料,于是重新熟悉一下这种数据结构。 一个快速又简单的方式建立二叉堆,仅使用简单vector(或者数组也行): up_build是形如‘上滤’的过程,平均情况时间复杂度为θ(n),因为up_insert函数只花费θ(1)的平均时间。 ...
分类:
其他好文 时间:
2018-04-29 01:28:41
阅读次数:
179
1.关于二叉树的定义 在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序 ...
分类:
其他好文 时间:
2018-03-20 18:13:05
阅读次数:
220
题目传送门 分析:这题和另外一个题目中位数非常相似,有兴趣可以先看看,比这一题简单。首先暴力模拟还是别想了,估计30%的数据都有点悬。正解应该是用二叉堆。但是如果用一个堆当然不方便,所以建两个堆,一个大根堆,一个小根堆,每次只要出现询问操作,就把小根堆的堆顶丢进大根堆中维护,然后输出就可以了,但是要 ...
分类:
其他好文 时间:
2018-03-18 21:41:32
阅读次数:
240
这个东西读完题之后,就能知道我们要逐位计算贡献.推一下式子,会发现,这一位的贡献,是当前剩余的数字形成的序列的总数,乘上所剩数字中小于s上这一位的数的个数与所剩数字的总数的比.所以我们维护“当前剩余的数字形成的序列的总数”以及权值数组的前缀和就好了.后者可以用树状数组维护,前者可以用一个变量维护.但 ...
分类:
其他好文 时间:
2018-03-14 17:01:46
阅读次数:
224