From e34ec2dda09459ee429b98cfe441ec17693618cf Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Wed, 2 Oct 2024 16:43:04 +0530 Subject: [PATCH 1/5] Improve comments in SumOfSubset.java --- .../dynamicprogramming/SumOfSubset.java | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/dynamicprogramming/SumOfSubset.java b/src/main/java/com/thealgorithms/dynamicprogramming/SumOfSubset.java index dd48008bd21e..2b437c9becdb 100644 --- a/src/main/java/com/thealgorithms/dynamicprogramming/SumOfSubset.java +++ b/src/main/java/com/thealgorithms/dynamicprogramming/SumOfSubset.java @@ -1,18 +1,52 @@ package com.thealgorithms.dynamicprogramming; +/** + * A utility class that contains the Sum of Subset problem solution using + * recursion. + * + * The Sum of Subset problem determines whether a subset of elements from a + * given array sums up to a specific target value. + * + * Wikipedia: https://en.wikipedia.org/wiki/Subset_sum_problem + */ public final class SumOfSubset { + private SumOfSubset() { } + /** + * Determines if there exists a subset of elements in the array `arr` that + * adds up to the given `key` value. + * + * @param arr The array of integers. + * @param num The index of the current element being considered. + * @param key The target sum we are trying to achieve. + * @return true if a subset of `arr` adds up to `key`, false otherwise. + * + * This is a recursive solution that checks for two possibilities at + * each step: + * 1. Include the current element in the subset and check if the + * remaining + * elements can sum up to the remaining target. + * 2. Exclude the current element and check if the remaining elements + * can + * sum up to the target without this element. + */ public static boolean subsetSum(int[] arr, int num, int key) { + // Base case if (key == 0) { - return true; + return true; // subset sum found } if (num < 0 || key < 0) { - return false; + return false; // no more elements to consider or key is negative } + // Recursive case + + // Pick the current element and include it in the subset boolean include = subsetSum(arr, num - 1, key - arr[num]); + + // Don't pick the current element and exclude it from the subset boolean exclude = subsetSum(arr, num - 1, key); return include || exclude; From 29e5853010133a7ad635b7aa35fb988ecd1e6904 Mon Sep 17 00:00:00 2001 From: Hardvan Date: Thu, 3 Oct 2024 03:55:31 +0000 Subject: [PATCH 2/5] Update directory --- DIRECTORY.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 6f63a88b085a..9766c2f83589 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -451,6 +451,8 @@ * [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/TowerOfHanoi.java) * [TwoPointers](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/TwoPointers.java) * [Verhoeff](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/Verhoeff.java) + * Recursion + * [GenerateSubsets](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/Recursion/GenerateSubsets.java) * scheduling * [FCFSScheduling](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/FCFSScheduling.java) * [PreemptivePriorityScheduling](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/scheduling/PreemptivePriorityScheduling.java) @@ -893,6 +895,8 @@ * [TestPrintMatrixInSpiralOrder](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/TestPrintMatrixInSpiralOrder.java) * [TwoPointersTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/TwoPointersTest.java) * [WorstFitCPUTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/WorstFitCPUTest.java) + * Recursion + * [GenerateSubsetsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/Recursion/GenerateSubsetsTest.java) * scheduling * [FCFSSchedulingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/FCFSSchedulingTest.java) * [PreemptivePrioritySchedulingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/scheduling/PreemptivePrioritySchedulingTest.java) From e9636383e8d424973a9b148c8a65a8a6bb4be4ee Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Thu, 3 Oct 2024 09:26:45 +0530 Subject: [PATCH 3/5] Remove comments in function body --- .../dynamicprogramming/SumOfSubset.java | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/thealgorithms/dynamicprogramming/SumOfSubset.java b/src/main/java/com/thealgorithms/dynamicprogramming/SumOfSubset.java index 2b437c9becdb..b0bc2f4fed65 100644 --- a/src/main/java/com/thealgorithms/dynamicprogramming/SumOfSubset.java +++ b/src/main/java/com/thealgorithms/dynamicprogramming/SumOfSubset.java @@ -26,29 +26,20 @@ private SumOfSubset() { * This is a recursive solution that checks for two possibilities at * each step: * 1. Include the current element in the subset and check if the - * remaining - * elements can sum up to the remaining target. + * remaining elements can sum up to the remaining target. * 2. Exclude the current element and check if the remaining elements - * can - * sum up to the target without this element. + * can sum up to the target without this element. */ public static boolean subsetSum(int[] arr, int num, int key) { - // Base case if (key == 0) { - return true; // subset sum found + return true; } if (num < 0 || key < 0) { - return false; // no more elements to consider or key is negative + return false; } - // Recursive case - - // Pick the current element and include it in the subset boolean include = subsetSum(arr, num - 1, key - arr[num]); - - // Don't pick the current element and exclude it from the subset boolean exclude = subsetSum(arr, num - 1, key); - return include || exclude; } } From 630dee5f49fbe3f838aeac7f7f578242de13bf7e Mon Sep 17 00:00:00 2001 From: Hardvan Date: Fri, 4 Oct 2024 15:00:42 +0000 Subject: [PATCH 4/5] Update directory --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 24cd22f67d07..af5905d00747 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -238,6 +238,7 @@ * [KnapsackMemoization](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/KnapsackMemoization.java) * [LevenshteinDistance](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/LevenshteinDistance.java) * [LongestAlternatingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/LongestAlternatingSubsequence.java) + * [LongestArithmeticSubsequence](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/LongestArithmeticSubsequence.java) * [LongestCommonSubsequence](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/LongestCommonSubsequence.java) * [LongestIncreasingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/LongestIncreasingSubsequence.java) * [LongestPalindromicSubsequence](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/LongestPalindromicSubsequence.java) @@ -733,6 +734,7 @@ * [KnapsackTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/KnapsackTest.java) * [LevenshteinDistanceTests](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LevenshteinDistanceTests.java) * [LongestAlternatingSubsequenceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestAlternatingSubsequenceTest.java) + * [LongestArithmeticSubsequenceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestArithmeticSubsequenceTest.java) * [LongestIncreasingSubsequenceTests](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestIncreasingSubsequenceTests.java) * [LongestPalindromicSubstringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestPalindromicSubstringTest.java) * [LongestValidParenthesesTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestValidParenthesesTest.java) From b9aed0eddc8f1f08ac7e58ba849c40149e5de03f Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Fri, 4 Oct 2024 20:35:09 +0530 Subject: [PATCH 5/5] Fix comments --- .../java/com/thealgorithms/dynamicprogramming/SumOfSubset.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/dynamicprogramming/SumOfSubset.java b/src/main/java/com/thealgorithms/dynamicprogramming/SumOfSubset.java index b0bc2f4fed65..e9c15c1b4f24 100644 --- a/src/main/java/com/thealgorithms/dynamicprogramming/SumOfSubset.java +++ b/src/main/java/com/thealgorithms/dynamicprogramming/SumOfSubset.java @@ -16,7 +16,7 @@ private SumOfSubset() { /** * Determines if there exists a subset of elements in the array `arr` that - * adds up to the given `key` value. + * adds up to the given `key` value using recursion. * * @param arr The array of integers. * @param num The index of the current element being considered.