find all subsets that sum to a particular value
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.
Introduction
Finding all subsets that sum to a particular value is a classic problem in computer science and mathematics. Known as the "subset sum problem," it is a fundamental problem in combinatorics and algorithm design. This problem has applications in various domains including cryptography, resource allocation, and decision-making.
The subset sum problem is defined as follows: Given a set of integers and a target sum, determine all subsets of the given set whose elements sum to the target sum. This problem is a special case of the knapsack problem, which is NP-complete, meaning there is no known polynomial-time algorithm that solves it for all cases.
Problem Formulation
Given a set and a target sum , find all possible subsets of such that the sum of the elements in each subset equals .
Example
Let's consider an example to understand the problem better:
• Set • Target Sum
For this example, the subsets of that sum to are:
• •
Techniques for Solving the Subset Sum Problem
There are multiple approaches to solve the subset sum problem. Here, we will discuss a few common algorithms:
1. Recursive Approach (Brute Force)
A simple approach involves recursively generating all subsets of the given set and checking each subset for the target sum. This method has an exponential time complexity of , which arises from the need to evaluate all possible subsets of the set.
Recursive Algorithm
- If the sum of the current subset is equal to the target sum, record the subset.
- Recursively consider the next element: • Include the element in the current subset and check for the target sum. • Exclude the element and continue the search.
This approach is straightforward but inefficient for large sets due to its exponential time complexity.
2. Dynamic Programming
The dynamic programming approach aims to improve efficiency by breaking the problem down into simpler subproblems and storing the results of these subproblems to avoid redundant calculations.
Dynamic Programming Algorithm
The dynamic programming solution is based on creating a 2-dimensional boolean array , where will be true
if a subset of the first elements of the set sums up to . Here's how it works:
- Initialize a array of size , where is the number of elements in the given set, and is the target sum.
- Set to
truefor all , as a sum of can always be achieved by selecting no elements. - Iterate over the set and fill the dp array: • For each element and for each possible sum from to , set to
trueif: • istrue, or • istrue. - The array will indicate if there is a subset that sums to .
The complexity of this approach is , which is more feasible for large values of and compared to the recursive approach.
3. Meet in the Middle
The "meet in the middle" strategy is useful for solving subset sum problems where the number of elements is large. This approach divides the set into two halves and evaluates the subsets of each half separately.
Meet in the Middle Algorithm
- Split the set into two halves.
- Calculate all subset sums for each half.
- Check if any pair of sums from the two halves adds up to the target sum.
This approach has a time complexity of , which is a significant improvement over the recursive method for larger sets.
Example Code Implementation
Dynamic Programming Example in Python
Here is an example of how the dynamic programming approach can be implemented in Python:
Related reading
- Find all substrings that are palindromes
- Find all the paths forming simple cycles on an undirected graph
- Find an algorithm to balance this game
- Find an algorithm to win this battle against crime!
- Find all the 4 digit vampire numbers
- Find all the quadruples a, b, c, d where a3 b3 c3 d3 when 1 a, b, c or d 10000
- Find an element in an array recursively
- Find common elements from two very large Arrays

DSA Fundamentals
Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.