问题:设计一个算法将k个有序链表合并成一个有序链表,已知k个链表总元素个数为n. 算法要求的复杂度是O(nlogk),可以采用最小堆来实现k路归并,具体算法如下: 1.取出k个链表头结点调准成一个最小堆heap[k]; 2.取出堆heap中的最小值,然后将该最小值下一个结点放在heap[0]位置,然
分类:
其他好文 时间:
2016-01-28 17:14:16
阅读次数:
128
题意:K个数组每组K个值,每次从一组中选一个,共K^k种,问前K个小的。思路:优先队列处理多路归并,每个状态含有K个元素。详见刘汝佳算法指南。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8...
分类:
其他好文 时间:
2015-12-25 18:42:11
阅读次数:
198
问题叙述性说明:现有n作为一个有序序列(2,3,9),(3,5,11,23),(1,4,7,9,15,17,20),(8,15,35,9),(20,30,40),第k小值。 问题分析:可用多路归并排序将全部序列进行排序后取第k个值,可是仅仅要求求出第k小值将全部数组排序未免显得有点浪费,所以...
分类:
其他好文 时间:
2015-10-02 17:25:12
阅读次数:
166
从包含k个整数的k个数组中各选一个求和,在所有的和中选最小的k个值。思路是多路归并,对于两个长度为k的有序表按一定顺序选两个数字组成和,(B表已经有序)会形成n个有序表A1+B1比较,而现在需要同时合并n个有序表,优先队列(堆)就派上用场了。类似归并排序用i和j维护有序表当前考虑元素,合并的时候,每...
分类:
其他好文 时间:
2015-09-08 00:16:22
阅读次数:
128
UVALive 3135 Argus http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18684题意
编写一个系统执行一系列Register命令:Register Q_num Period,每个命令执行周期是Period,执行事件Q_num;如果事件同时发生,优先执行Q_num小的。
示例Sample Input
Reg...
分类:
其他好文 时间:
2015-08-28 13:24:51
阅读次数:
161
题目链接: 1913: yifan and matrix题目描述: 有一个n*n的矩阵,在每一行取出一个数,可以得到n个数的和,问前n小的和分别是多少?解题思路: 对于两个数组a[n],b[n],我们可以用二路归并维护一个升序序列a[i]+b[j](1 2 #include 3 #inclu...
分类:
其他好文 时间:
2015-07-30 11:03:58
阅读次数:
159
背景知识
外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次性装入内存的部分,分别把每一部分调入内存完成排序。然后,对已经排序的子文件进行归并排序。
问题提出
假设我们要写一个外部排序程序。现在要讨论的是对已...
分类:
编程语言 时间:
2015-07-29 10:23:06
阅读次数:
166
白书上的例题,很是经典。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 const int M = 100; 9 const int N = 2000;10 int a[...
分类:
其他好文 时间:
2015-07-14 17:33:55
阅读次数:
154
归并:将两个或两个以上的有序序列合并成一个新的有序序列,这种归并方法称为2路归并;
将3个有序序列归并为一个新的有序序列,称为3路归并;
将多个有序序列归并为一个新的有序序列,称为多路归并。
合并过程:
1、设置i,j 和 p 三个指针,其初值分别指向这三个记录区的起始位置;
2、合并时依次比较R[i]和R[j]的关键字,取关键字较小的记录复制到R1[p]中;
3、然后将被复制记录的指针 i 或 j 加1,以及指向复制位置的指针 p 加1;
4、重复这一过程直至两个输入的子文件有一个已全部复制完毕(不妨称其...
分类:
编程语言 时间:
2015-07-06 12:24:52
阅读次数:
171
#include#include#define M 4using namespace std;class LoserTree{private: // 调整K为2的整数次幂 int round(int k) { if(k&(k-1)!=0) { ...
分类:
编程语言 时间:
2015-06-25 18:57:19
阅读次数:
358