Algorithms
http://macgyverdev.blogspot.se/2014/04/become-better-programmer-with.html
Algo visualization: http://www.comp.nus.edu.sg/~stevenha/visualization/
Lang: C99, C++14, Java8, Go, Python3
Learn: Haskell, Elixir/Erlang, Scala
OJ and competition
OJ Preps and Jobs
Algorithms
Maths
- http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/readings/MIT6_042JF10_notes.pdf
- Maths for computer science
Misc
- Topcoder Algo tutorials
- List of DS/Algo
- Geeks for geeks
- Refernce implementations
- Book: The Algo book by Robert Sedgewick
- Algorithms camp
- Humblefool’s CodeSchool Winter coding @ MyCodeSchool
- http://xlinux.nist.gov/dads/
- http://en.wikipedia.org/wiki/List_of_algorithms
- Competitive Programming v1
Problem types
Dynamic Programming
Greedy
Complete Search
Flood Fill
Shortest Path
Recursive Search Techniques
Minimum Spanning Tree
Knapsack
Computational Geometry
Network Flow
Eulerian Path
Two-Dimensional Convex Hull
BigNums
Heuristic Search
Approximate Search
Ad Hoc Problems
Gym
Gym 1 (Intro)
- Time Complexity and Big-O
- Divide & Conquer algorithms:
- Matrix multiplication
- Closest Pair
Gym 2 (Basic DS)
- Arrays
- Stack: Array based
- Stack: Linkedlist based
- Queue: Array based
- Queue: Linkedlist based
- Bags
- Lists: Array based
- Lists: Linked list based
- Multiset (maps)
- Quick Find
- Quick Union
- Weighted Quick Union
- Math
Gym 3 (Sorting)
- Bubble sort
- Selection sort
- Insertion sort
- Merge sort: recursive
- Merge sort: iterative
- Shell sort, 3-way sort
- 3-way quick sort
- Quick sort
- Heap sort
- Bucket sort
- Counting sort
- Binary Search
- Misc: bit manipulation, two pointers, strings
Gym 4 (Graphs)
- Undirected graphs
- Breadth First Search
- Depth First Search
- Shortest paths
- Connected components, Kosaraju-Sharir algorithm
- Cycle in graph
- Directed graph
- Digraph search
- Strong components
- Topological Sort (Using Indegree array)
- Topological Sort (Using DFS)
- Dijkstra’s Shortest Path
Gym 5 (Trees)
- Heaps, Binary heap: Min/max heaps, priority queue
- Convex Hull (Graham scan)
- Binary Search Trees
- Red-black trees
- Hash tables: separate chaining and linear probing
- KD-trees
Gym 6 (Misc)
- Bloom Filters
- Huffman coding
- Leftovers
Basics
Basic DS
- Arrays
- Stack: Array based
- Stack: Linkedlist based
- Queue: Array based
- Queue: Linkedlist based
- Bags
- Lists: Array based
- Lists: Linked list based
- Multiset (maps)
- Quick Find
- Quick Union
- Weighted Quick Union
Lesser used data structures
- Tries (prefix trees or crit-bit-trees
- Bloom Filter
- Rope (string ops)
- Skip list
- Spatial Indices: R-trees, kd-trees
- Zippers
- Suffix trie
- Splay trees
- Disjoint set
- Fibonacci heaps
- Huffman trees
- Circular/ring buffer
- Merkle tree
Recursion
- Factorial
- Factorial: tail recursion
- Reversing a string
- N-Queens Problem (ex: 8-queens problem)
Sorting
- Bubble sort
- Selection sort
- Insertion sort
- Merge sort: recursive
- Merge sort: iterative
- Shell sort, 3-way sort
- Quick sort
- Max Heap priority queue
- Min Heap priority queue
- Heap sort
- Bucket sort
- Counting sort
- Convex Hull
Searching
- Sequential search
- Binary search
- Separate chaining hash table
- Linear probing hash table
- Ordered set
- Whitelist filter
- Blacklist filter
- Dictionary lookup
- File indexing
Heap based DS
- Heaps
- Binomial Heaps
- Fibonacci Heaps
- Leftist heaps
- Skew heaps
Trees (Indexing)
- Binary Search Tree (BST)
- AVL Tree (Balanced BST)
- Red Black Tree
- Graham scan
- Splay Tree
- Open Hash Table (Closed addressing)
- Closed Hash Table (Open addressing)
- Close Hash Table, using buckets
- B Tree
- B+ Tree
- Interval Search Trees
- Ternary Search Tries
Graph
- Undirected graph
- Breadth First Search
- Depth First Search
- Connected components
- Cycle in graph
- Directed graph
- Digraph search
- Strong components
- Topological Sort (Using Indegree array)
- Topological Sort (Using DFS)
- Prim’s Minimum Cost (Minimal) Spanning Tree
- Kruskal Minimum Cost Spanning Tree Algorithm
- Dijkstra’s Shortest Path
- Floyd-Warshall (all pairs shortest paths)
- Bellman Ford algorithm
- Maximum flow: Ford-Fulkerson Algorithm
- Maximum flow: Maxflow-Mincut Theorem
Strings
- Radix sort (lsd, msd, 3-way)
- Trie (r-way, ternary search tries, multiway etc)
- Knuth-Morris-Pratt substring search
- Boyer-Moore substring search
- Rabin-Karp substring search
- NFA for regular expressions
- Grep
Compression
- Run length coding
- Huffman coding/compression
- LZW Compression
- Lempel-Ziv-Welch coding
- Burrows-Wheeler transform
Linear programming
- Brewer’s Problem
- Simplex Algorithm
- Linear programming reductions
Dynamic Programming
- Calculating nth Fibonacci number
- Making Change
- Longest Common Subsequence
Geometric Algorithms
- 2D Rotation and Scale Matrices
- 2D Rotation and Translation Matrices
- 2D Changing Coordinate Systems
- 3D Rotation and Scale Matrices
- 3D Changing Coordinate Systems
Misc
- Disjoint Sets
- Gaussian elimination
- Fast Fourier transform
- Intractibility, P vs NP, NP-completeness
- Log Structured Merge tree
- Merkel trees