堆是一种数据结构,最大堆性质:堆中的节点值总是不大于其父节点的值,堆是一颗完全二叉树。 堆排序:利用堆将数组进行排序,堆中的根节点存储的是最大值,由此将队中的值先插入操作,再进行去除最大值放到排序数组中,heapify过程。 最大索引堆:堆中存储的元素是数组的索引 ...
分类:
编程语言 时间:
2018-02-18 21:55:00
阅读次数:
247
29.最小的K个数 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 解法一: Partition思想 允许改变原始数组的情况,时间复杂度O(n),不适合海量数据 解法二: 使用最大堆思想,通过优先队列的Conparator定制 ...
分类:
其他好文 时间:
2018-02-10 12:53:12
阅读次数:
166
每次找到数组中的最大值,然后递归的构建左右树 ...
分类:
其他好文 时间:
2018-02-03 19:59:18
阅读次数:
121
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 思路:这道题用到两个堆,使用优先级队列进行实现,原始的优先级队列是最大堆,加上greater仿函数之后 ...
分类:
其他好文 时间:
2018-01-27 00:35:13
阅读次数:
197
#include"stdafx.h"#include<iostream>usingnamespacestd;template<typenameT>voidadjust(T*arr,intsign,intlen){Ttemp=arr[sign];//每一次循环都更新该父节点为根的完全二叉树最大堆for(inti=sign*2+1;i<len;i=i*2+1){if(i+
分类:
编程语言 时间:
2018-01-26 14:03:27
阅读次数:
128
转载于https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html文章 JVM参数说明 -Xms:初始堆大小 默认值=物理内存的1/64,当空余的堆内存小于40%时,JVM就会增大堆直到-Xmx设置值 -Xmx:最大堆大小 默认值= ...
分类:
其他好文 时间:
2018-01-21 21:27:09
阅读次数:
168
1. 程序计数器(Program Counter Register)当前线程所执行的字节码的行号指示器。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是native方法,这个计数器值则为空(Undefined)。线程私有。唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。2. Java虚拟机栈(Java
分类:
编程语言 时间:
2018-01-21 01:10:59
阅读次数:
223
1. 完全二叉树:叶节点只能出现在最后层或次下层,并且最下面一层的节点都集中在该层的最左边的二叉树。 2. 二叉堆:堆是一颗二叉树,并且满足下面的条件: (1)树的每一层都是满,除了最后一层的最右边元素 (2)任意一个父节点都大于或等于(小于或等于)两个子节点。(大于或等于的为最大堆,小于或等于的为 ...
分类:
编程语言 时间:
2018-01-17 01:13:05
阅读次数:
192
这个没啥好说的,写完上一个正好写一下这一个,都是基于堆实现的,不过这里没有用C++内置数组,原因是添加删除元素有点麻烦,所以用了vector来实现。 详细内容见《算法导论》P90 代码 运行结果如下: ...
分类:
其他好文 时间:
2018-01-13 23:50:06
阅读次数:
183
思路参考《算法导论》P84 堆排序中用到的最重要的就是堆这种数据结构,也正是因为这种数据结构能把时间复杂度控制在O(n * lgn) heapsort算法主要依赖于两个函数 MAX_HEAPIFY(int *A,int i,int len) 用于维护最大堆,时间复杂度为O(lgn),注意书上描述这个 ...
分类:
编程语言 时间:
2018-01-13 18:52:57
阅读次数:
205