博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
任务调度并行算法的Java简单实现
阅读量:2447 次
发布时间:2019-05-10

本文共 2994 字,大约阅读时间需要 9 分钟。

今天下午抽空写了下并行调度算法的Java版本,是想把这个思路先实现了,后面改写Python版作为参考,调试这个版本之后,再来写Python版,发现差别还不小。

Java版本的目前支持动态赋值,目前的元素个数是10个,可以根据情况修改,并行度是4,可以根据情况修改。

 
import java.util.Random; import java.util.Arrays; public class Test { public static void main(String args[]) { new Test().test(); // int[] array ={96,59,55,34,22,11,7,5,3,2}; // new Test().getMaxIndex(array); } public void test(){System.out.println("test"); int ARRAY_SIZE = 10; int test_array[] = new int[ARRAY_SIZE]; for (int i = 0; i < ARRAY_SIZE; i++) {test_array[i] = new Random().nextInt(100);}Arrays.sort(test_array); for (int i = 0; i < ARRAY_SIZE; i++) {System.out.println(test_array[i]);} int GRP_NO = 4; int array_group[][] = new int[GRP_NO][ARRAY_SIZE]; int array_sum_group [] = new int[GRP_NO]; for (int i = 0; i < GRP_NO; i++) {array_group[i][0] = test_array[ARRAY_SIZE - i - 1];array_sum_group[i] = test_array[ARRAY_SIZE - i - 1];System.out.println("init value :"+array_sum_group[i]);} int min_grp_no = 0; int max_index = 0; for (int i = ARRAY_SIZE-GRP_NO-1 ; i >= 0; i--) { //get min array group index System.out.println("new value:"+test_array[i]);min_grp_no = getMinGrpNo(array_sum_group);max_index = getMaxIndex(array_group[min_grp_no]);array_group[min_grp_no][max_index+1] = test_array[i];array_sum_group[min_grp_no] += test_array[i];System.out.println(array_group[min_grp_no][max_index+1]+","+array_group[min_grp_no][max_index]+","+array_sum_group[min_grp_no]);}System.out.println(array_group);} public int getMinGrpNo(int[] array) { int temp_value = 0; int min_index = 0; if(array.length>1) {temp_value = array[0]; for (int i = 1; i < array.length; i++) { if (temp_value > array[i]) {temp_value = array[i];min_index = i;}}}System.out.println("getMinGrpNo:"+min_index+" value:"+temp_value); return min_index;} public int getMaxIndex(int[] array) { int temp_value = 0; int max_index = 0; if(array.length>1) {temp_value = array[0]; for (int i = 1; i < array.length; i++) { if(array[i] != 0) { if (temp_value > array[i]) {temp_value = array[i];max_index = i;}}}}System.out.println("getMaxIndex:"+max_index+" value:"+temp_value); return max_index;}}

程序的执行结果如下,整体的思路是生成随机数的数组,然后对数组排序,然后对数组做数据处理,每次添加新元素都需要对每组累计值做一个排序,累计值最小的可以添加新的元素,直至元素被添加完。

所以自己在逻辑的部分写了两个函数来单独处理:

一个是得到累计值最小的数组,得到数组的下标

另外一个是查找数组中元素的最大下标,比如数组有3个元素,那么最大下标就是2(数组从0开始)

 
test 18 28 31 33 41 57 59 59 79 86 init value :86 init value :79 init value :59 init value :59 new value:57 getMinGrpNo:2 value:59 getMaxIndex:0 value:59 57,59,116 new value:41 getMinGrpNo:3 value:59 getMaxIndex:0 value:59 41,59,100 new value:33 getMinGrpNo:1 value:79 getMaxIndex:0 value:79 33,79,112 new value:31 getMinGrpNo:0 value:86 getMaxIndex:0 value:86 31,86,117 new value:28 getMinGrpNo:3 value:100 getMaxIndex:1 value:41 28,41,128 new value:18 getMinGrpNo:1 value:112 getMaxIndex:1 value:33 18,33,130

当然上面的实现,如果拿10个元素来看,好像意义不大,但是如果是100个,200个这种场景,你会明显感觉到效果了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-2152660/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23718752/viewspace-2152660/

你可能感兴趣的文章
如何使Linux控制台更易于Linux新手使用
查看>>
谷歌浏览器开发文档获取书签_使用书签更快地浏览Word文档
查看>>
如何在Apple Watch上启用和使用缩放
查看>>
初学者:如何在Outlook 2010中向其他人分配任务
查看>>
windows 10 修复_如何修复Windows的10大烦恼
查看>>
系统映像恢复 进不了系统_如何从Windows系统映像中恢复特定文件
查看>>
如何学习Photoshop的极客指南,第2部分:面板
查看>>
如何在iPhone上将实时照片转换为视频或GIF
查看>>
xbmc_从iPhone或iPod Touch控制XBMC
查看>>
编程爱好者网站_读书爱好者的最佳免费网站
查看>>
为什么运行微波会杀死Wi-Fi连接?
查看>>
matlab生成文本乱码_如何生成完全随机/乱码文本的段落
查看>>
siri捷径调用谷歌翻译_告诉它使用Google助理,以减少Siri的麻烦
查看>>
outlook转发邮件步骤_Microsoft Outlook中的快速步骤指南
查看>>
macos 托盘文件预览_如何在Ubuntu的文件管理器中快速预览文件(如macOS中的“ Quick Look”)...
查看>>
macos 快速启动启动台_无法获取macOS通知? 这是解决方法(无需重新启动)
查看>>
为什么您可能不应该将您的企业网站运出家门
查看>>
如何在Android上使用Amazon Underground免费获取大量应用内购买
查看>>
如何使用HDHomeRun在计算机,游戏机和其他设备上观看直播电视
查看>>
如何在没有智能手机的情况下使用Google Authenticator和其他两因素身份验证应用程序...
查看>>