콘텐츠로 이동

NFA to DFA 변환: 0(0|1)*1

NFA to DFA

1. 정규표현식 및 언어 설명

항목 내용
알파벳(Σ) {0, 1}
정규표현식 0(0|1)*1
L(0(0|1)*1) {01, 001, 0011, ...}

2. NFA 상태도

flowchart LR
    subgraph "NFA for 0(0|1)*1"
        direction LR
        I([Start]) --> A
        A -- "0" --> B
        B -- "0,1" --> B
        B -- "1" --> C((C))
    end

NFA 설명

  • **A**에서 0을 받으면 **B**로 갑니다. (0으로 시작)
  • **B**에서는 0이나 1을 받으면 계속 **B**에 머무릅니다. ((0|1)* 부분)
  • B**에서 1을 받으면 **C(최종 상태)로 갈 수도 있습니다. (1로 끝남)
  • 즉, B**에서 1을 받으면 **B**와 **C 두 곳으로 갈 수 있으므로 NFA입니다.

3. Subset Construction (NFA → DFA)

단계별 DFA 상태 도출

1) S₀ =

입력 다음 상태
0 {B} (S₁)
1 오류(∅, Trap)

2) S₁ =

입력 다음 상태
0 {B} (자기 자신)
1 {B, C} (S₂)

3) S₂ = {B, C} (수락 상태)

입력 다음 상태
0 {B} (S₁)
1 {B, C} (자기 자신)

4. DFA 상태 변환 표

DFA 상태 NFA 집합 수락 상태? 0 입력 → 1 입력 →
A {A} B Trap(∅)
B {B} B BC
BC {B, C} B BC

5. DFA 상태도

flowchart LR
    subgraph "Final DFA"
        direction LR
        I([Start]) --> A
        A -- "0" --> B
        B -- "0" --> B
        B -- "1" --> BC((BC))
        BC -- "0" --> B
        BC -- "1" --> BC
    end

6. 예제 문자열 판단

입력 문자열 DFA 진행 경로 Accept?
0110 A → Trap(∅)
1101 A → Trap(∅)
01011010101 A→B→B→BC→B→B→BC→B→B→BC