# Design & Analysis of Algorithm

Any mathematical problem which is to be solved using computers requires a specific algorithm designed for it. And once algorithm is ready it can be then converted to any of the programming language to make it workable on computer system. The most important property for any algorithm is to produce a correct output with in a feasible time and this time is always dependent on the input size of the problem. Higher the number of inputs to be processed, higher the execution time will be taken to produce an answer.

So in this subject we are going to read about what are the different factors that effect design of the algorithm, how to avoid the performance lag, how to define the limits for any input size, which techniques are used to solve the real world problems in terms of computer programs, and how to optimize the existing algorithm for certain problems.

Following are the **topics** which we are going to cover:

- Introduction
- Basic Algorithm Techniques
- Divide and Conquer Technique
- Greedy Technique
- Randomization Techniques
- Dynamic Programming Technique

- Graph Algorithms
- Introduction to graphs
- Breadth First Search & its Applications
- Depth First Search & its Applications
- Topological Sort
- Minimum Spanning Tree
- Dijkstra Algorithm
- Bellman ford Algorithm

- Sorting and Searching
- Linear Search
- Binary Search
- Bubble Sort
- Quick Sort
- Merge Sort
- Heap Sort
- Radix Sort
- Lower Bounds of Sorting
- Median and Order Statistics

- NP-completeness
- Introduction to problem classes
- 3SAT of NP-Complete
- Proving a problem to be NP-complete using polynomial-time reduction.
- Examples of NP-complete problems
- Approximation algorithms for various NP-complete problems

- Misc Topics
- Knuth_Monis-Pratt algorithm
- Convex hulls and its applications
- Fast Fourier Transform (FFT) and its applications
- Integer and polynomial arithmetic
- Strassen's algorithm

__References__

- Leiserson, Charles E., Ronald L. Rivest, and Clifford Stein.
*Introduction to algorithms*. Ed. Thomas H. Cormen. The MIT press, 2001.