“If you're thinking without writing, you only think you're thinking.” - Leslie Lamport

Representing graphs in Python

A simple mental model for working with graphs in Python using pointer-like assignments and node references.

The expected hitting and return times on a square

We explore the theory of Markov chains using a random walk around a square.

On the time complexity of computing the $n$th Fibonnaci number

We derive an interesting relationship between the number of additions required to compute the $n$th Fibonnaci number and the golden ratio $\varphi$.

A list of special data structures

If you have spent time grinding LeetCode, you know that certain patterns emerge. While every problem is unique, the underlying data structures used to solve them often repeat.

Direct Form I and Direct Form II implementations of IIR filters

We derive the Direct Form I and Direct Form II implementations of a discrete-time infinite impulse response (IIR) filter from first principles.

Squaring the square

We prove that every square can be partitioned into $n$ squares for every $n \geq 6$.

Fencepost errors

We describe what fencepost errors are, how to avoid them, and provide a precise derivation for why they occur.