题目描述 Description
我们使用黑匣子的一个简单模型。它能存放一个整数序列和一个特别的变量i。在初始时刻,黑匣子为空且i等于0。这个黑匣子能执行一系列的命令。有两类命令:
ADD(x):把元素x放入黑匣子;GET:把i加1的同时,输出黑匣子内所有整数中第i小的数。牢记第i小的数是当黑匣子中的元素已非降序排序后位于第i位的元素。
下面的表6_4是一个11个命令的例...
分类:
其他好文 时间:
2014-07-22 22:39:34
阅读次数:
247
题目描述 Description
有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求这N^2 个和中最小的 N个。
输入描述 Input Description
第一行输入一个正整数N;第二行N个整数Ai 且Ai≤10^9;第三行N个整数Bi,
且Bi≤10^9
输出描述 Output Descr...
分类:
其他好文 时间:
2014-07-21 23:28:09
阅读次数:
249
先看下堆的概念:堆是一种数据结构,逻辑上是一种完全的二叉树,在存储上是数组对象。
堆分为小顶堆和大顶堆,顾名思义:小顶堆是指顶部的元素是最小的,大顶堆是指顶部的元素师最大的。
这样只要我们能够得到这样的堆,每次将顶部的元素和数列的最后一个元素进行交换,然后再对剩下的元素进行建堆,接着以此类推这样的做法,便可以得到排好的数列了。
根据上面所述,堆排序的关键是:建堆。建堆也分为调堆和建堆过程;...
分类:
其他好文 时间:
2014-07-19 02:47:16
阅读次数:
213
假设要实现非递减排序,则需要用要大顶堆。此处设计到三个大顶堆的操作:(1)自顶向下调整操作:MaxHeapify(对应堆的SiftDown操作)、(2)利用数组建立大顶堆:BuildMaxHeap、(3)不断交换堆顶元素(堆的最大元素)和堆的末尾元素,实现非递减排序。
优先队列分为最大优先队列和最小优先队列,分别借助于大顶堆和小顶堆。
优先队列有以下基本操作:(1)提取队列中的最大(小)元素;(2)提取队列中的最大(小)元素并从队列中删除;(3)将队列中元素为x的关键字减少(增大)到k,这里假设k的值不大(...
分类:
其他好文 时间:
2014-06-22 20:58:26
阅读次数:
319
(二叉)堆是一个数组,是一颗近似完全二叉树,分为大顶堆&小顶堆。表示堆的数组A有两个属性:(1)A.length表示数组元素的个数;(2)A.heap-size表示有多少个堆元素存储在数组A中。更多的关于堆的性质的介绍:算法导论第三版:p85-p89、编程珠玑:p141-p145。
堆的操作主要包括堆插入、堆删除两个,而堆插入设计到FixUp操作(自底向上调整),堆删除涉及到FixDown操作(自顶向下调整,大顶堆时对应算法导论上的MAX-HEAPIFY操作)。
本文主要给出的是大顶堆和小顶堆的基本操作的C...
分类:
其他好文 时间:
2014-06-22 13:58:41
阅读次数:
158
堆是一种完全二叉树结构,并且其满足一种性质:父节点存储值大于(或小于)其孩子节点存储值,分别称为大顶堆、小顶堆。堆一般采用数组进行存储(从下标为0开始)。则父节点位置为i,那么其左孩子为2*i + 1,右孩子为2*i + 2。一. 算法描述 堆排序主要分为两个过程:建堆:先使长度为N数组形成一...
分类:
其他好文 时间:
2014-06-18 00:08:54
阅读次数:
207
堆排序(heap sort) 详解 及 代码(C++)本文地址: http://blog.csdn.net/caroline_wendy堆排序包含两个步骤: 第一步: 是建立大顶堆(从大到小排序)或小顶堆(从小到大排序), 从下往上建立;第二步: 是依次交换堆顶和堆底, 并把交换后的堆底输出, 只排列剩余的堆, 从上往下建立;代码:/*
* main.cpp
*
* Created on:...
分类:
编程语言 时间:
2014-06-16 22:12:58
阅读次数:
311
堆的概念
堆是具有下列性质的完全二叉树:每个节点的值都大于或等于其左右孩子结点的值,称为大顶堆;或着每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。 堆排序
堆排序(Heap Sort)就是利用堆(假设利用大顶堆)进行排序的方法。它的基本思想是,将待排序的序列构造成一个大顶堆。此时,整个序列...
分类:
其他好文 时间:
2014-05-15 16:18:31
阅读次数:
329
给了你N个木棒,求把他们组装成一根需要的最小花费,每次只能选两根组装在一起,需要的花费为两个木棒之和,
以前遇到过把一整根切开的,那个是DP,这个则有些类似,可是大胆的猜测了一下,直接每次选取所有木棒中最短的两根,这样就可以了,那么贪心是适用的,但是数量很多,而且两根最短的组装好了得插回去,这样不可能每次都排序吧,
这题首先优先队列肯定是可以做的,
最小堆也是可以的,每次都选出堆里的...
分类:
其他好文 时间:
2014-05-07 12:44:17
阅读次数:
337
2014-04-29
04:18题目:有一连串的数被读入,设计一个数据结构,能随时返回当前所有数的中位数。解法:用一个大顶堆,一个小顶堆将数分成数量最接近的两份,就能轻松得到中位数了。代码:
1 // 18.9 A stream of integers are passed to you, you....
分类:
其他好文 时间:
2014-04-29 14:16:52
阅读次数:
423