(**)= Very Important
(*) = Important
You shall also understand the basic idea of the other topics.
Tools: ** probability and analyzing randomized algorithms ** divide and conquer, solving basic recurrence ** dynamic programming ** greedy algorithms ** amortized analysis ** aymptotic Analysis Data Structure: *analysis of treap *union find O(log*n) analysis of union find splay trees Fibonacci heaps *Analysis of Bionomial heaps Graph Algorithms: **DFS strongly connected components *algorithms for shortest path *max flow min cut Theorem **Ford Fulkerson algorithms for max flow Edmond-Karp's algorithm for max flow **applications of max flow *minimum spanning tree (Prim's algorithm and Kruskal's algorithm) Other Problems: **analysis of quicksort **randomized algorithm for selecting the median deterministic algorithm for selecting the median string Matching based on DFA *KMP algorithm for string matching *Integer Multiplication Matrix Multiplication FFT and Polynomial Multiplication FFT based string matching algorithm NP-Completeness and Approximation Algorithm: **Definition of P,NP, coNP Cook-Levin Theorem **Polynomial time reduction *Approximation algorithms