(**)= 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