随着科技和经济水平的发展和提高,越来越多的人投身到java的学习中,要求更高的工资和更好的生活水平。 今天介绍几个java的基础知识。 在java算法中,如何根据权重分配任务? 一起看看吧。
首先,假设您有一个任务执行者要执行一定数量的任务,并且任务分配必须按一定的权重比进行。 任务的分配是随机的,分配完成后,必须为每个任务标记执行者。 分配算法并不难,但用java写很有趣。
首先简要说明算法的设计。
1 .只要能将总任务数整除为权重,每个人分配的数量就是总任务数/权重和*权重
2 .总任务数无法整除权重时,首先按照整除后的数划分为1,将剩余数优先分配给权重较小的执行者。 代码应显示如下: //总任务
ListdataList=pm1.getDataList (;
inttotal=dataList.size (;
//待分配人员
list autolist=pm auto.get datalist (;
//总权重
inttotalWight=0;
for(inti=0; I
{
executordtodto=autolist.get(I;
intweight=dto.getWeight (;
totalWight=weight;
}
//得到能被整除的最大数量
integer maxint=get maxint (total wight,total );
intrest=total-maxInt;
//要保存的结果集
ListresultList=newArrayList (;
for(inti=0; I
{
intassignnum=maxint/total wight * (
. getWeight ();
intcount=0;
是wile (计数)
{
if(datalist.size) () ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。
{
Randomrandom=newRandom (;
//根据对话日志的总数产生随机数
intindex=random.nextint((int ) dataList.size ) );
taskdtodto=datalist.get(index;
if (空!=dto )
{
dto.setassignoperator (autolist.get (I ) )。
. getId ();
resultlist.add(DTO;
出局;
datalist.remove (索引; //被分配的任务从被分配的任务数中排除
}
}
else
{
黑;
}
}
是autolist.get(I )
. settask(Autolist.get ) I ) )。
. getTask () count ); //更新每个任务执行者的任务数
}
system.out.println(datalist大小) dataList.size ),剩余为) rest );
if(datalist.size) () ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。
{
//权重从小到大剩余~
collections.sort(autolist,newComparator ) )。
{
@Override
公共输入公司(executordtoo 1
、ExecutorDTOo2)
{
returno1.getWeight ()-o2.getWeight ();
}
);
listrestresultlist=this.assign rest (autolist,dataList );
result list.addall (rest result list;
}
其中分配剩余assignRest的方法、代码如下所示。 私有列表统计信息(list autolist,ListdataList )。
{
ListresultList=newArrayList (;
映射图=new hashmap (;
出局:
for(inti=0; I
{
executordtodto=autolist.get(I;
intweight=dto.getWeight (;
Randomrandom=newRandom (;
for(intj=0; j
{
intindex=random.nextint((int ) dataList.size ) );
taskdtochatdto=datalist.get (index;
if (空!=chatDTO )
{
chatdto.setassignoperator (dto.getoperpk ) ); //被分配人的id
dto.settask(dto.gettask ) ) 1; //更新任务执行者包含的任务数
resultlist.add(chatdto;
datalist.remove (索引;
if(datalist.size ()==0) ) )。
幸福手机;
}
}
}
返回结果列表;
}
以上是关于java算法,如何根据权重分配任务的主要内容。 如果您对java知识感兴趣,想了解更多关于java的经典示例和常见问题,请关注奇q工具网。
请阅读: