大数据处理中的任务分配问题
2017-03-01 21:54
465 查看
遇到一个题目大约是这样的:一个任务分配系统,其中的worker进程同时只能处理一个任务且任务不能中断。
//Worker.java import java.util.ArrayList; import java.util.List; public class Worker { private int iIndex; private int iSum; private List<Integer> listJobs; public Worker( int iIndex, int iSum ) { this.iIndex = iIndex; this.iSum = iSum; listJobs = null; } public int getiIndex() { return iIndex; } public void setiIndex(int iIndex) { this.iIndex = iIndex; } public int getiSum() { return iSum; } public void setiSum(int iSum) { this.iSum = iSum; } public void addJob( int iJob ) { if( listJobs == null ) { listJobs = new ArrayList<Integer>(); } listJobs.add( new Integer( iJob )); iSum += iJob; } public List<Integer> getListJobs() { return listJobs; } @Override public String toString() { return "Worker [iIndex=" + iIndex + ", iSum=" + iSum + ", listJobs=" + listJobs + "]"; } }
//DWork.java
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; public class DWork { public static int doWork( int iSrvCnt, int[] arrWorks ) { if( iSrvCnt <= 0 ) return -1; Arrays.sort( arrWorks ); if( arrWorks[0] <= 0 ) { return -2; } List<Worker> listWorkers = new ArrayList<Worker>(iSrvCnt); int i; for( i = 0; i < iSrvCnt; ++i ) { listWorkers.add( new Worker( i, 0 )); } Worker minWorker = null; for( i = arrWorks.length - 1; i >= 0; --i ) { minWorker = Collections.min(listWorkers, new Comparator(){ @Override public int compare(Object o1, Object o2) { Worker w1 = (Worker)o1; Worker w2 = (Worker)o2; if( w1.getiSum() < w2.getiSum() ) { return -1; } else if( w1.getiSum() > w2.getiSum()) { return 1; } return 0; } }); minWorker.addJob( arrWorks[i]); } minWorker = Collections.max(listWorkers, new Comparator(){ @Override public int compare(Object o1, Object o2) { Worker w1 = (Worker)o1; Worker w2 = (Worker)o2; if( w1.getiSum() < w2.getiSum() ) { return -1; } else if( w1.getiSum() > w2.getiSum()) { return 1; } return 0; } }); for( i = 0; i < listWorkers.size(); ++i ) { System.out.println( listWorkers.get(i ).toString() ); } return minWorker.getiSum(); } public static void main(String[] args) { int[] arrWorks = new int[5]; arrWorks[0] = 9; arrWorks[1] = 3; arrWorks[2] = 10; arrWorks[3] = 5; arrWorks[4] = 1; System.out.println( DWork.doWork(3, arrWorks) ); } }
相关文章推荐
- 如何处理串口通讯数据重合与分批到达的问题
- 数据仓库自动抽取:通过 SQL Server 企业管理器中的数据转换服务 (DTS) 设计器 创建 Analysis Services 处理任务
- 【并查集】数据结构与算法实验题 11.3 培养箱分配问题
- 关于数据仓库数据质量的问题处理
- 关于数据仓库数据质量的问题处理
- Excel问题处理,如何实现数据表的单元格数值的动态变化。
- $.getJSON()处理数据及IE返回错误的问题
- 在SSIS中使用XML任务处理XML数据或文档
- 把一个用sql server 2005内置加密方法加密数据的DB从一台电脑备份后,还原到另外一台电脑上,出现的问题的处理办法
- 如何处理Oledb中EXCEL驱动读取EXCEL文件中字段长度大于255字符时出现的"数据截断"问题.
- 如何处理串口通讯数据重合与分批到达的问题 2
- 解决,windows的任务计划中添加一个批处理脚本,总是显示命令行窗口的问题
- 利用暴力反编译的程序处理ArcXML数据遇到的问题小结(纯粹研究目的)
- Oracle function-based index对于数据更新处理延时问题。
- 在SSIS中使用XML任务处理XML数据或文档
- 数据仓库自动抽取:通过 SQL Server 企业管理器中的数据转换服务 (DTS) 设计器 创建 Analysis Services 处理任务
- 关于DataList嵌套DataList的问题(重点在于处理某些特殊结构与数据绑定)
- jsp中处理数据的问题
- 取从textarea中存到MYSQL的数据以原格式显示问题以及解决MySQL日期处理和标签的使用
- Oracle难道不能处理大数据并发的问题