From 74234daccb3caa090bb4aba4da30834e3f356b7a Mon Sep 17 00:00:00 2001 From: AasheeshLikePanner Date: Mon, 9 Oct 2023 21:12:13 +0530 Subject: [PATCH 1/3] Adding doctest and Changing code to return the list --- dynamic_programming/subset_generation.py | 76 +++++++++++++----------- 1 file changed, 40 insertions(+), 36 deletions(-) diff --git a/dynamic_programming/subset_generation.py b/dynamic_programming/subset_generation.py index 819fd8106def..2c6dc658f7d4 100644 --- a/dynamic_programming/subset_generation.py +++ b/dynamic_programming/subset_generation.py @@ -1,44 +1,48 @@ # Print all subset combinations of n element in given set of r element. -def combination_util(arr, n, r, index, data, i): +def subset_combinations_dp(elements, n): """ - Current combination is ready to be printed, print it - arr[] ---> Input Array - data[] ---> Temporary array to store current combination - start & end ---> Staring and Ending indexes in arr[] - index ---> Current index in data[] - r ---> Size of a combination to be printed + Generate all subset combinations of 'n' elements from 'elements' using dynamic programming. + + Args: + elements (list): The input list of elements. + n (int): The number of elements in each combination. + + Returns: + list: A list of tuples, where each tuple represents a combination. + + Examples: + >>> elements = [1, 2, 3, 4] + >>> n = 2 + >>> subset_combinations_dp(elements, n) + [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)] + + >>> elements = [1, 2, 3] + >>> n = 3 + >>> subset_combinations_dp(elements, n) + [(1, 2, 3)] + + >>> elements = [1, 2, 3] + >>> n = 0 + >>> subset_combinations_dp(elements, n) + [()] """ - if index == r: - for j in range(r): - print(data[j], end=" ") - print(" ") - return - # When no more elements are there to put in data[] - if i >= n: - return - # current is included, put next at next location - data[index] = arr[i] - combination_util(arr, n, r, index + 1, data, i + 1) - # current is excluded, replace it with - # next (Note that i+1 is passed, but - # index is not changed) - combination_util(arr, n, r, index, data, i + 1) - # The main function that prints all combinations - # of size r in arr[] of size n. This function - # mainly uses combinationUtil() - - -def print_combination(arr, n, r): - # A temporary array to store all combination one by one - data = [0] * r - # Print all combination using temporary array 'data[]' - combination_util(arr, n, r, 0, data, 0) + r = len(elements) + + dp = [[] for _ in range(r + 1)] + + dp[0].append([]) + + for i in range(1, r + 1): + for j in range(i, 0, -1): + for prev_combination in dp[j - 1]: + dp[j].append(prev_combination + [elements[i - 1]]) + + combinations = dp[n] + return combinations if __name__ == "__main__": - # Driver code to check the function above - arr = [10, 20, 30, 40, 50] - print_combination(arr, len(arr), 3) - # This code is contributed by Ambuj sahu + import doctest + doctest.testmod() From d0eb9eefd625fdb9a7ce802bffb9218c323ce395 Mon Sep 17 00:00:00 2001 From: AasheeshLikePanner Date: Mon, 9 Oct 2023 21:14:03 +0530 Subject: [PATCH 2/3] Adding doctest and Changing code to return the list --- dynamic_programming/subset_generation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dynamic_programming/subset_generation.py b/dynamic_programming/subset_generation.py index 2c6dc658f7d4..9cd17fce10d5 100644 --- a/dynamic_programming/subset_generation.py +++ b/dynamic_programming/subset_generation.py @@ -3,7 +3,7 @@ def subset_combinations_dp(elements, n): """ - Generate all subset combinations of 'n' elements from 'elements' using dynamic programming. + Generate all subset combinations of 'n' elements using dynamic programming. Args: elements (list): The input list of elements. From 2737b4a505e6726919b689cc48de26622d80b2b5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 15:46:56 +0000 Subject: [PATCH 3/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- dynamic_programming/subset_generation.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dynamic_programming/subset_generation.py b/dynamic_programming/subset_generation.py index 9cd17fce10d5..e19ff2de43c2 100644 --- a/dynamic_programming/subset_generation.py +++ b/dynamic_programming/subset_generation.py @@ -43,6 +43,8 @@ def subset_combinations_dp(elements, n): return combinations + if __name__ == "__main__": import doctest + doctest.testmod()