Skip to content

Commit 0c881e3

Browse files
authored
Simplify minimizing lateness (TheAlgorithms#4999)
1 parent 704b587 commit 0c881e3

File tree

4 files changed

+86
-62
lines changed

4 files changed

+86
-62
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.thealgorithms.greedyalgorithms;
2+
3+
import java.util.Arrays;
4+
5+
public class MinimizingLateness {
6+
7+
public static class Job {
8+
String jobName;
9+
int startTime = 0;
10+
int lateness = 0;
11+
int processingTime;
12+
int deadline;
13+
14+
public Job(String jobName, int processingTime, int deadline) {
15+
this.jobName = jobName;
16+
this.processingTime = processingTime;
17+
this.deadline = deadline;
18+
}
19+
20+
public static Job of(String jobName, int processingTime, int deadline) {
21+
return new Job(jobName, processingTime, deadline);
22+
}
23+
24+
@Override
25+
public String toString() {
26+
return String.format("%s, startTime: %d, endTime: %d, lateness: %d", jobName, startTime, processingTime + startTime, lateness);
27+
}
28+
}
29+
30+
static void calculateLateness(Job... jobs) {
31+
32+
// sort the jobs based on their deadline
33+
Arrays.sort(jobs, (a, b) -> a.deadline - b.deadline);
34+
35+
int startTime = 0;
36+
37+
for (Job job : jobs) {
38+
job.startTime = startTime;
39+
startTime += job.processingTime;
40+
job.lateness = Math.max(0, startTime - job.deadline); // if the job finishes before deadline the lateness is 0
41+
}
42+
}
43+
}

src/main/java/com/thealgorithms/minimizinglateness/MinimizingLateness.java

Lines changed: 0 additions & 55 deletions
This file was deleted.

src/main/java/com/thealgorithms/minimizinglateness/lateness_data.txt

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.thealgorithms.greedyalgorithms;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import com.thealgorithms.greedyalgorithms.MinimizingLateness.Job;
6+
import org.junit.jupiter.api.Test;
7+
8+
public class MinimizingLatenessTest {
9+
10+
@Test
11+
void testCalculateLateness() {
12+
// Test case with three jobs
13+
Job job1 = new Job("Job1", 4, 6);
14+
Job job2 = new Job("Job2", 2, 8);
15+
Job job3 = new Job("Job3", 1, 9);
16+
Job job4 = new Job("Job4", 5, 9);
17+
Job job5 = new Job("Job5", 4, 10);
18+
Job job6 = new Job("Job6", 3, 5);
19+
20+
MinimizingLateness.calculateLateness(job1, job2, job3, job4, job5, job6);
21+
22+
// Check lateness for each job
23+
assertEquals(6, job4.lateness);
24+
assertEquals(0, job6.lateness);
25+
assertEquals(1, job2.lateness);
26+
}
27+
28+
@Test
29+
void testCheckStartTime() {
30+
31+
Job job1 = new Job("Job1", 2, 5);
32+
Job job2 = new Job("Job2", 1, 7);
33+
Job job3 = new Job("Job3", 3, 8);
34+
Job job4 = new Job("Job4", 2, 4);
35+
Job job5 = new Job("Job5", 4, 10);
36+
37+
MinimizingLateness.calculateLateness(job1, job2, job3, job4, job5);
38+
39+
assertEquals(2, job1.startTime);
40+
assertEquals(5, job3.startTime);
41+
assertEquals(8, job5.startTime);
42+
}
43+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy