logo

NFA의 예

예시 1:

아래와 같이 전환 테이블에 대한 NFA를 설계합니다.

현재 상태 0 1
→q0 q0, q1 q0, q2
q1 q3 이자형
q2 2분기, 3분기 q3
→q3 q3 q3

해결책:

표에 제시된 매핑 기능을 이용하여 전이도를 그릴 수 있습니다.

NFA의 예

여기,

자바에서 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의 예

따라서 NFA는 다음과 같습니다.

자바 arraylist 메소드
NFA의 예

예시 3:

이중 '1' 다음에 이중 '0'이 오는 ∑ = {0, 1}을 사용하여 NFA를 설계합니다.

해결책:

이중 1이 있는 FA는 다음과 같습니다.

NFA의 예

바로 뒤에 이중 0이 와야 합니다.

그 다음에,

NFA의 예

이제 double 1 앞에는 0과 1의 문자열이 있을 수 있습니다. 마찬가지로 double 0 뒤에는 0과 1의 문자열이 있을 수 있습니다.

따라서 NFA는 다음과 같습니다.

NFA의 예

이제 문자열 01100011을 고려해보세요.

 q0 → q1 → q2 → q3 → q4 → q4 → q4 → q4 

예시 4:

모든 문자열에 하위 문자열 1110이 포함된 NFA를 설계합니다.

리눅스 파일

해결책:

언어는 하위 문자열 1010을 포함하는 모든 문자열로 구성됩니다. 부분 전환 다이어그램은 다음과 같습니다.

NFA의 예

이제 1010이 하위 문자열이 될 수 있습니다. 따라서 우리는 언어의 하위 문자열 1010이 유지될 수 있도록 입력 0과 1을 추가할 것입니다. 따라서 NFA는 다음과 같습니다.

순방향 연결
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인 모든 문자열을 허용합니다.

해결책:

NFA의 예

따라서 오른쪽 끝에서 세 번째 기호는 항상 '0'으로 표시됩니다. NFA는 다음과 같습니다.

NFA의 예

위 이미지는 NFA입니다. 입력이 0인 q0 상태에서는 q0 또는 q1 상태로 이동할 수 있기 때문입니다.