任務排程並行演算法的Java簡單實現

jeanron100發表於2018-04-08

今天下午抽空寫了下並行排程演算法的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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章