Sunday, March 27, 2016

Algorithms 101

Algorithms that programmers should know 


First start with Linear data structures and algorithms.
·         Arrays
·         Linked List
·         Stack
·         Queues

Then move to basic algorithms:
·         Sorting - Merge Sort, Insertion Sort, Quick Sort, Number of inversions
·         Matrix Multiplication (just know the algo if not implement it)
·         Prime Sieving
·         Modular Math including multiplication and division
·         Euclidean Algorithm for GCD, Modular Inverse, Fast Exponentiation
·         Fibonacci number with matrix multiplication
·         Probability distribution and expected value
·         Stats - Mean, Median, Variance, Bayes theorem

The one can learn some popular algorithmic techniques:
·         Divide and Conquer - Binary Search, Maximum Subarray
·         Greedy Algorithms - Activity Selection, Huffman encoding
·         Dynamic Programming - Matrix Chain Multiplication, Knapsack,
·         Linear Programming - Variable Maximisation, Linear time sorting
·         String Algorithms - Manacher, LCS, Edit Distance

Then comes some typical non-linear data structures:
·         Trees - Binary Tree, General Tree, Lowest Common Ancestor
·         Binary Search Tree - Inorder Traversal, Level order traversal, finding kth largest element, diameter, depth, number of nodes, etc.
·         Heaps - Array Implementation, Heapify, Heap Sort
·         Union Find
·         Hash Table - Linear Probing, Open addressing, Collision avoidance


Then you can learn about Graphs:
·         Adjacency List, Adjacency Matrix, Weighted Edge Graphs
·         Basic Traversal algos - Breadth First Search, Depth First Search, etc
·         Shortest Path Finding Algorithm - Dijkstra, Floyd Warshal, Bellman Ford
·         Minimum Spanning Tree - Kruskal's Algo, Prim's Algo

Advance Tree and Graph :
·         Balanced Trees - AVL, Red-Black
·         Heavy Light Decomposition, B+ Trees, Quad Tree
·         Advance Graph - Min Cut, Max Flow
·         Maximum Matching - Hall's Marriage
·         Hamiltonian Cycle
·         Edge Graphs / Line Graphs
·         Strongly Connected Components
·         Dominant Sub-Graph, Vertex Cover, Travelling Salesman - Approx algos

Advance String Algorithms :
·         Knuth Morris Pratt Algorithm
·         Rabin Karp Algorithm
·         Tries and Compressed Tries
·         Prefix Trees, Suffix Trees, Suffix Automation - Ukkonen Algorithm

Advance Math:
·         Fast Fourier Tranformation
·         Primality Testing
·         Computational Geometry - Closest point pair, Voronoi diagram, Convex Hull

General Advance topics :
·         Iterating through all combination / permutation
·         Bit manipulation