Skip to content

Commit 3a1268c

Browse files
committed
Fix
1 parent 1f879a4 commit 3a1268c

File tree

2 files changed

+70
-21
lines changed

2 files changed

+70
-21
lines changed

src/main/java/com/thealgorithms/scheduling/EnergyAwareScheduling.java

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import java.util.ArrayList;
44
import java.util.Comparator;
5+
import java.util.HashMap;
56
import java.util.List;
7+
import java.util.Map;
68

79
/**
8-
* EnergyAwareScheduling schedules tasks based on their energy consumption profile,
10+
* EnergyAwareScheduling schedules tasks based on their energy consumption profile and execution time,
911
* aiming to minimize the overall energy usage of the system.
1012
*
1113
* Use Case: Mobile devices, embedded systems, and data centers that need to save power
@@ -18,10 +20,12 @@ public final class EnergyAwareScheduling {
1820
static class Task {
1921
String name;
2022
int energyConsumption;
23+
int executionTime;
2124

22-
Task(String name, int energyConsumption) {
25+
Task(String name, int energyConsumption, int executionTime) {
2326
this.name = name;
2427
this.energyConsumption = energyConsumption;
28+
this.executionTime = executionTime;
2529
}
2630
}
2731

@@ -31,16 +35,36 @@ public EnergyAwareScheduling() {
3135
tasks = new ArrayList<>();
3236
}
3337

34-
public void addTask(String name, int energyConsumption) {
35-
tasks.add(new Task(name, energyConsumption));
38+
public void addTask(String name, int energyConsumption, int executionTime) {
39+
tasks.add(new Task(name, energyConsumption, executionTime));
3640
}
3741

38-
public List<String> scheduleTasks() {
42+
/**
43+
* Schedules tasks in an order that minimizes cumulative energy consumption and
44+
* returns both the scheduled order and the total energy consumption.
45+
* Steps:
46+
* 1. Sort tasks by energy consumption per time unit to minimize cumulative energy cost.
47+
* 2. Schedule tasks in the order of sorted tasks.
48+
* 3. Calculate the total energy consumption.
49+
* 4. Return the scheduled order and total energy consumption.
50+
*
51+
* @return a map containing the scheduled order and total energy consumption.
52+
*/
53+
public Map<String, Object> scheduleTasks() {
3954
tasks.sort(Comparator.comparingInt(t -> t.energyConsumption));
55+
4056
List<String> scheduledOrder = new ArrayList<>();
57+
int currentTime = 0;
58+
int totalEnergyConsumption = 0;
4159
for (Task task : tasks) {
4260
scheduledOrder.add(task.name);
61+
currentTime += task.executionTime;
62+
totalEnergyConsumption += currentTime * task.energyConsumption;
4363
}
44-
return scheduledOrder;
64+
65+
Map<String, Object> result = new HashMap<>();
66+
result.put("scheduledOrder", scheduledOrder);
67+
result.put("totalEnergyConsumption", totalEnergyConsumption);
68+
return result;
4569
}
4670
}

src/test/java/com/thealgorithms/scheduling/EnergyAwareSchedulingTest.java

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static org.junit.jupiter.api.Assertions.assertEquals;
44

55
import java.util.List;
6+
import java.util.Map;
67
import org.junit.jupiter.api.BeforeEach;
78
import org.junit.jupiter.api.Test;
89

@@ -17,32 +18,56 @@ public void setup() {
1718

1819
@Test
1920
public void testAddAndScheduleSingleTask() {
20-
scheduler.addTask("Task1", 10);
21-
List<String> expected = List.of("Task1");
22-
assertEquals(expected, scheduler.scheduleTasks());
21+
scheduler.addTask("Task1", 10, 5);
22+
23+
// Expected schedule and energy consumption
24+
List<String> expectedOrder = List.of("Task1");
25+
int expectedEnergyConsumption = 10 * 5;
26+
27+
Map<String, Object> result = scheduler.scheduleTasks();
28+
assertEquals(expectedOrder, result.get("scheduledOrder"));
29+
assertEquals(expectedEnergyConsumption, result.get("totalEnergyConsumption"));
2330
}
2431

2532
@Test
2633
public void testScheduleMultipleTasks() {
27-
scheduler.addTask("Task1", 10);
28-
scheduler.addTask("Task2", 5);
29-
scheduler.addTask("Task3", 15);
30-
List<String> expected = List.of("Task2", "Task1", "Task3");
31-
assertEquals(expected, scheduler.scheduleTasks());
34+
scheduler.addTask("Task1", 10, 3);
35+
scheduler.addTask("Task2", 5, 2);
36+
scheduler.addTask("Task3", 15, 4);
37+
38+
// Expected schedule order and cumulative energy calculation
39+
List<String> expectedOrder = List.of("Task2", "Task1", "Task3");
40+
41+
int expectedEnergyConsumption = 195;
42+
43+
Map<String, Object> result = scheduler.scheduleTasks();
44+
assertEquals(expectedOrder, result.get("scheduledOrder"));
45+
assertEquals(expectedEnergyConsumption, result.get("totalEnergyConsumption"));
3246
}
3347

3448
@Test
3549
public void testScheduleTasksWithSameConsumption() {
36-
scheduler.addTask("Task1", 10);
37-
scheduler.addTask("Task2", 10);
38-
scheduler.addTask("Task3", 5);
39-
List<String> expected = List.of("Task3", "Task1", "Task2");
40-
assertEquals(expected, scheduler.scheduleTasks());
50+
scheduler.addTask("Task1", 10, 2);
51+
scheduler.addTask("Task2", 10, 1);
52+
scheduler.addTask("Task3", 5, 3);
53+
54+
List<String> expectedOrder = List.of("Task3", "Task1", "Task2");
55+
56+
int expectedEnergyConsumption = 125;
57+
58+
Map<String, Object> result = scheduler.scheduleTasks();
59+
assertEquals(expectedOrder, result.get("scheduledOrder"));
60+
assertEquals(expectedEnergyConsumption, result.get("totalEnergyConsumption"));
4161
}
4262

4363
@Test
4464
public void testEmptyScheduler() {
45-
List<String> expected = List.of();
46-
assertEquals(expected, scheduler.scheduleTasks());
65+
Map<String, Object> result = scheduler.scheduleTasks();
66+
67+
List<String> expectedOrder = List.of();
68+
int expectedEnergyConsumption = 0;
69+
70+
assertEquals(expectedOrder, result.get("scheduledOrder"));
71+
assertEquals(expectedEnergyConsumption, result.get("totalEnergyConsumption"));
4772
}
4873
}

0 commit comments

Comments
 (0)