DFA minimization

In automata theory (a branch of theoretical computer science), DFA minimization is the task of transforming a given deterministic finite automaton (DFA) into an equivalent DFA that has a minimum number of states. Here, two DFAs are called equivalent if they recognize the same regular language. Several different algorithms accomplishing this task are known and described in standard textbooks on automata theory.
Minimal DFA.
For each regular language, there also exists a minimal automaton that accepts it, that is, a DFA with a minimum number of states and this DFA is unique (except that states can be given different names). The minimal DFA ensures minimal computational cost for tasks such as pattern matching.
There are two classes of states that can be removed or merged from the original DFA without affecting the language it accepts to minimize it.
DFA minimization is usually done in three steps, corresponding to the removal or merger of the relevant states. Since the elimination of nondistinguishable states is computationally the most expensive one, it is usually done as the last step.
Unreachable states.
The state formula_1 of a deterministic finite automaton formula_2 is unreachable if no string formula_3 in formula_4 exists for which formula_5. In this definition, formula_6 is the set of states, formula_7 is the set of input symbols, formula_8 is the transition function (mapping a state and an input symbol to a set of states), formula_9is its extension to strings (aka extended transition function), formula_10 is the initial state, and formula_11 is the set of accepting (aka final) states. Reachable states can be obtained with the following algorithm:
let reachable_states := {q0};
let new_states := {q0};
do {
 temp := the empty set;
 for each q in new_states do
 for each c in Σ do
 temp := temp ∪ {p such that p = δ(q,c)};
 end;
 end;
 new_states := temp \ reachable_states;
 reachable_states := reachable_states ∪ new_states;
} while (new_states ≠ the empty set);
unreachable_states := Q \ reachable_states;
Unreachable states can be removed from the DFA without affecting the language that it accepts.
Nondistinguishable states.
Hopcroft's algorithm.
One algorithm for merging the nondistinguishable states of a DFA, due to , is based on partition refinement, partitioning the DFA states into groups by their behavior. These groups represent equivalence classes of the Myhill–Nerode equivalence relation, whereby every two states of the same partition are equivalent if they have the same behavior for all the input sequences. That is, for every two states and that belong to the same equivalence class within the partition , and every input word , the transitions determined by should always take states and to equal states, states that both accept, or states that both reject. It should not be possible for to take to an accepting state and to a rejecting state or vice versa.
The following pseudocode describes the algorithm:
P := {F, Q \ F};
W := {F, Q \ F};
while (W is not empty) do
 choose and remove a set A from W
 for each c in Σ do
 let X be the set of states for which a transition on c leads to a state in A
 for each set Y in P for which X ∩ Y is nonempty and Y \ X is nonempty do
 replace Y in P by the two sets X ∩ Y and Y \ X
 if Y is in W
 replace Y in W by the same two sets
 else
 if |X ∩ Y| <= |Y \ X|
 add X ∩ Y to W
 else
 add Y \ X to W
 end;
 end;
