
Let






How to transform NFA to DFA?
![]() |
![]() |
|---|
![]() |
![]() |
|---|
![]() |
![]() |
|---|
| NFA State | DFA State | a | b |
|---|---|---|---|
| {0, 1, 2, 4, 7} | A | ? | ? |
![]() |
![]() |
|---|
| NFA State | DFA State | a | b |
|---|---|---|---|
| {0, 1, 2, 4, 7} | A | B | ? |
| {1, 2, 3, 4, 6, 7, 8} | B | ? | ? |
![]() |
![]() |
|---|
| NFA State | DFA State | a | b |
|---|---|---|---|
| {0, 1, 2, 4, 7} | A | B | C |
| {1, 2, 3, 4, 6, 7, 8} | B | ? | ? |
| {1, 2, 4, 5, 6, 7} | C | ? | ? |
![]() |
![]() |
|---|
| NFA State | DFA State | a | b |
|---|---|---|---|
| {0, 1, 2, 4, 7} | A | B | C |
| {1, 2, 3, 4, 6, 7, 8} | B | B | ? |
| {1, 2, 4, 5, 6, 7} | C | ? | ? |
![]() |
![]() |
|---|
| NFA State | DFA State | a | b |
|---|---|---|---|
| {0, 1, 2, 4, 7} | A | B | C |
| {1, 2, 3, 4, 6, 7, 8} | B | B | D |
| {1, 2, 4, 5, 6, 7} | C | ? | ? |
| {1, 2, 4, 5, 6, 7, 9} | D | ? | ? |
![]() |
![]() |
|---|
| NFA State | DFA State | a | b |
|---|---|---|---|
| {0, 1, 2, 4, 7} | A | B | C |
| {1, 2, 3, 4, 6, 7, 8} | B | B | D |
| {1, 2, 4, 5, 6, 7} | C | B | C |
| {1, 2, 4, 5, 6, 7, 9} | D | ? | ? |
![]() |
![]() |
|---|
| NFA State | DFA State | a | b |
|---|---|---|---|
| {0, 1, 2, 4, 7} | A | B | C |
| {1, 2, 3, 4, 6, 7, 8} | B | B | D |
| {1, 2, 4, 5, 6, 7} | C | B | C |
| {1, 2, 4, 5, 6, 7, 9} | D | B | ? |
![]() |
![]() |
|---|
| NFA State | DFA State | a | b |
|---|---|---|---|
| {0, 1, 2, 4, 7} | A | B | C |
| {1, 2, 3, 4, 6, 7, 8} | B | B | D |
| {1, 2, 4, 5, 6, 7} | C | B | C |
| {1, 2, 4, 5, 6, 7, 9} | D | B | E |
| {1, 2, 4, 5, 6, 7, 10} | E | ? | ? |
![]() |
![]() |
|---|
| NFA State | DFA State | a | b |
|---|---|---|---|
| {0, 1, 2, 4, 7} | A | B | C |
| {1, 2, 3, 4, 6, 7, 8} | B | B | D |
| {1, 2, 4, 5, 6, 7} | C | B | C |
| {1, 2, 4, 5, 6, 7, 9} | D | B | E |
| {1, 2, 4, 5, 6, 7, 10} | E | B | C |
![]() |
![]() |
|---|
![]() |
![]() |
|---|
![]() |
![]() |
|---|
Subset Construction Algorithm
![]() |
![]() |
|---|
| NFA State | DFA State | a | b |
|---|---|---|---|
| {0, 1, 2, 4, 7} | A | B | C |
D0 := ε-closure({N0})
D := {D0}
W := {D0} // worklist
while W ≠ ∅:
remove Q from W
for α in Σ:
T := ∅
for S in Q:
T := T ∪ δ_N(S, α)
T' := ε-closure(T)
D' := D ∪ {T'}
δ_D(Q, α) = T' // update δ_D
if T' ∉ D:
W := W ∪ {T'}
D := D'
F_D = {Q ∊ D | Q ∩ F_N ≠ ∅} // define F_D