您的位置:首页 > 大数据

大数据处理中的任务分配问题

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) );

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