Design and Analysis of Algorithm Tutorial
Design and Analysis of Algorithms is a fundamental area in computer science that focuses on understanding how to solve problems efficiently using algorithms. It is about designing algorithms that are not only correct but also optimal, taking into account factors like time and space efficiency.
Algorithm design is the process of developing a step-by-step procedure to solve a specific problem. Various techniques can be used for designing algorithms, including:
- Divide and Conquer: Divides the problem into smaller sub-problems, solves each sub-problem independently, and combines the results. Example: Merge Sort, Quick Sort.
- Greedy Algorithms: Focuses on making the locally optimal choice at each stage in the hope of finding the global optimum. Example: Huffman Encoding.
- Dynamic Programming: Breaks down a problem into simpler overlapping sub-problems and solves each sub-problem only once, storing the results. Example: Fibonacci Sequence, Knapsack Problem.
- Backtracking: Solves problems incrementally and abandons solutions that are not viable. Example: Solving a Sudoku puzzle.

Introduction to Algorithm Analysis
- Algorithms
- Importance of Analysis
- Order of Growth
- Asymptotic Analysis
- Worst, Average and Best Cases of Algorithms
- Big-O Notation
- Theta - Θ Notation
- Big – Ω (Big- Omega) Notation
- Time Complexity
- Space Complexity
- Algorithms Design Techniques
Iterative Algorithms
Divide and Conquer Algorithms
- Introduction to Divide and Conquer Algorithm
- Max & Min
- Binary Search Algorithm
- Merge Sort
- Quick Sort
- Strassen’s Matrix Multiplication
- Karatsuba algorithm for fast multiplication
- Master theorem for divide and conquer recurrences
- Recursion Tree method
Greedy Algorithms
- Introduction to Greedy Algorithm
- Greedy Algorithms General Structure
- Fractional Knapsack
- Job Sequencing Problem
- Optimal File Merge Patterns
- Huffman Coding
- Minimum Spanning Tree
- Dijkstra’s Algorithm
Dynamic Programming
- troduction to DP
- Tabulation vs Memoization
- Steps to solve a DP Problem
- Multistage Graph
- 0/1 Knapsack Problem
- Travelling Salesman Problem
- Longest Common Subsequence (LCS)
- Floyd Warshall Algorithm
- Bellman–Ford Algorithm
- Matrix Chain Multiplication
- Subset Sum Problem
Graph Algorithms
Heap Algorithms
Backtracking & Branch-Bound
- Introduction to Backtracking
- Backtracking vs Recursion
- Introduction to Branch and Bound
- Backtracking vs Branch and Bound
- N Queen Problem
- Hamiltonian Cycle
- Permutations of a String
NP Completeness
- Introduction to NP-Complete Complexity Classes
- P vs NP Problems
- NP-Hard Class
- Difference between NP hard and NP complete