end;
The algorithm starts with a partition that is too coarse: every pair of states that are equivalent according to the Myhill–Nerode relation belong to the same set in the partition, but pairs that are inequivalent might also belong to the same set. It gradually refines the partition into a larger number of smaller sets, at each step splitting sets of states into pairs of subsets that are necessarily inequivalent.
The initial partition is a separation of the states into two subsets of states that clearly do not have the same behavior as each other: the accepting states and the rejecting states. The algorithm then repeatedly chooses a set from the current partition and an input symbol , and splits each of the sets of the partition into two (possibly empty) subsets: the subset of states that lead to on input symbol , and the subset of states that do not lead to . Since is already known to have different behavior than the other sets of the partition, the subsets that lead to also have different behavior than the subsets that do not lead to . When no more splits of this type can be found, the algorithm terminates.
Lemma. Given a fixed character c and an equivalence class Y that splits into equivalence classes B and C, only one of B or C is necessary to refine the whole partition.
Example: Suppose we have an equivalence class Y that splits into equivalence classes B and C. Suppose we also have classes D, E, and F; D and E have states with transitions into B on character c, while F has transitions into C on character c. By the Lemma, we can choose either B or C as the distinguisher, let's say B. Then the states of D and E are split by their transitions into B. But F, which doesn't point into B, simply doesn't split during the current iteration of the algorithm; it will be refined by other distinguisher(s).
Observation. All of B or C is necessary to split referring classes like D, E, and F correctly-- subsets won't do.
The purpose of the outermost if statement (if Y is in W) is to patch up W, the set of distinguishers. We see in the previous statement in the algorithm that Y has just been split. If Y is in W, it has just become obsolete as a means to split classes in future iterations. So Y must be replaced by both splits because of the Observation above. If Y is not in W, however, only one of the two splits, not both, needs to be added to W because of the Lemma above. Choosing the smaller of the two splits guarantees that the new addition to W is no more than half the size of Y; this is the core of the Hopcroft algorithm: how it gets its speed, as explained in the next paragraph.
The worst case running time of this algorithm is , where is the number of states and is the size of the alphabet. This bound follows from the fact that, for each of the transitions of the automaton, the sets drawn from that contain the target state of the transition have sizes that decrease relative to each other by a factor of two or more, so each transition participates in of the splitting steps in the algorithm. The partition refinement data structure allows each splitting step to be performed in time proportional to the number of transitions that participate in it. This remains the most efficient algorithm known for solving the problem, and for certain distributions of inputs its average-case complexity is even better, .
Once Hopcroft's algorithm has been used to group the states of the input DFA into equivalence classes, the minimum DFA can be constructed by forming one state for each equivalence class. If is a set of states in , is a state in , and is an input character, then the transition in the minimum DFA from the state for , on input , goes to the set containing the state that the input automaton would go to from state on input . The initial state of the minimum DFA is the one containing the initial state of the input DFA, and the accepting states of the minimum DFA are the ones whose members are accepting states of the input DFA.
Moore's algorithm.
Moore's algorithm for DFA minimization is due to . Like Hopcroft's algorithm, it maintains a partition that starts off separating the accepting from the rejecting states, and repeatedly refines the partition until no more refinements can be made. At each step, it replaces the current partition with the coarsest common refinement of partitions, one of which is the current one and the others are the preimages of the current partition under the transition functions for each of the input symbols. The algorithm terminates when this replacement does not change the current partition. Its worst-case time complexity is : each step of the algorithm may be performed in time using a variant of radix sort to reorder the states so that states in the same set of the new partition are consecutive in the ordering, and there are at most steps since each one but the last increases the number of sets in the partition. The instances of the DFA minimization problem that cause the worst-case behavior are the same as for Hopcroft's algorithm. The number of steps that the algorithm performs can be much smaller than , so on average (for constant ) its performance is or even depending on the random distribution on automata chosen to model the algorithm's average-case behavior.
Brzozowski's algorithm.
Reversing the transitions of a non-deterministic finite automaton (NFA) formula_12 and switching initial and final states produces an NFA formula_13 for the reversal of the original language. Converting this NFA to a DFA using the standard powerset construction (keeping only the reachable states of the converted DFA) leads to a DFA formula_14 for the same reversed language. As observed, repeating this reversal and determinization a second time, again keeping only reachable states, produces the minimal DFA for the original language.
The intuition behind the algorithm is this: After we determinize formula_13 to obtain formula_14, we reverse this formula_14 to obtain formula_18. Now formula_19 has the same language as formula_12, but there's one important difference: there are no two states in formula_19 from which we can accept the same word. This follows from formula_14 being deterministic, viz. there are no two states in formula_14, which we can reach from the initial state through the same word. The determinization of formula_19 then creates powerstates (sets of states of formula_19), where every two powerstates formula_26 differ ‒ naturally ‒ in at least one state formula_27 of formula_19. Assume formula_29 and formula_30; then formula_27 contributes at least one word to the language of formula_32 which couldn't possibly be present in formula_33, since this word is unique to formula_27 (no other state accepts it). We see that this holds for each pair of powerstates, and thus each powerstate is distinguishable from every other powerstate. Therefore, after determinization of formula_19, we have a DFA with no indistinguishable or unreachable states; hence, the minimal DFA formula_36 for the original formula_12.
If formula_12 is already deterministic, then it suffices to trim it, reverse it, determinize it, and then reverse it again. This could be thought of as starting with formula_14 in the process above (assuming it has already been trimmed), since the input FA is already deterministic (but keep in mind it's actually not a reversal). We reverse and determinize formula_14 to obtain formula_36, which is the minimal DFA for the "reversal" of the language of formula_12 (since we did only one reversal so far). Now all that's left to do is to reverse formula_36 to obtain the minimal DFA for the original language.
The worst-case complexity of Brzozowski's algorithm is exponential in the number of states of the input automaton. This holds regardless of whether the input is a NFA or a DFA. In the case of DFA, the exponential explosion can happen during determinization of the reversal of the input automaton; in the case of NFA, it can also happen during the initial determinization of the input automaton. However, the algorithm frequently performs better than this worst case would suggest.
NFA minimization.
While the above procedures work for DFAs, the method of partitioning does not work for non-deterministic finite automata (NFAs). While an exhaustive search may minimize an NFA, there is no polynomial-time algorithm to minimize general NFAs unless P=PSPACE, an unsolved conjecture in computational complexity theory which is widely believed to be false. However, there are methods of NFA minimization that may be more efficient than brute force search.