From 5b747c7492f3507ce8f4969edb94efc253aed5c8 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Sat, 5 Oct 2024 10:34:39 +0530 Subject: [PATCH 1/8] Add `MLFQScheduler.java` new algorithm --- .../scheduling/MLFQScheduler.java | 146 ++++++++++++++++++ .../scheduling/MLFQSchedulerTest.java | 46 ++++++ 2 files changed, 192 insertions(+) create mode 100644 src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java create mode 100644 src/test/java/com/thealgorithms/scheduling/MLFQSchedulerTest.java diff --git a/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java b/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java new file mode 100644 index 000000000000..c041cf4eb36d --- /dev/null +++ b/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java @@ -0,0 +1,146 @@ +package com.thealgorithms.scheduling; + +import java.util.LinkedList; +import java.util.Queue; + +/** + * The Multi-Level Feedback Queue (MLFQ) Scheduler class. + * This class simulates scheduling using multiple queues, where processes move + * between queues depending on their CPU burst behavior. + */ +public class MLFQScheduler { + private Queue[] queues; // Multi-level feedback queues + private int timeQuantum[]; // Time quantum for each queue level + private int currentTime; // Current time in the system + + /** + * Constructor to initialize the MLFQ scheduler with the specified number of + * levels + * and their corresponding time quantums. + * + * @param levels Number of queues (priority levels) + * @param timeQuantums Time quantum for each queue level + */ + public MLFQScheduler(int levels, int[] timeQuantums) { + queues = new LinkedList[levels]; + for (int i = 0; i < levels; i++) { + queues[i] = new LinkedList<>(); + } + timeQuantum = timeQuantums; + currentTime = 0; + } + + /** + * Adds a new process to the highest priority queue (queue 0). + * + * @param p The process to be added to the scheduler + */ + public void addProcess(Process p) { + queues[0].add(p); + } + + /** + * Executes the scheduling process by running the processes in all queues, + * promoting or demoting them based on their completion status and behavior. + * The process continues until all queues are empty. + */ + public void run() { + while (!allQueuesEmpty()) { + for (int i = 0; i < queues.length; i++) { + Queue queue = queues[i]; + if (!queue.isEmpty()) { + Process p = queue.poll(); + int quantum = timeQuantum[i]; + + // Execute the process for the minimum of the time quantum or the remaining time + int timeSlice = Math.min(quantum, p.remainingTime); + p.execute(timeSlice); + currentTime += timeSlice; // Update the system's current time + + if (p.isFinished()) { + System.out.println("Process " + p.pid + " finished at time " + currentTime); + } else { + if (i < queues.length - 1) { + p.priority++; // Demote the process to the next lower priority queue + queues[i + 1].add(p); // Add to the next queue level + } else { + queues[i].add(p); // Stay in the same queue if it's the last level + } + } + } + } + } + } + + /** + * Helper function to check if all the queues are empty (i.e., no process is + * left to execute). + * + * @return true if all queues are empty, otherwise false + */ + private boolean allQueuesEmpty() { + for (Queue queue : queues) { + if (!queue.isEmpty()) { + return false; + } + } + return true; + } + + /** + * Retrieves the current time of the scheduler, which reflects the total time + * elapsed during the execution of all processes. + * + * @return The current time in the system + */ + public int getCurrentTime() { + return currentTime; + } +} + +/** + * Represents a process in the Multi-Level Feedback Queue (MLFQ) scheduling + * algorithm. + */ +class Process { + int pid; + int burstTime; + int remainingTime; + int arrivalTime; + int priority; + + /** + * Constructor to initialize a new process. + * + * @param pid Process ID + * @param burstTime CPU Burst Time (time required for the process) + * @param arrivalTime Arrival time of the process + */ + public Process(int pid, int burstTime, int arrivalTime) { + this.pid = pid; + this.burstTime = burstTime; + this.remainingTime = burstTime; + this.arrivalTime = arrivalTime; + this.priority = 0; + } + + /** + * Executes the process for a given time slice. + * + * @param timeSlice The amount of time the process is executed + */ + public void execute(int timeSlice) { + remainingTime -= timeSlice; + if (remainingTime < 0) + remainingTime = 0; + } + + /** + * Checks if the process has finished execution. + * + * @return true if the process is finished, otherwise false + */ + public boolean isFinished() { + return remainingTime == 0; + } +} diff --git a/src/test/java/com/thealgorithms/scheduling/MLFQSchedulerTest.java b/src/test/java/com/thealgorithms/scheduling/MLFQSchedulerTest.java new file mode 100644 index 000000000000..064aa7579d70 --- /dev/null +++ b/src/test/java/com/thealgorithms/scheduling/MLFQSchedulerTest.java @@ -0,0 +1,46 @@ +package com.thealgorithms.scheduling; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class MLFQSchedulerTest { + + @Test + void testMLFQScheduling() { + // Create MLFQ Scheduler with 3 levels and time quantum for each level + int[] timeQuantums = {4, 8, 12}; // Example of different quantum for each queue + MLFQScheduler scheduler = new MLFQScheduler(3, timeQuantums); + + // Add processes to the scheduler + scheduler.addProcess(new Process(1, 10, 0)); // pid=1, burstTime=10, arrivalTime=0 + scheduler.addProcess(new Process(2, 15, 0)); // pid=2, burstTime=15, arrivalTime=0 + scheduler.addProcess(new Process(3, 25, 0)); // pid=3, burstTime=25, arrivalTime=0 + + // Run the scheduler + scheduler.run(); + + // Check current time after all processes are finished + assertEquals(50, scheduler.getCurrentTime()); + } + + @Test + void testProcessCompletionOrder() { + int[] timeQuantums = { 3, 6, 9 }; + MLFQScheduler scheduler = new MLFQScheduler(3, timeQuantums); + + Process p1 = new Process(1, 10, 0); + Process p2 = new Process(2, 5, 0); + Process p3 = new Process(3, 20, 0); + + scheduler.addProcess(p1); + scheduler.addProcess(p2); + scheduler.addProcess(p3); + + scheduler.run(); + + // After running, current time should match the total burst time for all + // processes + assertEquals(35, scheduler.getCurrentTime()); + } +} From 38e982905c152e0c35a89fe60661cda4f596c44f Mon Sep 17 00:00:00 2001 From: Hardvan Date: Sat, 5 Oct 2024 05:04:59 +0000 Subject: [PATCH 2/8] Update directory --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index ee09790ed64d..d235dad6ad9a 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -452,6 +452,7 @@ * [Verhoeff](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/Verhoeff.java) * scheduling * [FCFSScheduling](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/FCFSScheduling.java) + * [MLFQScheduler](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java) * [PreemptivePriorityScheduling](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/PreemptivePriorityScheduling.java) * [RRScheduling](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/RRScheduling.java) * [SJFScheduling](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/SJFScheduling.java) @@ -893,6 +894,7 @@ * [WorstFitCPUTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/WorstFitCPUTest.java) * scheduling * [FCFSSchedulingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/FCFSSchedulingTest.java) + * [MLFQSchedulerTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/MLFQSchedulerTest.java) * [PreemptivePrioritySchedulingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/PreemptivePrioritySchedulingTest.java) * [RRSchedulingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/RRSchedulingTest.java) * [SJFSchedulingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/SJFSchedulingTest.java) From 84bdc84807a59ca7bc829d9eb115bb46d0a3a547 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Sat, 5 Oct 2024 10:35:52 +0530 Subject: [PATCH 3/8] Fix clang errors --- src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java | 3 ++- .../java/com/thealgorithms/scheduling/MLFQSchedulerTest.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java b/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java index c041cf4eb36d..ac4f184808dd 100644 --- a/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java +++ b/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java @@ -131,8 +131,9 @@ public Process(int pid, int burstTime, int arrivalTime) { */ public void execute(int timeSlice) { remainingTime -= timeSlice; - if (remainingTime < 0) + if (remainingTime < 0) { remainingTime = 0; + } } /** diff --git a/src/test/java/com/thealgorithms/scheduling/MLFQSchedulerTest.java b/src/test/java/com/thealgorithms/scheduling/MLFQSchedulerTest.java index 064aa7579d70..d7d27e9b32b6 100644 --- a/src/test/java/com/thealgorithms/scheduling/MLFQSchedulerTest.java +++ b/src/test/java/com/thealgorithms/scheduling/MLFQSchedulerTest.java @@ -26,7 +26,7 @@ void testMLFQScheduling() { @Test void testProcessCompletionOrder() { - int[] timeQuantums = { 3, 6, 9 }; + int[] timeQuantums = {3, 6, 9}; MLFQScheduler scheduler = new MLFQScheduler(3, timeQuantums); Process p1 = new Process(1, 10, 0); From d4d24dbd84f7290cbbca95a622beaca653086927 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Sat, 5 Oct 2024 10:42:11 +0530 Subject: [PATCH 4/8] Fix checkstyle errors --- src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java b/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java index ac4f184808dd..146f3218e2cc 100644 --- a/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java +++ b/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java @@ -10,7 +10,7 @@ */ public class MLFQScheduler { private Queue[] queues; // Multi-level feedback queues - private int timeQuantum[]; // Time quantum for each queue level + private int[] timeQuantum; // Time quantum for each queue level private int currentTime; // Current time in the system /** @@ -116,7 +116,7 @@ class Process { * @param burstTime CPU Burst Time (time required for the process) * @param arrivalTime Arrival time of the process */ - public Process(int pid, int burstTime, int arrivalTime) { + Process(int pid, int burstTime, int arrivalTime) { this.pid = pid; this.burstTime = burstTime; this.remainingTime = burstTime; From ad3d04fdb8b1e58246ac6ffc53915584b5064673 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Sat, 5 Oct 2024 10:46:39 +0530 Subject: [PATCH 5/8] Fix SpotBug error --- .../scheduling/MLFQScheduler.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java b/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java index 146f3218e2cc..a632fe2ee700 100644 --- a/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java +++ b/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java @@ -1,6 +1,8 @@ package com.thealgorithms.scheduling; +import java.util.ArrayList; import java.util.LinkedList; +import java.util.List; import java.util.Queue; /** @@ -9,7 +11,7 @@ * between queues depending on their CPU burst behavior. */ public class MLFQScheduler { - private Queue[] queues; // Multi-level feedback queues + private List> queues; // Multi-level feedback queues private int[] timeQuantum; // Time quantum for each queue level private int currentTime; // Current time in the system @@ -22,9 +24,9 @@ public class MLFQScheduler { * @param timeQuantums Time quantum for each queue level */ public MLFQScheduler(int levels, int[] timeQuantums) { - queues = new LinkedList[levels]; + queues = new ArrayList<>(levels); for (int i = 0; i < levels; i++) { - queues[i] = new LinkedList<>(); + queues.add(new LinkedList<>()); } timeQuantum = timeQuantums; currentTime = 0; @@ -36,7 +38,7 @@ public MLFQScheduler(int levels, int[] timeQuantums) { * @param p The process to be added to the scheduler */ public void addProcess(Process p) { - queues[0].add(p); + queues.get(0).add(p); } /** @@ -46,8 +48,8 @@ public void addProcess(Process p) { */ public void run() { while (!allQueuesEmpty()) { - for (int i = 0; i < queues.length; i++) { - Queue queue = queues[i]; + for (int i = 0; i < queues.size(); i++) { + Queue queue = queues.get(i); if (!queue.isEmpty()) { Process p = queue.poll(); int quantum = timeQuantum[i]; @@ -60,11 +62,11 @@ public void run() { if (p.isFinished()) { System.out.println("Process " + p.pid + " finished at time " + currentTime); } else { - if (i < queues.length - 1) { + if (i < queues.size() - 1) { p.priority++; // Demote the process to the next lower priority queue - queues[i + 1].add(p); // Add to the next queue level + queues.get(i + 1).add(p); // Add to the next queue level } else { - queues[i].add(p); // Stay in the same queue if it's the last level + queue.add(p); // Stay in the same queue if it's the last level } } } From 4cb28598b72dab332446ecfabf1e1a77976d3e3e Mon Sep 17 00:00:00 2001 From: Hardvan Date: Sat, 5 Oct 2024 05:19:58 +0000 Subject: [PATCH 6/8] Update directory --- DIRECTORY.md | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index b9685902694b..75896fff6603 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -22,7 +22,7 @@ * [WordSearch](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/backtracking/WordSearch.java) * bitmanipulation * [BitSwap](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/BitSwap.java) - * [CountSetBits](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/CountSetBits.java) + * [CountSetBits](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/CountSetBits.java) * [HighestSetBit](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/HighestSetBit.java) * [IndexOfRightMostSetBit](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/IndexOfRightMostSetBit.java) * [IsEven](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/IsEven.java) @@ -69,7 +69,7 @@ * [HexaDecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/HexaDecimalToBinary.java) * [HexaDecimalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/HexaDecimalToDecimal.java) * [HexToOct](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/HexToOct.java) - * [IntegerToEnglish] (https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/IntegerToEnglish.java) + * [IntegerToEnglish](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/IntegerToEnglish.java) * [IntegerToRoman](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/IntegerToRoman.java) * [OctalToBinary](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/OctalToBinary.java) * [OctalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/OctalToDecimal.java) @@ -410,7 +410,7 @@ * [WordBoggle](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/misc/WordBoggle.java) * others * [ArrayLeftRotation](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/ArrayLeftRotation.java) - * [ArrayRightRotation](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/ArrayRightRotation.java) + * [ArrayRightRotation](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/ArrayRightRotation.java) * [BankersAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/BankersAlgorithm.java) * [BFPRT](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/BFPRT.java) * [BoyerMoore](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/BoyerMoore.java) @@ -560,8 +560,8 @@ * [CharactersSame](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/CharactersSame.java) * [CheckAnagrams](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/CheckAnagrams.java) * [CheckVowels](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/CheckVowels.java) - * [CountChar](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/CountChar.java) - * [CountWords](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/CountWords.java) + * [CountChar](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/CountChar.java) + * [CountWords](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/CountWords.java) * [HammingDistance](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/HammingDistance.java) * [HorspoolSearch](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/HorspoolSearch.java) * [Isomorphic](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Isomorphic.java) @@ -576,13 +576,13 @@ * [Pangram](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Pangram.java) * [PermuteString](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/PermuteString.java) * [RabinKarp](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/RabinKarp.java) - * [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/ReturnSubsequence.java) + * [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/ReturnSubsequence.java) * [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/ReverseString.java) * [ReverseStringRecursive](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java) * [ReverseWordsInString](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/ReverseWordsInString.java) * [Rotation](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Rotation.java) * [StringCompression](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/StringCompression.java) - * [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/StringMatchFiniteAutomata.java) + * [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/StringMatchFiniteAutomata.java) * [Upper](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Upper.java) * [ValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/ValidParentheses.java) * [WordLadder](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/WordLadder.java) @@ -607,7 +607,7 @@ * [WordSearchTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/backtracking/WordSearchTest.java) * bitmanipulation * [BitSwapTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/BitSwapTest.java) - * [CountSetBitsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/CountSetBitsTest.java) + * [CountSetBitsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/CountSetBitsTest.java) * [HighestSetBitTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/HighestSetBitTest.java) * [IndexOfRightMostSetBitTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/IndexOfRightMostSetBitTest.java) * [IsEvenTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/IsEvenTest.java) @@ -622,6 +622,7 @@ * [BlowfishTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/BlowfishTest.java) * [CaesarTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/CaesarTest.java) * [DESTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/DESTest.java) + * [HillCipherTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/HillCipherTest.java) * [PlayfairTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/PlayfairTest.java) * [PolybiusTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/PolybiusTest.java) * [RSATest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/RSATest.java) @@ -640,6 +641,7 @@ * [HexaDecimalToBinaryTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/HexaDecimalToBinaryTest.java) * [HexaDecimalToDecimalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/HexaDecimalToDecimalTest.java) * [HexToOctTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/HexToOctTest.java) + * [IntegerToEnglishTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/IntegerToEnglishTest.java) * [IntegerToRomanTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/IntegerToRomanTest.java) * [OctalToBinaryTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/OctalToBinaryTest.java) * [OctalToDecimalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/OctalToDecimalTest.java) @@ -993,8 +995,8 @@ * [CharacterSameTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/CharacterSameTest.java) * [CheckAnagramsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/CheckAnagramsTest.java) * [CheckVowelsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/CheckVowelsTest.java) - * [CountCharTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/CountCharTest.java) - * [CountWordsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/CountWordsTest.java) + * [CountCharTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/CountCharTest.java) + * [CountWordsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/CountWordsTest.java) * [HammingDistanceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/HammingDistanceTest.java) * [HorspoolSearchTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/HorspoolSearchTest.java) * [IsomorphicTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/IsomorphicTest.java) @@ -1007,13 +1009,13 @@ * [PalindromeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/PalindromeTest.java) * [PangramTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/PangramTest.java) * [PermuteStringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/PermuteStringTest.java) - * [ReturnSubsequenceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/ReturnSubsequenceTest.java) + * [ReturnSubsequenceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/ReturnSubsequenceTest.java) * [ReverseStringRecursiveTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java) * [ReverseStringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/ReverseStringTest.java) * [ReverseWordsInStringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/ReverseWordsInStringTest.java) * [RotationTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/RotationTest.java) * [StringCompressionTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/StringCompressionTest.java) - * [StringMatchFiniteAutomataTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/StringMatchFiniteAutomataTest.java) + * [StringMatchFiniteAutomataTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/StringMatchFiniteAutomataTest.java) * [UpperTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/UpperTest.java) * [ValidParenthesesTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/ValidParenthesesTest.java) * [WordLadderTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/WordLadderTest.java) From f6d9e44d1c69f96a3c63ce4476ff78299c1640ca Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Sat, 5 Oct 2024 10:51:46 +0530 Subject: [PATCH 7/8] Fix comment --- src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java b/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java index a632fe2ee700..75840a5cbdcf 100644 --- a/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java +++ b/src/main/java/com/thealgorithms/scheduling/MLFQScheduler.java @@ -17,8 +17,7 @@ public class MLFQScheduler { /** * Constructor to initialize the MLFQ scheduler with the specified number of - * levels - * and their corresponding time quantums. + * levels and their corresponding time quantums. * * @param levels Number of queues (priority levels) * @param timeQuantums Time quantum for each queue level From c261582760b1a06c4d3280d1c920d367e4d3469b Mon Sep 17 00:00:00 2001 From: siriak Date: Sun, 6 Oct 2024 07:06:49 +0000 Subject: [PATCH 8/8] Update directory --- DIRECTORY.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 1b946716dce6..d93dde3dffb6 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -42,6 +42,7 @@ * [AES](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/AES.java) * [AESEncryption](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/AESEncryption.java) * [AffineCipher](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/AffineCipher.java) + * [Autokey](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/Autokey.java) * [Blowfish](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/Blowfish.java) * [Caesar](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/Caesar.java) * [ColumnarTranspositionCipher](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/ciphers/ColumnarTranspositionCipher.java) @@ -203,6 +204,7 @@ * [SameTreesCheck](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/trees/SameTreesCheck.java) * [SegmentTree](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/trees/SegmentTree.java) * [SplayTree](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java) + * [Treap](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/trees/Treap.java) * [TreeRandomNode](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/trees/TreeRandomNode.java) * [TrieImp](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/trees/TrieImp.java) * [VerticalOrderTraversal](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/datastructures/trees/VerticalOrderTraversal.java) @@ -619,6 +621,7 @@ * ciphers * a5 * [LFSRTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/a5/LFSRTest.java) + * [AutokeyTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/AutokeyTest.java) * [BlowfishTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/BlowfishTest.java) * [CaesarTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/CaesarTest.java) * [DESTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/ciphers/DESTest.java) @@ -729,6 +732,7 @@ * [PreOrderTraversalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/PreOrderTraversalTest.java) * [SameTreesCheckTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/SameTreesCheckTest.java) * [SplayTreeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/SplayTreeTest.java) + * [TreapTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/TreapTest.java) * [TreeTestUtils](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/TreeTestUtils.java) * [TrieImpTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/TrieImpTest.java) * [VerticalOrderTraversalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/VerticalOrderTraversalTest.java)