堆的实现借助了库函数vector,对于堆分为大堆与小堆,大堆是指根元素大于左右子树元素,反之,则为小树。以大堆的建立为例子,利用一个数组以及数组的下表表示堆所对应的节点的序号,首先,以数组的最末一个元素,相对应堆的叶节点,计算出叶节点的根节点,然后,以此根节点为..
分类:
其他好文 时间:
2016-05-08 20:04:38
阅读次数:
142
在N个数中查找前K个最大数,主要利用小堆的特点,小堆,是根节点元素小于左右子树元素,查找前K个最大数,先将N个数中的前K个数生成小堆,接着,依次将N中的剩余的数与小堆的根节点相比,如果大于根节点,则根节点换为这个数,再将堆进行生成小堆,依次直到N中无剩余,代码如下..
分类:
其他好文 时间:
2016-05-08 20:03:06
阅读次数:
348
堆对象的创建与实现的核心思想就是上调(adjustup)与下调(adjustdown)的算法思想,上调用于创建堆时,从第一个非叶子节点开始向根节点根据需求调整为大堆或者小堆下调如图示:当我们进行插入时,会影响堆的结构,这时我们用尾插,然后上调如图示:接下来就可以创建堆类,代..
分类:
编程语言 时间:
2016-05-08 20:01:36
阅读次数:
183
堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构。堆结构的二叉树存储是最大堆:每个父节点的都大于孩子节点。最小堆:每个父节点的都小于孩子节点。这是一个普通的堆,我们想把它变成最大堆,就必须了解最大堆的特点。然后我们对它进行调整,保证每个父节点的都大..
分类:
其他好文 时间:
2016-05-08 01:25:43
阅读次数:
241
对堆进行排序,利用大堆实现升序,小堆实现降序。例如升序的实现,将较大数据存放在最后面,依次往前存放数据。具体为交换第一个元素和最后一个元素,再将不包含最后一个元素的堆进行下调,使堆保持大堆,将最大数据存放在堆中第一个位置,循环执行上述步骤,直到需要下调的数..
分类:
编程语言 时间:
2016-05-03 00:40:42
阅读次数:
462
【适配器模式】由于建立大堆和建立小堆方式相同,代码相似,所以可以通过添加一个比较器(利用Compare,定义伪函数Less和Greater)实现大小数据的比较,防止大量代码重复。template<classT>
structLess//小堆调用
{
booloperator()(constT&L,constT&R)
{
retu..
分类:
其他好文 时间:
2016-05-03 00:40:11
阅读次数:
129
N个数中找出最大的前K个数,需要用小堆实现。分析:由于小堆的堆顶存放堆中最小的数据,可以通过与堆顶数据进行比较,将大数据存放在堆中,注意在每次改变堆顶数据后,进行调堆,使堆顶一直存放整个堆中最小元素。voidAdjustDown(int*a,size_troot,size_tsize)//下调
{//小堆
..
分类:
其他好文 时间:
2016-05-03 00:39:03
阅读次数:
401
问题
spark的计算模型是如何做到并行的呢?如果你有一箱香蕉,让三个人拿回家吃完,如果不拆箱子就会很麻烦对吧,哈哈,一个箱子嘛,当然只有一个人才能抱走了。这时候智商正常的人都知道要把箱子打开,倒出来香蕉,分别拿三个小箱子重新装起来,然后,各自抱回家去啃吧。 Spark和很多其他分布式计算系统都借用了这种思想来实现并行:把一个超大的数据集,切分成N个小堆,找M个执行器(M < N),各自拿一块或...
分类:
其他好文 时间:
2016-04-29 20:10:04
阅读次数:
190
二叉堆的概念
二叉堆,BinaryHeap,是二叉树中的常见的一种结构。通常以最大堆和最小堆的形式呈现。最大堆指的是父节点大于等于孩子节点的value值,也就是说对于最大堆而言,根元素是二叉堆最大的元素。最小堆的概念是与最大堆的概念是相似的。...
分类:
编程语言 时间:
2016-04-29 19:06:03
阅读次数:
235
堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构,所以堆也叫做二叉堆。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于..
分类:
其他好文 时间:
2016-04-29 02:04:34
阅读次数:
320