题目描述:查找数组中最小的k个数。 思路: (1)维护k个元素的最大堆,即用容量为k的最大堆存储最先遍历到的k个数,并假设它们即是最小的k个数,建堆费时O(k)后,有k1<k2<...<kmax(kmax设为大顶堆中最大元素)。继续遍历数列,每次遍历一个元素x,与堆顶元素比较,x<kmax,更新堆( ...
分类:
其他好文 时间:
2016-09-22 01:05:27
阅读次数:
167
建立最大的k个数,可以通过快速排序来实现,也可以通过堆排序来实现。我们来看堆排序的实现过程。 其中,也是有两种思路:第一种思路是:把数组里的所有的数建堆(O(nlogn)),然后交换k次,通过堆排序实现。(klogn) 时间复杂度是:O((n+k)logn) = O(nlogn) 第二种思路是:先用 ...
分类:
其他好文 时间:
2016-08-27 16:40:45
阅读次数:
173
堆排序,首先对初始化的堆进行下虑操作使得堆满足堆序。也就是建堆的过程。 然后将堆顶元素与堆尾元素互换,在进行delete堆顶操作。 ...
分类:
编程语言 时间:
2016-08-14 14:28:58
阅读次数:
134
1、小堆:堆的构造,i>数组直接生成堆(向下调整),iii>插入创建堆(向上调整);(1)、怎么实现一次调整?找到最后一个非叶子结点,n/2-1;一直往下调整即可!(2)堆排----->优先级队列堆的删除,只能是堆顶元素,再拿最后一个元素补充上去。在向下做一次调整。形成新的堆..
分类:
其他好文 时间:
2016-08-10 00:59:56
阅读次数:
198
#pragmaonce#include<vector>#include<queue>#include<cassert>#include<iostream>usingnamespacestd;//仿函数实现在建堆时确定(大小堆)template<classT>structGreater{ booloperator()(constT&left,constT&right) { returnleft>r..
分类:
编程语言 时间:
2016-07-11 09:12:51
阅读次数:
215
建堆,可以用自底向上的方法利用过程Max-Heapify把一个大小为n的数组A转换为最大堆,A[n/2]后的元素都是树的叶结点,每个叶结点都可以看成只包含一个元素的堆,时间复杂度为O(n)。。 堆排序,堆排序算法利用Build-Max-Heap将输入数组A建成最大堆,因为数组中的最大元素总在根结点A ...
分类:
编程语言 时间:
2016-06-19 18:17:56
阅读次数:
357
堆建好之后,我们只需要返回数组的第一个元素,即能取到最小值 之后就需要做插入元素和删除元素的操作了。 删除元素和建堆过程有点类似,先从堆顶弹出要删除的元素,然后将最后一个元素拿出来,重新进行建堆,就可以得到一个新的最小堆了: 插入元素就稍微有些不同,插入元素是从最后一个位置插入元素然后依次向上扫描, ...
分类:
编程语言 时间:
2016-06-19 12:48:19
阅读次数:
133
学习了堆排序,使用python实现了一个优先队列结构,记录一下实现过程: 用一个python的list来表示堆结构,将list作为参数传入构造函数中,然后在构造函数中建堆: 堆一般都是一个完全二叉树,那么根据完全二叉树的性质,一个节点i的左子节点为i+1,右子节点为i*2+1,以最小堆为例,根节点一 ...
分类:
编程语言 时间:
2016-06-18 18:33:55
阅读次数:
156
在分析数据前需要先观察它,本章将关注那些可以帮助理解单个类别型或连续型变量的图形。 1、条形图-针对类别型变量 (1)简单的条形图 涉及:table()函数用于提取对象各单元的计数 注:若要绘制的类别型变量是一个因子或有序型因子,就可以使用函数plot()快速创建。 (2)堆砌条形图和分组条形图 ( ...
分类:
其他好文 时间:
2016-06-06 12:04:16
阅读次数:
304