All-Pairs Shortest-Paths (Floyd-Warshall Algorithm)
Floyd–Warshall all-pairs shortest paths: DP recurrence, intuition, and Python example
The following posts contain some materials from the algorithm series (6.006, 6.046 and 6.851) at MIT.
Floyd–Warshall all-pairs shortest paths: DP recurrence, intuition, and Python example
Dijkstra’s algorithm: relaxation, invariants, and priority-queue runtime tradeoffs
A compact Big-O cheat sheet for core Java Collections Framework operations
Huffman coding: prefix-free codes, greedy merging, and heap-based runtime analysis
Fractional knapsack: value-density greedy strategy and why it differs from 0-1 knapsack
DP vs greedy through activity selection: optimal substructure, greedy choice, pseudocode
DP practice set: Fibonacci, max-subarray, 0-1 knapsack, and LCS intuition
Rod-cutting as DP: brute force vs memoization vs bottom-up, plus solution reconstruction
AVL trees: balance invariants, rotations, and why height stays O(log n)
Binary search trees: core operations, successors, insertion, and deletion via transplant
Tree terminology, traversals, and a few practical iterative traversal tricks
Hash tables from direct addressing to chaining and open addressing, with probe analysis
Doubly linked lists with and without sentinels, plus search/insert/delete pseudocode
Priority queue via max-heap: extract-max, increase-key, insert, and heapify mechanics
Stack and circular queue pseudocode with overflow/underflow checks and wrap-around logic
Bucket sort for roughly uniform inputs, with insertion sort per bucket and runtime notes
Radix sort from least-significant digit upward, and why stability is required
Decision trees for comparison sorts, and why comparison sorting needs Ω(n log n)
Stable counting sort in Θ(n+k), with pseudocode and Scala/Python implementations
Randomized quicksort: random pivots to avoid adversarial inputs and worst-case splits
Quicksort partitioning intuition, loop invariants, and best/average/worst-case analysis
Heap sort explained with max-heapify intuition, CLRS notes, and sample implementations
Merge sort via divide-and-conquer, with sentinels, recursion tree analysis, and code
Iterative + recursive insertion sort, with complexity notes and Python/Scala examples