Subset Construction: Trading States for Determinism
An NFA can be in multiple states simultaneously as it processes input, which makes it flexible to construct (as Thompson's construction demonstrates) but awkward to simulate efficiently. Subset construction converts any NFA into an equivalent DFA by treating each set of NFA states the NFA could simultaneously be in as a single new DFA state — trading a potentially exponential blow-up in state count for the simplicity of tracking exactly one state at a time during execution.
The algorithm starts from the epsilon-closure of the NFA's start state (every state reachable via epsilon transitions with no input consumed), then for each input symbol, computes the epsilon-closure of wherever all current NFA states could transition to — that new set becomes a new DFA state if it hasn't been seen before. This continues until no new state sets appear, at which point the DFA is complete.
In the worst case, an NFA with n states can produce a DFA with up to 2^n states, though in practice most real automata produce far fewer reachable subsets than the theoretical maximum — verifying this construction by hand on a small example is exactly how automata theory courses build intuition for why NFAs and DFAs are equivalent in recognizing power despite looking so structurally different.