学习golang难免需要分析源码包中一些实现,下面就来说说container/heap包的源码 heap的实现使用到了小根堆,下面先对堆做个简单说明 1. 堆概念 堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值。 最大堆和最小堆是二叉堆的两种形式 ...
分类:
其他好文 时间:
2016-09-28 16:05:00
阅读次数:
193
-Xmx10240m:代表最大堆 -Xms10240m:代表最小堆 -Xmn5120m:代表新生代 -XXSurvivorRatio=3:代表Eden:Survivor = 3 根据Generation-Collection算法(目前大部分JVM采用的算法),一般根据对象的生存周期将堆内存分为若干不 ...
分类:
其他好文 时间:
2016-09-23 14:49:06
阅读次数:
156
题目描述:查找数组中最小的k个数。 思路: (1)维护k个元素的最大堆,即用容量为k的最大堆存储最先遍历到的k个数,并假设它们即是最小的k个数,建堆费时O(k)后,有k1<k2<...<kmax(kmax设为大顶堆中最大元素)。继续遍历数列,每次遍历一个元素x,与堆顶元素比较,x<kmax,更新堆( ...
分类:
其他好文 时间:
2016-09-22 01:05:27
阅读次数:
167
堆是完全二叉树的结构,因此对于一个有n个节点的堆,高度为O(logn)。 最大堆:堆中的最大元素存放在根节点的位置。 除了根节点,其他每个节点的值最多与其父节点的值一样大。也就是任意一个子树中包含的所有节点的值都不大于树根节点的值。 堆中节点的位置编号都是确定的,根节点编号为1,每一层从左到右依次编 ...
分类:
编程语言 时间:
2016-09-16 18:12:31
阅读次数:
261
JVM的堆的内存, 是通过下面面两个参数控制的 -Xms 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你 -Xmx 是最大堆的大小 当最小堆占满后,会尝试进行GC,如果GC之后还不能得到足够的内存(GC未必会收集到所有当前可用内存),分配新的对象,那么就会扩展堆,如果-Xmx ...
分类:
编程语言 时间:
2016-09-09 20:54:54
阅读次数:
235
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统 下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0 ...
分类:
其他好文 时间:
2016-09-09 20:51:29
阅读次数:
117
最大堆(二叉)排序分几个步骤: 1.maxheap(),维护最大堆的性质,即节点的值大于子节点的值,时间复杂度O(lgn) 2.bulid_max_heap(),从无序数组中构造最大堆,时间复杂度O(n) 3.heap_sort(),对无序数组进行排序,时间复杂度O(nlgn) 代码有注释 ...
分类:
编程语言 时间:
2016-08-31 15:21:58
阅读次数:
228
题目描述:查找最小的k个元素,输入n个整数,输出其中最小的k个。 一般的排序方法,如快排,时间复杂度为O(n*logn+k); 大顶堆方法,时间复杂度为O(k+(n-k)*logk); 如果建立k个元素的最小堆的话,那么其空间复杂度势为O(N),而建立k个元素的最大堆的空间复杂度为O(k); 当面对 ...
分类:
其他好文 时间:
2016-08-28 11:00:37
阅读次数:
495
1.
容器如vector、deque、list是线性存储的,它们都是有迭代器的。
queue和stack作为容器适配器,没有迭代器的。它们默认使用deque作为底层元素。
2.
heap不属于STL容器,但是它是优先队列的幕后英雄。heap底层是vector或者array实现的。STL实现了最大堆,这样可以满足优先队列的特性。
优先队列也是容器适配器。
3.
slist是单向列表,它...
分类:
其他好文 时间:
2016-08-14 17:55:26
阅读次数:
161
堆堆,也叫二叉堆,就是完全二叉树二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小... ...
分类:
其他好文 时间:
2016-08-14 14:22:27
阅读次数:
131