Bước xác định hoá (subset construction, hay powerset construction) biến một ε-NFA thành DFA tương đương, trong đó mỗi trạng thái DFA tương ứng với một tập con trạng thái của NFA.
Cho một ε-NFA có n trạng thái đánh số từ 0 đến n−1 và m cạnh chuyển (mỗi cạnh dạng (u,v,c), với c là một ký hiệu, hoặc chữ E cho chuyển epsilon), và trạng thái bắt đầu s. Thực hiện subset construction như sau: trạng thái DFA đầu tiên là D0=closure({s}) (bao đóng epsilon của {s}). Với mỗi trạng thái DFA D đã sinh ra và mỗi ký hiệu c (không tính E) từng xuất hiện trong đồ thị NFA, tính
D′=closure(⋃u∈D{v:(u,v,c) laˋ một cạnh}).
Nếu D′ khác rỗng và chưa từng xuất hiện trước đó, D′ trở thành một trạng thái DFA mới. Quá trình lặp lại cho đến khi không còn trạng thái DFA mới nào được sinh ra.
Hãy đếm số trạng thái DFA có thể đến được (kể cả D0), không tính trạng thái bẫy ứng với tập rỗng (khi D′=∅ thì không có chuyển nào được tạo ra tại D ứng với c đó, và trạng thái này không được tính vào kết quả).
Ví dụ: NFA có n=2 trạng thái, một cạnh (0,1,a), bắt đầu từ s=0. Ta có D0={0}; xét ký hiệu a: từ D0 ta được D1={1}, thêm vào; từ D1 không có chuyển a nào (vì {1} không có cạnh đi ra) nên dừng. Tổng cộng có 2 trạng thái DFA: D0 và D1.
Dòng 1: hai số nguyên n và m.
m dòng tiếp theo, mỗi dòng ba giá trị u, v, c (0≤u,v<n; c là một ký hiệu, hoặc chữ E cho epsilon).
Dòng cuối cùng là một số nguyên s (0≤s<n) — trạng thái bắt đầu của NFA.
In ra một số nguyên duy nhất là số trạng thái DFA có thể đến được sau khi thực hiện subset construction (không tính trạng thái bẫy tập rỗng).
Với ví dụ ở trên, kết quả in ra là:
2
Ví dụ:
Đầu vào:
2 1
0 1 a
0
Đầu ra:
2
Đầu vào:
1 0
0
Đầu ra:
1
Đang tải editor...