堆排序的时间复杂度是O(nlgn),与归并排序一样,但它又与插入排序一样具有空间原址性:任何时候都只需要常数个额外的元素空间存储临时数据。 什么是堆?一般堆用数组存储,表现出近似完全二叉树形式,树上的每一个结点对应数组中的一个元素。除了最底层外,该树是完全充满的且从左至右填充。 maxHeapify ...
分类:
编程语言 时间:
2017-02-20 22:34:59
阅读次数:
164
参考:挑战程序设计竞赛·[第二版] 169页 线段树是一颗区间树,也是一颗满二叉树 实现代码: ...
分类:
其他好文 时间:
2017-02-12 17:03:48
阅读次数:
207
heap并不属于STL容器组件,它分为 max heap 和min heap,在缺省情况下,max-heap是优先队列(priority queue)的底层实现机制。 而这个实现机制中的max-heap实际上是以一个vector表现的完全二叉树(complete binary tree)。 二叉堆( ...
分类:
其他好文 时间:
2017-02-04 16:30:18
阅读次数:
129
一:什么是堆? 堆可视为 “以数组方式存储的一棵完全二叉树” 堆又分为最大堆和最小堆, 最大堆就是对于整个二叉树中的每一个节点都满足:节点的键值比其左右子节点的键值都要大,对应的最小堆则是:节点的键值比其左右子节点的键值都要小 二:堆排序的思路 对于一个存储最大堆的数组arr(长度为size), 根... ...
分类:
编程语言 时间:
2017-02-03 14:43:49
阅读次数:
224
4.7 heap(隐式表述:implicit representation) 4.7.1 heap概述 binary max heap作为priority queue的底层机制,原因是: binary heap:完全二叉树的结构可以保证整棵树没有节点漏洞,用array来表示这棵树的时候,只需要从ar... ...
分类:
其他好文 时间:
2017-02-02 20:57:37
阅读次数:
288
题意是给你一个满二叉树,给一个数字,求以这个数为根的树中最大值和最小值。 理解树状数组中的lowbit的用法。 说这个之前我先说个叫lowbit的东西,lowbit(k)就是把k的二进制的高位1全部清空,只留下最低位的1,比如10的二进制是1010,则lowbit(k)=lowbit(1010)=0 ...
分类:
编程语言 时间:
2017-01-26 13:14:49
阅读次数:
229
堆积排序(Heapsort)是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。堆排序是不稳定的排序方法,辅助空间为O(1), 最坏时间复杂度为O(nlog2n) ,堆排序的堆序的平均性能较接近于最坏性能。 中心思想是在使用数组存储的完全二叉树内从下往上每 ...
分类:
编程语言 时间:
2017-01-10 21:22:59
阅读次数:
231
这次打算法马拉松是在星期五的晚上,发挥还算正常(废话,剩下的题都不会= =)。 讲讲比赛经过吧。 8:00准时发题,拿到之后第一时间开始读。 A配对,看上去像是二分图最大权匹配,一看范围吓傻了,先跳过读后面的题。 B完全二叉树的方差,大概看了一遍,好神的样子,跳过。 C多项式?好吧没学过FFT和NT ...
分类:
编程语言 时间:
2017-01-05 21:42:59
阅读次数:
309
完全二叉树 若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层从右向左连续缺若干结点,这就是完全二叉树。 完全二叉树特点 一、叶子结点只可能在最大的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大层次必为L 或 L+1; ...
分类:
其他好文 时间:
2017-01-03 23:46:44
阅读次数:
321
1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架 ...
分类:
编程语言 时间:
2016-12-31 17:06:09
阅读次数:
255