数据结构实现之索引优先队列用例(多路归并)
2016-01-24 17:36
232 查看
下面的用例调用了IndexMaxPQ的代码MultiWay解决了多项归并问题:它将多个有序的输入流归并成一个有序的输出流。许多应用中都会遇到这个问题。输入可能来自于多种科学仪器的输出(按时间排序),或是来自多个音乐或电影网站的信息列表(按名称或艺术家名字排序),或商家交易(按账号或时间排序),或者其他。
如果有足够的空间,你可以把它们简单地读入一个数组排序,但如果使用了优先队列,无论输入有多长你都可以把它们全部读入并排序。
这段代码调用了IndexMaxPQ来作为命令行参数输入的多行有序字符串归并为一行有序的输出。每个输入流的索引都关联着一个元素(输入中的下个字符串)。
初始化之后,代码进入一个循环,删除并打印出队列中最小的字符串,然后将该输入的下一个字符串添加为一个元素。
如果有足够的空间,你可以把它们简单地读入一个数组排序,但如果使用了优先队列,无论输入有多长你都可以把它们全部读入并排序。
package xwq.sort; import xwq.dt.IndexMaxPQ; import xwq.util.In; import xwq.util.StdOut; public class MultiWay { public static void merge(In[] streams) { int N = streams.length; IndexMaxPQ<String > pq = new IndexMaxPQ<String>(N); for(int i = 0;i < N;i++) { if(!streams[i].isEmpty()) pq.insert(i, streams[i].readString()); } while(!pq.isEmpty()) { StdOut.print(pq.maxKey()+" "); int i = pq.delMax(); if(!streams[i].isEmpty()) pq.insert(i, streams[i].readString()); } StdOut.println(); } public static void main(String[] args) { int N = args.length; In[] streams = new In ; for (int i = 0; i < N; i++) streams[i] = new In(args[i]); merge(streams); } }
这段代码调用了IndexMaxPQ来作为命令行参数输入的多行有序字符串归并为一行有序的输出。每个输入流的索引都关联着一个元素(输入中的下个字符串)。
初始化之后,代码进入一个循环,删除并打印出队列中最小的字符串,然后将该输入的下一个字符串添加为一个元素。
相关文章推荐
- 数据结构实现之最大索引优先队列
- 数据结构实现之最小索引优先队列
- Eigen库数据结构内存对齐问题
- 【Redis笔记(四)】 Redis数据结构 - list链表
- HDU1022 Train Problem I 数据结构
- 数据结构与算法——在一个数组中实现两个堆栈(C语言)
- 数据结构实验之栈三:后缀式求值
- 已知后序中序序列求先序序列
- 对于二叉树三种非递归遍历方式的理解
- 2015年大二上-数据结构-图-1-(3)图遍历算法实现
- 优先队列——斐波那契堆(without source code)
- 2015年大二上-数据结构-图-1-(2)操作用邻接表存储的图
- 一个程序猿学生寒假自我修养
- 返回某集合的所有子集
- 快速掌握Lua 5.3 —— 数据结构
- 数据结构笔记之绪论
- ZMQ源码分析(一)-- 基础数据结构的实现
- LinkedList各种操作
- Lua学习笔记-数据结构
- 数据结构之--图的讲解与C语言实现