Skip to main content

Divide & Conquer -vs- Dynamic Programming



Both of the paradigm divide the main problem into sub-problems and solve sub-problems. But in Dynamic Programming approach sub-problems are not solved independently. In this case, results of the sub-problems are remembered and used for similar sub-problems.

When to choose which one?

Divide and Conquer should be used when small sub-problems are not evaluated many times. In this scenario, we should use Dynamic Programming approach or Memorization.

For example, in Binary Search, we never evaluate the same sub-problems again. So, we should use Divide and Conquer approach here. On the other hand, for calculating nth number of Fibonacci series, we need to remember the previous calculation because its next number always comes by adding the previous two numbers. Like:
0  1   1  2  3  5  8  13  21........
So, in this type of scenario we should use Dynamic Programming approach.


Some standard algorithms that use Divide and Conquer approach are:
  1. Binary Search
  2. Merge Sort
  3. Quick Sort
  4. Strassen's Algorithm
  5. Closest Pair of Points
  6.  Cooley-Turkey fast Fourier Transform Algorithm.

Some standard algorithms that use Dynamic Programming approach are:
  1. Fibonacci Number Series
  2. Tower of Hanoi
  3. Knapsack Problem
  4. Shortest Path of Dijkstra
  5. All pair Shortest path by Floyed-Warshall
  6. Project Scheduling

Comments

Popular posts from this blog

Difference between abstract class and interface in OOP

Source: Amit Sethi In Interface: > All variables must be public static final. > No constructors. An interface can not be instantiated using the new operator.   > All methods must be public abstract .  

DFS Performance Measurement

Completeness DFS is not complete, to convince yourself consider that our search start expanding the left subtree of the root for so long path (maybe infinite) when different choice near the root could lead to a solution, now suppose that the left subtree of the root has no solution, and it is unbounded, then the search will continue going deep infinitely, in this case , we say that DFS is not complete. Optimality  Consider the scenario that there is more than one goal node, and our search decided to first expand the left subtree of the root where there is a solution at a very deep level of this left subtree , in the same time the right subtree of the root has a solution near the root, here comes the non-optimality of DFS that it is not guaranteed that the first goal to find is the optimal one, so we conclude that DFS is not optimal. Time Complexity Consider a state space that is identical to that of BFS, with branching factor b, and we start the search from th

Difference between a Singly LinkedList and Doubly LinkedList