Open In App

Algorithms | Analysis of Algorithms (Recurrences) | Question 3

Like Article
Like
Save
Share
Report

What is the worst case time complexity of following implementation of subset sum problem. 

C


// Returns true if there is a subset of set[] with sum equal to given sum
bool isSubsetSum(int set[], int n, int 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]);
}


(A)

O(n * 2^n)

(B)

O(n^2)

(C)

O(n^2 * 2^n)

(D)

O(2^n)



Answer: (D)

Explanation:

Following is the recurrence for given implementation of subset sum problem T(n) = 2T(n-1) + C1 T(0) = C1 Where C1 and C2 are some machine specific constants. The solution of recurrence is O(2^n) We can see it with the help of recurrence tree method

           C1
       /       \\
    T(n-1)     T(n-1) 


                    C1
                /       \\
              C1           C1
           /     \\        /    \\
      T(n-2)  T(n-2)   T(n-2)  T(n-2)

                    C1
                /       \\
              C1           C1
           /     \\        /    \\
          C1     C1      C1     C1
        /   \\   /  \\    /  \\   /  \\

       
If we sum the above tree level by level, we get the following series
T(n) = C1 + 2C1 + 4C1 + 8C1 + ...
The above series is Geometrical progression and there will be n terms in it.
So T(n) = O(2^n)    


Quiz of this Question
Please comment below if you find anything wrong in the above post


Last Updated : 28 Jun, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads