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

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