-
-
Notifications
You must be signed in to change notification settings - Fork 46.6k
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
Merged
cclauss
merged 27 commits into
TheAlgorithms:master
from
AasheeshLikePanner:FixingIssuereturntupple
Oct 15, 2023
Merged
Changes from 16 commits
Commits
Show all changes
27 commits
Select commit
Hold shift + click to select a range
dde13de
Changing the code to return tuple
AasheeshLikePanner 0a24286
Changing the code to return tuple
AasheeshLikePanner 78699e6
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] 2428546
Update dynamic_programming/subset_generation.py
AasheeshLikePanner 80bd835
Adding doctests in subset_generation.py
AasheeshLikePanner 0ea1892
Merge remote-tracking branch 'origin/FixingIssuereturntupple' into Fi…
AasheeshLikePanner f79c742
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] 29f67cf
Update subset_generation.py
AasheeshLikePanner 2950699
Merge remote-tracking branch 'origin/FixingIssuereturntupple' into Fi…
AasheeshLikePanner 2a9f506
Update subset_generation.py
AasheeshLikePanner 3d8fe15
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] 9ea41a3
Update subset_generation.py
AasheeshLikePanner 7615e52
Merge remote-tracking branch 'origin/FixingIssuereturntupple' into Fi…
AasheeshLikePanner 314541d
Update subset_generation.py
AasheeshLikePanner bc02834
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] c455a31
Update dynamic_programming/subset_generation.py
AasheeshLikePanner 9088b31
Update stock_span_problem.py
AasheeshLikePanner 916b533
Merge remote-tracking branch 'origin/FixingIssuereturntupple' into Fi…
AasheeshLikePanner 5aa6f60
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] 1669f13
Update subset_generation.py
AasheeshLikePanner 1abe2f3
Merge remote-tracking branch 'origin/FixingIssuereturntupple' into Fi…
AasheeshLikePanner bb18a8e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] 3385a1e
Update subset_generation.py
AasheeshLikePanner 392de54
Merge remote-tracking branch 'origin/FixingIssuereturntupple' into Fi…
AasheeshLikePanner 0116388
Update subset_generation.py
AasheeshLikePanner afd8d56
Update subset_generation.py
cclauss a746cd6
Update subset_generation.py
cclauss File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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[int], 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 | ||
Compute n-element combinations from a given list 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=[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, 2, 3, 4], n=2) | ||
[(1, 2), (1, 3), (2, 3), (1, 4), (2, 4), (3, 4)] | ||
>>> 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) | ||
[()] | ||
""" | ||
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: list[list[tuple]] = [[] 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) = }") | ||
|
||
import doctest | ||
|
||
doctest.testmod() |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
subset_combinations_dp()
should work the same way asitertools.combinations()
. It should present the same sort order and raise the same exceptions.There was a problem hiding this comment.
Choose a reason for hiding this comment
The 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 comment
The reason will be displayed to describe this comment to others. Learn more.
itertools.combinations([1, 'apple', 3.14], 2)