# THE PLAN

PHASE 1 :

1. Array
2. Linked List – Single and Doubly and Circular
3. Stack
4. Queues
5. Hashing
6. Sorting
– SBI (selection, bubble, insertion)
– Merge sort
– Heap sort (learn this later when you understand graphs/trees)
– Quick sort (mainly, hoare’s partition scheme)
– Use quick sort everywhere, it worked well for all algorithms.
7. Search Algo
8. String
– string reverse, palindrome
– substring, prefix, suffix, border
— anagram
– Searching for pattern
— Naive – compare each char of Pattern (P) to each char of text (T)
— KMP
— Boyer Moore
— LCP array – 1st entry is undefined, other entries are longest common                               prefix lengths of (1st and 0th index of Suffix array of a string, & so on)
— [Skip] –  Suffix array – simply, indexes of sorted suffixes of a string – oh this is very
important, saves a lot of run time, so your tests pass easily.
9.  Tree
— Heaps
— Trie
— BFS
— DFS
—  Pre-order – node, left, then right
—  Post-order – left, right then node
—  In-order – left, node, then right
—  Binary Tree – max 2 nodes
– Binary Search Tree – max 2 nodes, left < root < right
—  BST to preorder, postorder, or inorder
—  preorder array to BST (interview question too)
– Trees – multi nodes
10. Graph Theory – Graph
–  Adjacency matrix – simple 2d array – easy but requires a lot of memory –                        (mostly no body uses)
– Adjacency list – array of (varying length) arrays – saves a lot of memory –
(everybody uses)
– BFS
– DFS
—  Pre-order – node, left, then right
—  Post-order – left, right then node
—  In-order – left, node, then right
– Dijkstra
– Floyd Warshal – beautiful algorithm- N power N is now N power 3
– Bellman Ford
– Kruskal’s and Prim’s – traverse all nodes of graph once, i.e. minimum spanning
tree
– Segment Tree
– Hamiltonian path & cycle, also graph
– Euler path & cycle, also graph
11. Bit manipulation
– bitwise AND &
– bitwise OR |
– ** bitwise XOR ^
– Binary index tree (BIT) / Fenwick tree – Another beautiful tree (actually array) – Store only left subtree’s value (say, sum) at a node – Easy to modify, etc.

PHASE 2:

1. OS – Threads, Processes and Locks using Mutex, Semaphores (Operating systems Archives – GeeksforGeeks)
2. Design Patterns
3. Go through all articles and good concept
4. Mysql and Redis Concept