Treap,简单的来说就是Tree+Heap,是一颗平衡树,每个节点有两个信息:1.key:当前节点的关键字 ;2.fix:当前节点优先级。key满足二叉排序数的性质,即左儿子都比当前节点小,右儿子都比当前节点大(或相等),fix是一个随机的数,满足小根堆(或大根堆)的性质,fix是为了防止Trea...
分类:
其他好文 时间:
2015-12-27 06:18:34
阅读次数:
182
堆排序:要知道堆排序,首先要了解一下二叉树的模型。下图就是一颗二叉树,具体的情况我后续会分享的。那么堆排序中有两种情况(看上图理解): 大根堆: 就是说父节点要比左右孩子都要大。 小根堆: 就是说父节点要比左右孩子都要小。那么要实现堆排序,必须要做两件事情: 第一:构建大根堆。 首先上图...
分类:
编程语言 时间:
2015-12-24 10:31:32
阅读次数:
197
堆排序 堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。既然是堆排序,自然需要先建立一个堆,而建堆的核心内容是调整堆,使二叉树满....
分类:
编程语言 时间:
2015-12-03 11:33:12
阅读次数:
244
树的点分治,在分治的时候将所有点到根的距离依次放入一个数组q中。对于一棵子树里的点,合法的路径一定是q[L]..q[R]的某个数加上自己到重心的距离。定义五元组(v,l,m,r,w),表示当前路径长度为v,在[l,r]里选出最大值m,并加上w。用大根堆维护这些五元组,每次取出v最大的元素,并扩展出[...
分类:
其他好文 时间:
2015-11-23 00:42:56
阅读次数:
192
1、堆排序概述堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排...
分类:
编程语言 时间:
2015-11-19 10:46:50
阅读次数:
207
今天看堆排序,以前没注意,写个小程序记忆一下。堆排序实际上就是个完全二叉树,试着画一棵试试,记忆算法很简单,大根堆满足跟比叶子大,小根堆反之。算法思想见百度百科:1,先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区2,再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交...
分类:
编程语言 时间:
2015-10-30 18:37:48
阅读次数:
249
# 堆排序的Python实现# coding:utf-8import randomimport timet = time.time()# 堆排序, 按照从小到大排序,所以建立大根堆# 列表的第一个元素没有使用def ShiftDown(a, i): if not a: retur...
分类:
编程语言 时间:
2015-08-30 00:46:04
阅读次数:
339
该题目与思路分析来自九章算法的文章,仅仅是自己做个笔记!题目:数字是不断进入数组的,在每次添加一个新的数进入数组的同时返回当前新数组的中位数。解答:这道题是用堆解决的问题。用两个堆,max heap和min heap,再加一个median值,维持两个堆的大小相等(小根堆可以比大根堆多一个)。对于新来...
分类:
其他好文 时间:
2015-08-26 15:22:43
阅读次数:
221
在数据结构中,堆其实就是一棵完全二叉树。我们知道内存中也有一块叫做堆的存储区域,但是这与数据结构中的堆是完全不同的概念。在数据结构中,堆分为大根堆和小根堆,大根堆就是根结点的关键字大于等于任一个子节点的关键字,而它的左右子树又分别都是大根堆;小根堆与大根堆恰好相反。在C++的STL中优先队列pr.....
分类:
编程语言 时间:
2015-08-20 22:13:28
阅读次数:
215
今日发现要使用堆,然后priority_queue 使用的恰好是堆,默认是大根堆,这样的话,如果遇到需要用到大根堆,小根堆来处理问题的时候,可以使用这个结构。常用方法与队列差不 push(),pop(),top()上一部分代码,可以看出默认比较是 less 所以是大根堆,默认的话,里面的容器是vec...
分类:
其他好文 时间:
2015-08-19 19:42:11
阅读次数:
188