Nondeterminism은 컴퓨테이션 이론의 중요하고 강력한 개념이다.
machine이 어떠한 상태(state)에 있고, 다음 symbol을 읽을 때, 다음 상태가 특정한 상태로 결정(determined)된다. 이런 개념을 deterministic computation이라고 한다.
이와 다르게, 특정한 상태에서 여러 상태로 갈 수 있는 것을 nondeterminism이라고 하며, 다음 상태가 정확히 정해지지 않았기 때문에 비결정성이라고 한다.
우리가 지금까지 배운 것은 모두 DFA(Deterministic Finite Automaton)에 대한 내용이다. 우리가 지금부터 배울 것은 NFA(Nondeterministic Finite Automaton)에 대한 내용이다.



이 그림에 010110을 넣는 예시이다.


-예시를 아무거나 넣어본다. 01100 같은거...
-넣어보니 100이나 110이면 성립한다
-더 자세히 보니 string 안의 symbol이 3개 이상이고 끝에서 3번째가 1이면 accept한다.
-그러므로, 끝에서 3번째가 1인 모든 string을 accept한다.
우리가 이 예시를 DFA로 그리려면 아래처럼 복잡하게 나온다. 모든 NFA는 DFA로 바꿀 수 있지만, DFA가 훨씬 복잡할 때가 있으므로 NFA로 나타내는 게 더 좋을 때가 많다.

NFA의 Formal Definition은 DFA의 Formal Definition과 비슷하다. 하지만, transirion function(δ)이 좀 다르다. DFA에선 입력과 상태를 통해 다음 상태를 결정하지만, NFA에서는 입력에 empty string도 포함이고, 이를 통해 다음 상태를 만들어내는 것이 아닌 새로운 가능성을 제공한다. 이 가능성을 상태들의 집합으로 볼 수 있다.
그러므로 Q라는 상태들의 집합이 있을 때, P(Q)는 Q의 power set(부분 집합을 모아둔 집합)이며, δ : Q × Σε → P(Q)로 정의된다.
Nondeterministic finite automaton은 5-tuple (Q, Σ, δ, q0, F)로 정의할 수 있다.
1. Q는 상태들의 집합이다.
2. Σ는 알파벳(심볼들의 집합)이다.
3. δ : Q × Σε → P(Q)
4. q0 ∈ Q는 시작 상태다.
5. F ⊆ Q는 통과상태다.
N = (Q, Σ, δ, q0, F)인 NFA이고, Σ에서 나온 string w가 있다. w = y1y2...ym이고, yi는
Σε의 memeber이며, 상태들 r0,r1,...rm이 있을 때, 아래가 성립하면 N은 w를 accept한다.
- r0 = q0
- ri+1 ∈ δ(ri, yi+1), for i = 0, . . . , m − 1, and
- rm ∈ F.
- DFA때는 =이었던게, ∈로 바뀌었는데, 이는 δ가 집합이기 때문이다.

N1은 (Q, Σ, δ, q1, F)다.
1. Q = {q1, q2, q3, q4}
2. Σ = {0,1}
3.
| ε | 0 | 1 | |
|---|---|---|---|
| q1 | ∅ | {q1} | {q1,q2} |
| q2 | {q3} | {q3} | ∅ |
| q3 | ∅ | ∅ | {q4} |
| q4 | ∅ | {q4} | {q4} |
우리가 지금까지 한 것을 보면, NFA는 DFA의 상위 개념인 것 같다. 하지만 NFA은 사실 DFA와 같다. NFA로 나타낼 수 있는 것들은 DFA로 나타낼 수 있으며, 반대도 마찬가지다. 이 개념이 중요한 건, 어떤 language를 나타낼 때, DFA로 그리기 어려울 때가 있다. 그럴 때 NFA로 나타내면 훨씬 간편하게 그려질 때가 있다. 이 때 중요한건, NFA == DFA려면 같은 language를 recognize해야 한다.
NFA는 똑같은 일을 하는 DFA가 존재한다.
- Q' = P(Q)이다. M의 모든 상태는 N의 부분집합이며, P(Q)는 Q의 부분집합들의 합이다.
- R ∈ Q' 이고, a ∈ Σ일때, δ′(R, a) = {q ∈ Q | q ∈ δ(r, a) ∈ R}.
- q'0 = {q0}. M의 시작 상태는 N의 시작상태의 집합이다.
- F' = {R ∈ Q′| R은 N의 통과상태를 가지고 있다.}.
R ∈ Q' 이고, a ∈ Σ일때, δ′(R, a) = {q ∈ Q | q ∈ δ(r, a) ∈ R}다. 이것의 다른 표현은 δ′(R, a) = Ur∈R δ(r, a)다.
R상태에서 a를 만났을 때 다음 상태는 q이며, q는 a를 통해서 갈 수 있는 모든 상태들 중 하나이다.
그러므로 N = (Q, Σ, δ, q0, F)일 때, M = (Q', Σ, δ', q0', F')이며
- Q' = P(Q)
- Σ는 공유
- δ′(R, a) = {q ∈ Q | q ∈ E(δ(r, a)), r ∈ R}
- q0' = E(q0)
- F' = {R ∈ Q}
라고 말할 수 있다.
어떤 NFA가 language를 recognize하면 그 language는 regular이며, 반대도 가능하다.
→: regular language는 특정한 DFA를 recognize하며, 모든 DFA는 NFA로 바꿀 수 있다.
←: NFA가 어떠한 language를 recognize하면, 그 language를 recognize하는 DFA가 있으며 같은 langauge는 regular language다.
NFA나 DFA 모두 특정한 language L에 대해서 여러가지가 있을 수 있다. 그러나 state가 가장 적은 automaton이 language에 대해서 잘 나타내며, state를 줄이는 과정을 단순화(minimalize) 라고 부른다

다음과 같은 예시가 있을 때, 상태 {1}, {1,2}로 접근할 수 있는 arrow가 없다. 그러므로 사실상 없는 상태와 같다. 이 없는 상태와 그로부터 파생되는 arrow들은 쓸모가 없으므로 없앨 수 있다.

상태를 없앤 그림이다. 위 그림과 아래 그림은 기능적으로 같으며, 똑같이 L을 recognize한다.