PHP Program for Subset Sum Problem | DP-25

Given a set of non-negative integers, and a value sum, determine if there is a subset of the given set with sum equal to given sum.
Example:
Input: set[] = {3, 34, 4, 12, 5, 2}, sum = 9
Output: True //There is a subset (4, 5) with sum 9.
Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.
Following is naive recursive implementation that simply follows the recursive structure mentioned above.
PHP
<?php // A recursive solution for subset sum problem // Returns true if there is a subset of set // with sun equal to given sum function isSubsetSum($set, $n, $sum) { // Base Cases if ($sum == 0) return true; if ($n == 0 && $sum != 0) return false; // If last element is greater // than sum, then ignore it if ($set[$n - 1] > $sum) return isSubsetSum($set, $n - 1, $sum); /* else, check if sum can be obtained by any of the following (a) including the last element (b) excluding the last element */ return isSubsetSum($set, $n - 1, $sum) || isSubsetSum($set, $n - 1, $sum - $set[$n - 1]); } // Driver Code $set = array(3, 34, 4, 12, 5, 2); $sum = 9; $n = 6; if (isSubsetSum($set, $n, $sum) == true) echo"Found a subset with given sum"; else echo "No subset with given sum"; // This code is contributed by Anuj_67 ?> |
Output:
Found a subset with given sum
We can solve the problem in Pseudo-polynomial time using Dynamic programming.
PHP
<?php // A Dynamic Programming solution for // subset sum problem // Returns true if there is a subset of // set[] with sun equal to given sum function isSubsetSum( $set, $n, $sum) { // The value of subset[i][j] will // be true if there is a subset of // set[0..j-1] with sum equal to i $subset = array(array()); // If sum is 0, then answer is true for ( $i = 0; $i <= $n; $i++) $subset[$i][0] = true; // If sum is not 0 and set is empty, // then answer is false for ( $i = 1; $i <= $sum; $i++) $subset[0][$i] = false; // Fill the subset table in bottom // up manner for ($i = 1; $i <= $n; $i++) { for ($j = 1; $j <= $sum; $j++) { if($j < $set[$i-1]) $subset[$i][$j] = $subset[$i-1][$j]; if ($j >= $set[$i-1]) $subset[$i][$j] = $subset[$i-1][$j] || $subset[$i - 1][$j - $set[$i-1]]; } } /* // uncomment this code to print table for (int i = 0; i <= n; i++) { for (int j = 0; j <= sum; j++) printf ("%4d", subset[i][j]); printf("n"); }*/ return $subset[$n][$sum]; } // Driver program to test above function $set = array(3, 34, 4, 12, 5, 2); $sum = 9; $n = count($set); if (isSubsetSum($set, $n, $sum) == true) echo "Found a subset with given sum"; else echo "No subset with given sum"; // This code is contributed by anuj_67. ?> |
Output:
Found a subset with given sum
Please refer complete article on Subset Sum Problem | DP-25 for more details!
<!–
–>

Php Program for Minimum product subset of an array

Php Program For Chocolate Distribution Problem

PHP Program for Largest Sum Contiguous Subarray

Php Program to Find maximum value of Sum( i*arr[i]) with only rotations on given array allowed

Php Program for Maximum sum of i*arr[i] among all rotations of a given array

Php Program for Maximum circular subarray sum

Php Program for Size of The Subarray With Maximum Sum

Php Program for Maximum equilibrium sum in an array

Php Program to Find a triplet such that sum of two equals to third element

Php Program for Count pairs with given sum




Please Login to comment…