1
1
import java .util .*;
2
2
3
3
public class LoadBalancing {
4
-
5
-
6
4
public void balanceMachines (int machineCount , int [][] jobs ){
7
- System .out .println (1 );
5
+ Arrays .sort (jobs , (a , b ) -> -Integer .compare (a [1 ], b [1 ])); //Sort by longest procession time 1st
6
+
7
+ ArrayList <ArrayList <Integer >> jobsForMachine = new ArrayList <ArrayList <Integer >>();
8
+ PriorityQueue <Machine > loads = new PriorityQueue <Machine >();
9
+ for (int i =0 ; i <machineCount ; i ++){
10
+ loads .add (new Machine (i ));
11
+ jobsForMachine .add (new ArrayList <Integer >());
12
+ }
13
+
14
+ for (int j =0 ; j <jobs .length ; j ++){
15
+ Machine smallestLoadMachine = loads .remove ();
16
+ int i =smallestLoadMachine .getId ();
17
+ jobsForMachine .get (i ).add (jobs [j ][0 ]);
18
+ smallestLoadMachine .setCurrentLoad (smallestLoadMachine .getCurrentLoad () + jobs [j ][1 ]);
19
+ loads .add (smallestLoadMachine );
20
+ }
21
+
22
+ System .out .println ("Jobs Assignments:" );
23
+ for (int i =0 ; !loads .isEmpty (); i ++){
24
+ Machine machine = loads .remove ();
25
+ System .out .print ("Machine " +machine .getId ()+": " );
26
+ ArrayList <Integer > assignedJobs = jobsForMachine .get (i );
27
+ for (int k =0 ; k <assignedJobs .size (); k ++){
28
+ System .out .print ("\n Job " +assignedJobs .get (k )+": (Processing time=" +jobs [k ][1 ]+")" );
29
+ }
30
+ System .out .println ("\n " );
31
+ }
32
+
8
33
}
9
34
10
35
class Machine implements Comparable <Machine >{
@@ -41,6 +66,7 @@ public String toString(){
41
66
42
67
public static void main (String [] args ) {
43
68
LoadBalancing loadBalancer = new LoadBalancing ();
69
+ int machineCount1 = 4 ;
44
70
int [][] jobs1 = {
45
71
{1 , 2 },
46
72
{2 , 2 },
@@ -50,11 +76,7 @@ public static void main(String[] args) {
50
76
{6 , 1 },
51
77
{7 , 4 }
52
78
};
53
- loadBalancer .balanceMachines (4 , jobs1 );
54
-
55
- ArrayList arrlist = new ArrayList ();
56
- Collections .addAll (arrlist , "1" ,"2" ,"3" );
57
- System .out .println ("Final collection value: " +arrlist );
79
+ loadBalancer .balanceMachines (machineCount1 , jobs1 );
58
80
}
59
81
60
82
}
0 commit comments