예시 1:
아래와 같이 전환 테이블에 대한 NFA를 설계합니다.
현재 상태 | 0 | 1 |
---|---|---|
→q0 | q0, q1 | q0, q2 |
q1 | q3 | 이자형 |
q2 | 2분기, 3분기 | q3 |
→q3 | q3 | q3 |
해결책:
표에 제시된 매핑 기능을 이용하여 전이도를 그릴 수 있습니다.
여기,
자바에서 arraylist 정렬
δ(q0, 0) = {q0, q1} δ(q0, 1) = {q0, q2} Then, δ(q1, 0) = {q3} Then, δ(q2, 0) = {q2, q3} δ(q2, 1) = {q3} Then, δ(q3, 0) = {q3} δ(q3, 1) = {q3}
예시 2:
∑ = {0, 1}을 사용하여 NFA를 설계하면 01로 끝나는 모든 문자열을 허용합니다.
해결책:
따라서 NFA는 다음과 같습니다.
자바 arraylist 메소드
예시 3:
이중 '1' 다음에 이중 '0'이 오는 ∑ = {0, 1}을 사용하여 NFA를 설계합니다.
해결책:
이중 1이 있는 FA는 다음과 같습니다.
바로 뒤에 이중 0이 와야 합니다.
그 다음에,
이제 double 1 앞에는 0과 1의 문자열이 있을 수 있습니다. 마찬가지로 double 0 뒤에는 0과 1의 문자열이 있을 수 있습니다.
따라서 NFA는 다음과 같습니다.
이제 문자열 01100011을 고려해보세요.
q0 → q1 → q2 → q3 → q4 → q4 → q4 → q4
예시 4:
모든 문자열에 하위 문자열 1110이 포함된 NFA를 설계합니다.
리눅스 파일
해결책:
언어는 하위 문자열 1010을 포함하는 모든 문자열로 구성됩니다. 부분 전환 다이어그램은 다음과 같습니다.
이제 1010이 하위 문자열이 될 수 있습니다. 따라서 우리는 언어의 하위 문자열 1010이 유지될 수 있도록 입력 0과 1을 추가할 것입니다. 따라서 NFA는 다음과 같습니다.
순방향 연결
위의 전환 다이어그램에 대한 전환 테이블은 다음과 같습니다.
현재 상태 | 0 | 1 |
---|---|---|
→q1 | q1 | q1, q2 |
q2 | q3 | |
q3 | q4 | |
q4 | q5 | *q5 | q5 | q5 |
문자열 111010을 고려해보세요.
δ(q1, 111010) = δ(q1, 1100) = δ(q1, 100) = δ(q2, 00)
붙어있어! 입력 기호 0에 대한 q2의 경로가 없으므로 문자열 111010을 다른 방법으로 처리할 수 있습니다.
δ(q1, 111010) = δ(q2, 1100) = δ(q3, 100) = δ(q4, 00) = δ(q5, 0) = δ(q5, ε)
상태 q5는 승인 상태입니다. 전체 스캔을 받고 최종 상태에 도달했습니다.
예시 5:
∑ = {0, 1}로 NFA를 설계하면 오른쪽 끝에서 세 번째 기호가 항상 0인 모든 문자열을 허용합니다.
해결책:
따라서 오른쪽 끝에서 세 번째 기호는 항상 '0'으로 표시됩니다. NFA는 다음과 같습니다.
위 이미지는 NFA입니다. 입력이 0인 q0 상태에서는 q0 또는 q1 상태로 이동할 수 있기 때문입니다.