이중 문자 (aa, bb)로 시작하거나 이중 문자 (aa, bb)로 끝나는 모든 입력을 허용하는 DFA를 만드는 간단한 문제가 있습니다. 는 주어진 언어.
나는 다음과 같이 로터리 방식으로 해결하려고했습니다.
- 정규식 생성
- 해당 NFA 만들기
- 파워 셋 구성을 사용하여 DFA 추론
- DFA의 상태 수 최소화
1 단계 : 주어진 문제에 대한 정규식 은 (다른 수많은 것 중에서) :
((aa|bb)(a|b)*)|((a|b)(a|b)*(aa|bb))
2 단계 : 주어진 표현에 대한 NFA 는 다음과 같습니다.
(출처 : livefilestore.com )
표 형식에서 NFA는 다음과 같습니다.
State Input:a Input:b
->1 2,5 3,5
2 4 -
3 - 4
(4) 4 4
5 5,7 5,6
6 - 8
7 8 -
(8) - -
3 단계 : 파워 셋 구성을 사용하여 DFA로 변환 :
Symbol, State + Symbol, State (Input:a) + Symbol, State (Input:b)
->A, {1} | B, {2,5} | C, {3,5}
B, {2,5} | D, {4,5,7} | E, {5,6}
C, {3,5} | F, {5,7} | G, {4,5,6}
(D), {4,5,7} | H, {4,5,7,8} | G, {4,5,6}
E, {5,6} | F, {5,7} | I, {5,6,8}
F, {5,7} | J, {5,7,8} | E, {5,6}
(G), {4,5,6} | D, {4,5,7} | K, {4,5,6,8}
(H), {4,5,7,8} | H, {4,5,7,8} | G, {4,5,6}
(I), {5,6,8} | F, {5,7} | I, {5,6,8}
(J), {5,7,8} | J, {5,7,8} | E, {5,6}
(K), {4,5,6,8} + D, {4,5,7} + K, {4,5,6,8}
4 단계 : DFA 최소화
K-> G, J-> F, I-> E를 먼저 변경했습니다. 다음 반복에서는 H-> D 및 E-> F입니다. 따라서 최종 테이블은 다음과 같습니다.
State + Input:a + Input:b
->A | B | C
B | D | E
C | E | D
(D) | D | D
(E) | E | E
그리고 개략적으로 다음과 같습니다.
(출처 : livefilestore.com )
... 필수 한 DFA가 아닙니다! 결과를 세 번 확인했습니다. 그래서 내가 어디로 잘못 되었습니까?
노트 :
- -> = 초기 상태
- () = 최종 상태