The study of algorithm includes many important and active areas of research. The course describes and use major algorithmic techniques (divide-and-conquer, dynamic programming, linear programming, greedy paradigm, and cite problems for which each technique is suitable. Evaluate and compare different algorithms using worst-, average-, and best-case analysis. Detail information about lower bound theory. Explain the difference between tractable and intractable problems, and identify the basic complexity classes, such as P, NP and NP- complete.