Blog

Notes on data structures & algorithms, system design, and things I learn along the way.

Learning DSA? Follow the structured path — ordered articles from recursion to dynamic programming.
July 16, 2026KMP String Matching: Search Without Backtracking5 min read

The naive substring search re-checks characters it's already seen and degrades to O(nm) on adversarial input. The Knuth-Morris-Pratt algorithm precomputes a failure table so the search pointer never moves backward, guaranteeing O(n + m).

#DSA
July 15, 2026Dijkstra's Algorithm: Shortest Paths With a Priority Queue4 min read

BFS finds shortest paths when every edge costs the same. Dijkstra's algorithm generalizes that to weighted graphs by always expanding the closest unvisited node next — the algorithm behind every routing map you've used.

#DSA
July 15, 2026Merge Intervals and Greedy Interval Scheduling5 min read

Calendar conflicts, meeting rooms, and 'maximum non-overlapping tasks' are all interval problems that collapse into a single sort-then-scan pattern once you pick the right key to sort by.

#DSA
July 14, 2026Bloom Filters: Probably in the Set, Definitely Not4 min read

A probabilistic data structure that answers set-membership queries in constant space by allowing false positives but never false negatives — and why Chrome, Cassandra, and CDNs all rely on that trade.

#DSA#System Design
July 14, 2026Segment Trees: Range Queries in O(log n)5 min read

When an array changes and you still need fast range sum, min, or max queries, prefix sums stop working. Segment trees answer both range queries and point updates in logarithmic time.

#DSA
July 13, 2026Backtracking: Brute Force with an Undo Button4 min read

One template solves permutations, subsets, N-Queens, and Sudoku. Learn the choose–explore–unchoose pattern and how pruning turns exponential search into something usable.

#DSA
July 13, 2026Big-O Notation: A Practical Guide for Working Developers5 min read

What Big-O actually measures, how to read a function's complexity straight from its shape, and why O(n log n) beats O(n²) long before n gets big.

#DSA
July 13, 2026Stacks and Queues: Two Rules That Run Your Whole Program5 min read

LIFO and FIFO look trivial until you notice they power your call stack, undo history, browser navigation, and every BFS. Plus the classic interview patterns for each.

#DSA
July 13, 2026Topological Sort: Putting Dependencies in Order5 min read

Build systems, package managers, and course schedulers all answer the same question: what order satisfies every dependency? Kahn's algorithm answers it — and detects impossible cycles.

#DSA
July 13, 2026Union-Find: Connectivity in (Almost) Constant Time5 min read

The disjoint set union structure answers 'are these two connected?' in near-O(1) — with two optimizations you can write in twenty lines. Includes Kruskal's MST and cycle detection.

#DSA
July 11, 2026Bit Manipulation Fundamentals3 min read

The operators every developer half-remembers — AND, OR, XOR, shifts — and the handful of tricks that turn them into fast, elegant solutions.

#DSA
July 11, 2026Tries: Searching by Prefix4 min read

The data structure behind autocomplete and spellcheck. How a trie stores words as shared character paths, and why lookups cost the length of the word — not the size of the dictionary.

#DSA
July 10, 2026Heaps and the Priority Queue4 min read

How a heap keeps the smallest (or largest) element one lookup away, why it's stored in a plain array, and the sift-up/sift-down operations that keep it valid.

#DSA
July 10, 2026Linked Lists and Floyd's Cycle Detection3 min read

Why linked lists still matter, and the two-pointer trick that detects a loop in one pass with no extra memory — the famous tortoise and hare.

#DSA
July 9, 2026Dynamic Programming: From Memoization to Tables3 min read

DP is not a scary black box — it's recursion that stops repeating itself. Follow one problem from exponential recursion to a linear table, one cell at a time.

#DSA
July 9, 2026Graph Traversal: BFS and DFS Side by Side3 min read

Breadth-first and depth-first search are the same algorithm with one data structure swapped. See both walk the same graph, and learn which to reach for.

#DSA
July 8, 2026Recursion and the Call Stack: What Actually Happens3 min read

Recursion feels like magic until you see the call stack. Here's the mechanical picture — frames pushing and popping — plus base cases, stack overflows, and tail calls.

#DSA
July 8, 2026Two Pointers and the Sliding Window3 min read

Two of the highest-leverage array patterns in interviews and real code — how they turn nested O(n²) loops into a single O(n) pass, and when each one applies.

#DSA
July 6, 2026Binary Search and BSTs: Halving Your Way to O(log n)5 min read

How binary search eliminates half the problem with every comparison, and how binary search trees turn the same idea into a data structure — with interactive animations.

#DSA
July 6, 2026Hash Maps Under the Hood: Why O(1) Comes With an Asterisk5 min read

How hash maps actually work — hashing, buckets, collisions, and resizing — with an animated walkthrough and a from-scratch implementation.

#DSA
July 6, 2026Building an LRU Cache From Scratch4 min read

Why the classic interview question is really a lesson in composing data structures — with an animated walkthrough and two working implementations.

#DSA#System Design
July 6, 2026Quick Sort and Heap Sort: The In-Place O(n log n) Sorts6 min read

A visual walkthrough of quick sort and heap sort — how partitioning and heaps achieve O(n log n) without merge sort's extra memory, with animated demos and code in Java and JavaScript.

#DSA
July 5, 2026Sorting Algorithms Explained: Bubble, Selection, Insertion, and Merge Sort5 min read

A visual, hands-on walkthrough of four classic sorting algorithms with animated demos and code in both Java and JavaScript.

#DSA