Cho hai DFA đầy đủ M1,M2 trên cùng bảng chữ cái. Xác định chúng có tương đương không, tức L(M1)=L(M2).
Thuật toán tích (product/cross): duyệt BFS trên các cặp trạng thái (p,q) bắt đầu từ (q01,q02); nếu gặp cặp mà đúng một trạng thái là chấp nhận thì hai DFA khác nhau.
Ví dụ: hai DFA cùng nhận "số 1 chẵn" nhưng vẽ khác nhau vẫn tương đương.
Đầu vào gồm hai DFA liên tiếp, mỗi DFA theo định dạng:
Dòng 1: số trạng thái Q (đánh số 0..Q−1).
Dòng 2: bảng chữ cái Σ (cách nhau dấu cách).
Dòng 3: trạng thái bắt đầu.
Dòng 4: số trạng thái chấp nhận rồi danh sách trạng thái chấp nhận (cùng dòng).
Tiếp theo Q×∣Σ∣ dòng p a q nghĩa là δ(p,a)=q (DFA đầy đủ — mọi cặp (p,a) có đúng một đích).
Hai DFA dùng chung bảng chữ cái (ghi lại trong từng khối).
1≤Qi≤300, 1≤∣Σ∣≤26. Hai DFA đầy đủ, cùng Σ.
In EQUIVALENT nếu L(M1)=L(M2), ngược lại DIFFERENT.
Ví dụ:
Đầu vào:
2
0 1
0
1 0
0 0 0
0 1 1
1 0 1
1 1 0
3
0 1
0
1 0
0 0 0
0 1 1
1 0 1
1 1 0
2 0 2
2 1 2
Đầu ra:
EQUIVALENT
Giải thích:
Đang tải editor...