Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add tests and cleanup sum_of_subsets algorithm (TheAlgorithms#12746)
* Add tests and cleanup sum_of_subsets algorithm.

* Update sum_of_subsets.py

* Update sum_of_subsets.py

* Update sum_of_subsets.py

* Update sum_of_subsets.py

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: Maxim Smolskiy <mithridatus@mail.ru>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
3 people authored May 22, 2025
commit e1115b5f15afa44deb4752483b9b456457f7e683
45 changes: 30 additions & 15 deletions backtracking/sum_of_subsets.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
"""
The sum-of-subsetsproblem states that a set of non-negative integers, and a
The sum-of-subsets problem states that a set of non-negative integers, and a
value M, determine all possible subsets of the given set whose summation sum
equal to given M.

Summation of the chosen numbers must be equal to given number M and one number
can be used only once.
"""

from __future__ import annotations

def generate_sum_of_subsets_solutions(nums: list[int], max_sum: int) -> list[list[int]]:
"""
The main function. For list of numbers 'nums' find the subsets with sum
equal to 'max_sum'

>>> generate_sum_of_subsets_solutions(nums=[3, 34, 4, 12, 5, 2], max_sum=9)
[[3, 4, 2], [4, 5]]
>>> generate_sum_of_subsets_solutions(nums=[3, 34, 4, 12, 5, 2], max_sum=3)
[[3]]
>>> generate_sum_of_subsets_solutions(nums=[3, 34, 4, 12, 5, 2], max_sum=1)
[]
"""

def generate_sum_of_subsets_soln(nums: list[int], max_sum: int) -> list[list[int]]:
result: list[list[int]] = []
path: list[int] = []
num_index = 0
Expand All @@ -34,7 +44,21 @@ def create_state_space_tree(
This algorithm follows depth-fist-search and backtracks when the node is not
branchable.

>>> path = []
>>> result = []
>>> create_state_space_tree(
... nums=[1],
... max_sum=1,
... num_index=0,
... path=path,
... result=result,
... remaining_nums_sum=1)
>>> path
[]
>>> result
[[1]]
"""

if sum(path) > max_sum or (remaining_nums_sum + sum(path)) < max_sum:
return
if sum(path) == max_sum:
Expand All @@ -51,16 +75,7 @@ def create_state_space_tree(
)


"""
remove the comment to take an input from the user

print("Enter the elements")
nums = list(map(int, input().split()))
print("Enter max_sum sum")
max_sum = int(input())
if __name__ == "__main__":
import doctest

"""
nums = [3, 34, 4, 12, 5, 2]
max_sum = 9
result = generate_sum_of_subsets_soln(nums, max_sum)
print(*result)
doctest.testmod()