Introduction

By considering a number of different algorithms, we can begin to develop pattern recognition so that the next time a similar problem arises, we are better able to solve it. There will often be trade-offs that we will need to identify and decide upon. Divide and conquer strategy, optimization problem, dynamic programming, and backtracking have mostly similar challenges and difficulties, such as constraints, recurrence relation, greedy, multiple objectives, discrete, and variables.

In order to tackle each of these difficulties, we need to know principals and general algorithms and master theorems in a practical approach to optimize the execution time of our algorithms.

Introduction
By considering a number of different algorithms, we can begin to develop pattern recognition so that the next time a similar problem arises, we are better able to solve it. There will often be trade-offs that we will need to identify and decide upon. Divide and conquer strategy, optimization problem, dynamic programming, and backtracking have mostly similar challenges and difficulties, such as constraints, recurrence relation, greedy, multiple objectives, discrete, and variables.
In order to tackle each of these difficulties, we need to know principals and general algorithms and master theorems in a practical approach to optimize the execution time of our algorithms. […]