-
-
Notifications
You must be signed in to change notification settings - Fork 46.8k
Changes the code To return the list in dynamic_programming/subset_generation.py #10191
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 6 commits
dde13de
0a24286
78699e6
2428546
80bd835
0ea1892
f79c742
29f67cf
2950699
2a9f506
3d8fe15
9ea41a3
7615e52
314541d
bc02834
c455a31
9088b31
916b533
5aa6f60
1669f13
1abe2f3
bb18a8e
3385a1e
392de54
0116388
afd8d56
a746cd6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,44 +1,52 @@ | ||||||||||||||||||||||||||||
# Print all subset combinations of n element in given set of r element. | ||||||||||||||||||||||||||||
# return 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: list, n: int) -> list: | ||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||
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 | ||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||
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) | ||||||||||||||||||||||||||||
Generate all possible combinations of n elements from the given list of elements using dynamic programming. | ||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||
elements (list): The list of elements from which combinations will be generated. | ||||||||||||||||||||||||||||
n (int): The number of elements in each combination. | ||||||||||||||||||||||||||||
Returns: | ||||||||||||||||||||||||||||
list: A list of tuples, each representing a combination of n elements. | ||||||||||||||||||||||||||||
>>> subset_combinations_dp(elements=[10, 20, 30, 40], n=2) | ||||||||||||||||||||||||||||
[(10, 20), (10, 30), (20, 30), (10, 40), (20, 40), (30, 40)] | ||||||||||||||||||||||||||||
>>> subset_combinations_dp(elements=[1, 2, 3], n=1) | ||||||||||||||||||||||||||||
[(1,), (2,), (3,)] | ||||||||||||||||||||||||||||
>>> subset_combinations_dp(elements=[1, 2, 3], n=3) | ||||||||||||||||||||||||||||
[(1, 2, 3)] | ||||||||||||||||||||||||||||
>>> subset_combinations_dp(elements=[42], n=1) | ||||||||||||||||||||||||||||
[(42,)] | ||||||||||||||||||||||||||||
>>> subset_combinations_dp(elements=[1, 2, 3, 4, 5], n=3) | ||||||||||||||||||||||||||||
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4), (1, 2, 5), (1, 3, 5), (2, 3, 5), (1, 4, 5), (2, 4, 5), (3, 4, 5)] | ||||||||||||||||||||||||||||
>>> subset_combinations_dp(elements=[6, 7, 8, 9], n=4) | ||||||||||||||||||||||||||||
[(6, 7, 8, 9)] | ||||||||||||||||||||||||||||
>>> subset_combinations_dp(elements=[10, 20, 30, 40, 50], n=0) | ||||||||||||||||||||||||||||
[()] | ||||||||||||||||||||||||||||
>>> subset_combinations_dp(elements=[1, 'apple', 3.14], n=2) | ||||||||||||||||||||||||||||
[(1, 'apple'), (1, 3.14), ('apple', 3.14)] | ||||||||||||||||||||||||||||
>>> subset_combinations_dp(elements=['single'], n=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(tuple(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 | ||||||||||||||||||||||||||||
print(f"{subset_combinations_dp(elements=[10, 20, 30, 40], n=2) = }") | ||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have changed the code now code giving the list sorted order There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
import doctest | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
doctest.testmod() |
Uh oh!
There was an error while loading. Please reload this page.