알파벳
- 알파벳(Σ): 문자열을 구성하는 기본 기호 집합으로, 항상 유한하고 비어 있지 않아야 함.
- 예시: 영어 알파벳(52개), 이진 숫자(0, 1) 등.
- 형식 언어: 알파벳에서 생성되는 문자열의 집합으로, 규칙(문법)에 따라 정의됨.
- ASCII 코드: 컴퓨터가 문자를 처리하기 위해 사용하는 숫자 코드 체계.
- 의의: 형식 언어와 알파벳은 계산 이론에서 언어와 오토마타를 다룰 때 기본적으로 사용됨.
문자열
- 문자열(String): 알파벳(기호 집합)에서 기호들을 순서대로 배열한 것.
- 예: 알파벳 {0, 1} → 문자열 0, 01, 1010 등.
- 문자열의 길이: 문자열에 포함된 기호의 개수.
- 예: 011의 길이 = 3, 빈 문자열(ε)의 길이 = 0.
- 빈 문자열(ε):
- 기호가 전혀 포함되지 않은 문자열.
- 빈 문자열은 **ε(엡실론)**으로 표기되며, 길이는 항상 0입니다.
- DFA, NFA 등 자동화기 이론에서 자주 사용됨.
- 다른 문자열과 결합해도 원래 문자열에 영향을 주지 않음.
- 빈 문자열과 문자열의 결합:
- 빈 문자열은 다른 문자열과 결합해도 결과에 영향을 미치지 않습니다.
- 예: 010 + ε = 010, ε + 101 = 101
- 이는 문자열에 "아무것도 추가하지 않는" 것을 의미합니다.
- 빈 문자열은 다른 문자열과 결합해도 결과에 영향을 미치지 않습니다.
서브스트링
- 서브스트링 정의:
- 문자열에서 순서를 유지하며 일부 기호를 선택한 부분 문자열.
- 예: 문자열 ABC에서 가능한 서브스트링은 다음과 같습니다:
- A, B, C, AB, BC, ABC, 빈 문자열(ε).
- 서브스트링의 분류:
- 단순 서브스트링(Trivial): 원래 문자열과 빈 문자열(ε).
- 예: ABC의 단순 서브스트링은 ABC와 ε.
- 비단순 서브스트링(Non-Trivial): 단순 서브스트링을 제외한 나머지.
- 단순 서브스트링(Trivial): 원래 문자열과 빈 문자열(ε).
- 서브스트링의 길이별 분류:
- 서브스트링은 길이에 따라 분류 가능.
- 예: 문자열 ABC에서
- 길이 0: ε
- 길이 1: A, B, C
- 길이 2: AB, BC
- 길이 3: ABC.
- 서브스트링 개수:
- 총 서브스트링 개수: n(n+1)/2 + 1 (n: 문자열의 길이).
- 여기서 1은 빈 문자열(ε)을 포함하기 위함입니다.
- Trivial 서브스트링: 2개.
- Non-Trivial 서브스트링: 총 개수 - 2.
- 총 서브스트링 개수: n(n+1)/2 + 1 (n: 문자열의 길이).
- 고유 서브스트링(Distinct Substrings):
- 고유 서브스트링은 중복되지 않은 서브스트링들의 집합
접두사, 접미사
- Prefix와 Suffix 정의:
- Prefix(접두사): 문자열의 시작부터 특정 위치까지의 기호들로 이루어진 부분 문자열.
- Suffix(접미사): 문자열의 끝에서부터 특정 위치까지의 기호들로 이루어진 부분 문자열.
- Prefix와 Suffix의 특징:
- Prefix는 문자열의 처음부터 순서대로 확인하며 확장.
- Suffix는 문자열의 끝에서 역순으로 확인하며 확장.
- 빈 문자열(ε)도 Prefix와 Suffix에 포함.
- 예제:
- 문자열 EVE에서:
- Prefix(접두사):
- ε, E, EV, EVE
- Suffix(접미사):
- ε, E, VE, EVE
- Prefix(접두사):
- 문자열 EVE에서:
- Prefix와 Suffix 개수 계산:
- 문자열 길이를 n이라 하면:
- Prefix의 개수: n+1(빈 문자열 포함)
- Suffix의 개수: n+1(빈 문자열 포함)
- 문자열 길이를 n이라 하면:
- Automaton과의 연관성:
- 오토마타(Automaton)는 입력 문자열을 왼쪽에서 오른쪽으로 스캔하며 처리합니다.
- 이 과정에서 Prefix 방식을 기본으로 사용하며, Suffix 방식은 상대적으로 덜 일반적입니다.
해석 및 요약
해석
- 문자열의 길이와 가능한 문자열의 개수 (Σ^n):
- 알파벳 집합 Σ = {0, 1}와 같은 경우, 특정 길이의 문자열 개수를 계산합니다.
- 예를 들어:
- 길이 0 ((n = 0)): 빈 문자열 (ϵ) 하나만 존재 ((1)개).
- 길이 1 ((n = 1)):
0
,1
((2)개). - 길이 2 ((n = 2)):
00
,01
,10
,11
((2^2 = 4)개). - 길이 3 ((n = 3)): (2^3 = 8)개.
- 문자열 생성의 원리:
- 문자열의 각 위치에 알파벳 집합의 기호를 배치하여 문자열을 생성합니다.
- (n) 길이 문자열은 각 위치에 |Σ|개의 선택지가 있으므로 총 |Σ|^n개의 문자열이 생성됩니다.
- 특정 길이 이하의 문자열 개수 (Σ^≤n):
- 길이가 (0)부터 (n)까지인 모든 문자열의 총합을 계산:
- 이 식은 등비수열의 합 공식으로 계산 가능:
- ∣Σ∣=알파벳의 개수
- n=문자열의 최대 길이
- 길이가 (0)부터 (n)까지인 모든 문자열의 총합을 계산:
- 예제 계산:
- 알파벳 집합 (\Sigma = {0, 1}), (n = 3):
- 총 15개의 문자열이 길이 0부터 3까지 포함됩니다.
- 알파벳 집합 (\Sigma = {0, 1}), (n = 3):
- 응용:
- 이 계산은 문자열 생성, 패턴 매칭, 데이터 구조 설계, 자동화 이론 등 다양한 분야에서 중요한 기반을 제공합니다.
- 클레이니 클로저(Kleene Closure):
- 클레이니 클로저는 특정 알파벳 집합 (\Sigma)에서 가능한 모든 길이의 문자열을 포함하는 집합을 의미합니다.
- 기호로 (\Sigma^*)로 나타냅니다.
- (\Sigma^*)의 정의:
- 여기서 (\Sigma^n)은 (\Sigma)에서 생성된 길이 (n)의 문자열 집합.
- (\Sigma^0)는 빈 문자열((\epsilon))만 포함.
- (\Sigma^1), (\Sigma^2)는 각각 길이 1, 2의 문자열을 포함.
- (\Sigma^_)는 *_빈 문자열 포함**.
- 포지티브 클로저(Positive Closure):
- 포지티브 클로저는 (\Sigma^_)와 비슷하지만, *_빈 문자열((\epsilon))을 제외**한 모든 길이의 문자열을 포함합니다.
- 기호로 (\Sigma^+)로 나타냅니다.
- (\Sigma^+)의 정의:
[
\Sigma^+ = \Sigma^1 \cup \Sigma^2 \cup \Sigma^3 \cup \cdots
]- (\Sigma^0)는 포함하지 않음.
- 최소 길이가 1인 문자열부터 포함.
- 클레이니 클로저와 포지티브 클로저의 차이점:
- (\Sigma^*): 빈 문자열((\epsilon)) 포함.
- (\Sigma^+): 빈 문자열((\epsilon)) 제외.
- 예제:
- (\Sigma = {0, 1})일 때:
- (\Sigma^* = {\epsilon, 0, 1, 00, 01, 10, 11, \dots})
- (\Sigma^+ = {0, 1, 00, 01, 10, 11, \dots})
- (\Sigma = {0, 1})일 때:
- 용도:
- 클레이니 클로저와 포지티브 클로저는 형식 언어와 자동화 이론에서 문자열의 가능한 조합을 나타내는 데 사용됩니다.
- DFA, NFA 등에서 입력 문자열을 처리할 때 중요한 개념입니다.
요약
- 클레이니 클로저 ((\Sigma^*)):
- 특정 알파벳 집합에서 생성 가능한 모든 길이의 문자열 집합.
- 빈 문자열((\epsilon)) 포함.
- 정의:
[
\Sigma^* = \Sigma^0 \cup \Sigma^1 \cup \Sigma^2 \cup \cdots
]
- 포지티브 클로저 ((\Sigma^+)):
- 특정 알파벳 집합에서 생성 가능한 모든 길이의 문자열 집합.
- 빈 문자열((\epsilon)) 제외.
- 정의:
[
\Sigma^+ = \Sigma^1 \cup \Sigma^2 \cup \Sigma^3 \cup \cdots
]
- 예제 ((\Sigma = {0, 1})):
- (\Sigma^* = {\epsilon, 0, 1, 00, 01, 10, 11, \dots})
- (\Sigma^+ = {0, 1, 00, 01, 10, 11, \dots})
- 차이점:
- (\Sigma^*): 빈 문자열 포함.
- (\Sigma^+): 빈 문자열 제외.
- 용도:
- 문자열의 모든 가능한 조합을 나타내며, DFA, NFA 등 형식 언어에서 중요한 개념으로 사용.
- 언어(Language) 정의:
- 언어는 특정 알파벳 집합 Σ\Sigma로부터 생성된 문자열들의 부분집합입니다.
- 형식 언어는 Σ∗\Sigma^* (클레이니 클로저)의 부분집합으로 정의됩니다. L⊆Σ∗L \subseteq \Sigma^*
- 즉, 언어는 주어진 알파벳 집합에서 가능한 모든 문자열(Σ∗\Sigma^*) 중 일부를 선택한 집합입니다.
- 예제:
- 알파벳 집합 Σ={0,1}\Sigma = \{0, 1\}인 경우:
- Σ∗\Sigma^*: 모든 가능한 문자열 집합 (빈 문자열 포함).
- 언어 L_1: 길이가 1인 문자열만 포함 → L_1 = \{0, 1\}.
- 언어 L_2: 길이가 2인 문자열만 포함 → L_2 = \{00, 01, 10, 11\}.
- 언어 L_3: 문자열이 반드시 1로 끝나는 경우 → L_3 = \{1, 01, 11, 001, 101, \dots\}.
- 알파벳 집합 Σ={0,1}\Sigma = \{0, 1\}인 경우:
- 언어의 속성:
- 모든 언어는 Σ∗\Sigma^*의 부분집합입니다.
- 특정 규칙에 따라 문자열을 포함하거나 제외하여 언어를 정의할 수 있습니다.
- 예:
- 언어 L4L_4: "0의 개수와 1의 개수가 같은 문자열".
- 언어 L5L_5: "모든 문자열이 반드시 01로 시작".
- 가능한 언어의 총 개수:
- Σ∗\Sigma^*에서 파생될 수 있는 모든 언어는 Σ∗\Sigma^*의 부분집합의 집합입니다.
- 예: Σ={0,1}\Sigma = \{0, 1\}일 때:
- Σ∗\Sigma^*는 무한한 문자열 집합이므로 가능한 언어의 개수는 무한대입니다.
- {ϵ,0,1,00,01,10,11,000,…}
- 포함 여부:
- 각 문자열은 특정 언어에 포함될 수도 있고, 포함되지 않을 수도 있습니다.
- 예:
- 문자열 01은 L_1에는 포함되지 않지만, L_2에는 포함될 수 있습니다.
- 빈 언어 ((\phi)):
- 문자열을 전혀 포함하지 않는 언어.
- (\text{Length}(\phi) = 0).
- 비어 있지 않은 언어:
- 최소한 하나 이상의 문자열을 포함하는 언어.
- 예: (L = {\epsilon}, L = {0, 1}).
- 유한 언어:
- 포함된 문자열의 개수가 유한.
- 예: (L = {00, 01, 10, 11}).
- 무한 언어:
- 포함된 문자열의 개수가 무한.
- 예: 클레이니 클로저 (\Sigma^*).
- 빈 문자열 ((\epsilon))과 빈 언어 ((\phi))의 차이:
- (\epsilon): 길이가 0인 문자열.
- (\phi): 문자열을 전혀 포함하지 않는 언어.
- 연산 특성:
- (L \cdot \phi = \phi): (L)과 빈 언어를 연결하면 결과는 빈 언어.
- (L \cdot \epsilon = L): (L)과 빈 문자열을 연결하면 결과는 원래 언어.
- 정규 언어(Regular Language) 정의:
- 정규 언어는 유한 자동자(Finite Automaton)로 인식될 수 있는 언어입니다.
- 또한, 정규 표현식(Regular Expression)으로 생성될 수 있는 언어도 정규 언어에 포함됩니다.
- 즉:
- 유한 자동자에서 인식 가능한 모든 언어는 정규 언어.
- 정규 표현식으로 생성 가능한 언어도 정규 언어.
- 정규 언어의 예제:
- 예제 1: (L_1 = {a^n ,|, n \geq 1})
- 이 언어는 "적어도 하나 이상의 (a)"를 포함하는 문자열로 구성.
- 유한 자동자를 구성할 수 있음 → 정규 언어.
- 예제 2: (L_2 = {a^m b^n ,|, m, n \geq 0})
- (a)와 (b)로 구성된 모든 문자열.
- 유한 자동자를 구성할 수 있음 → 정규 언어.
- 예제 1: (L_1 = {a^n ,|, n \geq 1})
- 정규 언어가 아닌 언어의 예제:
- (L = {a^n b^n ,|, n \geq 1}):
- (a)의 개수와 (b)의 개수가 동일한 문자열.
- 유한 자동자는 메모리가 부족해 (a)와 (b)의 개수를 비교할 수 없음 → 비정규 언어(Non-Regular Language).
- (L = {w ,|, w = w^R}):
- 문자열 (w)가 자기 자신을 뒤집은(reverse) 형태와 동일한 경우.
- 첫 글자와 마지막 글자를 비교해야 하므로 유한 자동자로 처리 불가 → 비정규 언어.
- (L = {a^n b^n ,|, n \geq 1}):
- 정규 언어의 표현 방법:
- 정규 언어는 3가지 방식으로 표현 가능:
- 유한 자동자(Finite Automaton):
- 유한한 상태와 전이로 언어를 표현.
- 정규 표현식(Regular Expression):
- 언어를 생성하는 문법적 표현식.
- 정규 문법(Regular Grammar):
- 언어를 생성하는 규칙 집합.
- 유한 자동자(Finite Automaton):
- 정규 언어는 3가지 방식으로 표현 가능:
- 정규 언어와 비정규 언어의 구분:
- 정규 언어는 유한 자동자로 처리 가능.
- 비정규 언어는 유한 자동자로 처리 불가하며, 추가 메모리(스택, 테이프 등)가 필요.
- 정규 언어의 예제와 유한 자동자/정규 표현식/정규 문법의 연관성:
- 예제: (L = {a^n ,|, n \geq 1})
- 유한 자동자: (a)를 입력받아 수락 상태로 전이.
- 정규 표현식: (a^+)
- 정규 문법: (S \to aS ,|, a)
- 즉, 동일한 언어를 다르게 표현
- 유한 자동자는 입력 문자열을 상태 전이로 처리.
- 정규 표현식은 문자열 패턴을 간단히 표현.
- 정규 문법은 문자열을 생성하는 규칙을 제공.
- 예제: (L = {a^n ,|, n \geq 1})
유한 자동자(Finite Automaton)를 구성한다는 것은 주어진 언어를 인식할 수 있는 수학적 모델을 설계하는 것을 의미합니다. 유한 자동자는 문자열을 입력으로 받아 해당 문자열이 특정 언어에 속하는지 여부를 판단할 수 있는 시스템입니다. 이를 구성한다는 것은 상태(State)와 전이(Transition)를 정의하여 원하는 언어를 정확히 처리하도록 하는 모델을 만드는 것입니다.
유한 자동자의 구성 요소
유한 자동자는 다음의 다섯 가지로 구성됩니다:
- 상태 집합(Q):
- 자동자가 가질 수 있는 모든 상태들의 집합.
- 입력 알파벳((\Sigma)):
- 허용되는 입력 기호들의 집합.
- 전이 함수((\delta)):
- 현재 상태와 입력 기호에 따라 다음 상태를 결정하는 함수.
- 시작 상태((q_0)):
- 자동자가 초기화될 때 시작하는 상태.
- 수락 상태(F):
- 입력 문자열이 언어에 속할 경우 도달해야 하는 상태들의 집합.
유한 자동자의 구성 과정
1. 주어진 언어 정의
- 예: 언어 (L = {a^n b^n ,|, n \geq 1}) (이 언어는 정규 언어가 아니지만 예로 사용)
- 문자열이 (a)로 시작하고 (b)로 끝나는 구조를 가짐.
- (a)와 (b)의 개수를 비교해야 함.
2. 유한 자동자로 표현 가능한 언어를 선택
- 정규 언어는 유한 자동자로 구성 가능.
- 예: (L = {a^+ b^+}) (1개 이상의 (a) 뒤에 1개 이상의 (b))는 정규 언어로 유한 자동자 가능.
3. 상태(State) 정의
- 언어의 규칙에 따라 필요한 상태를 정의:
- 초기 상태 ((q_0)).
- 중간 상태 ((q_1), (q_2), ...).
- 수락 상태 ((F)).
4. 전이 함수 정의
- 상태 간 전이 규칙을 설정:
- 입력에 따라 상태가 어떻게 변화하는지 정의.
- 예: (q_0 \xrightarrow{a} q_1 \xrightarrow{b} q_2).
5. 자동자 검증
- 설계한 유한 자동자가 언어를 정확히 인식하는지 테스트.
예제: 언어 (L = {a^+ b^+})를 인식하는 유한 자동자
언어 정의
- (a)로 시작하고, (a) 뒤에 (b)가 따라오는 문자열.
- 최소한 하나 이상의 (a)와 (b)를 포함해야 함.
유한 자동자 구성
- 상태 정의:
- (q_0): 시작 상태.
- (q_1): (a)를 읽고 있는 중간 상태.
- (q_2): (b)를 읽고 수락 상태.
- 전이 규칙:
- (q_0 \xrightarrow{a} q_1): (a)를 읽으면 (q_1)로 이동.
- (q_1 \xrightarrow{a} q_1): 추가적인 (a)를 읽어도 (q_1)에 머무름.
- (q_1 \xrightarrow{b} q_2): (b)를 읽으면 (q_2)로 이동.
- (q_2 \xrightarrow{b} q_2): 추가적인 (b)를 읽어도 (q_2)에 머무름.
- 유한 자동자 다이어그램:
q0 --a--> q1 --b--> q2
^ |
| v
a b
자동자 테스트
- 입력:
aaabb
- (q_0 \xrightarrow{a} q_1)
- (q_1 \xrightarrow{a} q_1)
- (q_1 \xrightarrow{a} q_1)
- (q_1 \xrightarrow{b} q_2)
- (q_2 \xrightarrow{b} q_2)
- 결과: (q_2 \in F), 문자열이 (L)에 포함.
판별 방법: 펌핑 렘마(Pumping Lemma)
정규 언어인지 아닌지 확인하는 데 유용한 도구는 펌핑 렘마(Pumping Lemma)입니다.
펌핑 렘마의 핵심 아이디어
- 모든 정규 언어는 일정한 길이 이상의 문자열을 포함할 경우, 문자열을 "펌핑(반복)"해도 여전히 그 언어에 속해야 합니다.
- 문자열을 세 부분 (xyz)로 나누어:
- (xy^iz \in L) ((i \geq 0))가 항상 성립해야 합니다.
- 여기서 (y)는 반복 가능한 부분.
예제: 정규 언어
(L = {a^n b^m ,|, n, m \geq 0})
- 문자열 (w = aaaabb)를 펌핑 렘마에 적용:
- (w = xyz), (x = aaa), (y = aa), (z = bb).
- (xy^2z = aaaaaabb \in L): (y)를 반복해도 여전히 언어에 속함.
- 따라서 정규 언어.
예제: 비정규 언어
(L = {a^n b^n ,|, n \geq 1})
- 문자열 (w = aaabbb)를 펌핑 렘마에 적용:
- (w = xyz), (x = aa), (y = a), (z = bbb).
- (xy^2z = aaaabbb \notin L): (a)와 (b)의 개수가 달라지므로 언어에 속하지 않음.
- 따라서 비정규 언어.
- 유한 자동자의 분류:
- 유한 자동자(Finite Automaton)는 크게 두 가지로 나눌 수 있습니다:
- 출력을 생성하지 않는 유한 자동자:
- 입력을 읽고 상태 전이를 수행하지만, 출력을 생성하지 않음.
- 입력 문자열을 왼쪽에서 오른쪽으로 스캔하며, 마지막 상태에서 언어에 속하는지 여부를 판단.
- 출력을 생성하는 유한 자동자:
- 상태 전이를 수행하면서 동시에 출력도 생성.
- 입력에 따라 상태를 변경하고, 출력 문자열을 생성.
- 출력을 생성하지 않는 유한 자동자:
- 유한 자동자(Finite Automaton)는 크게 두 가지로 나눌 수 있습니다:
- 출력을 생성하지 않는 유한 자동자:
- 이 유형에는 두 가지가 포함됩니다:
- 결정적 유한 자동자(Deterministic Finite Automaton, DFA):
- 하나의 입력에 대해 항상 하나의 상태로 전이.
- 모든 입력 심볼에 대해 명확히 정의된 전이 함수를 가짐.
- 비결정적 유한 자동자(Nondeterministic Finite Automaton, NFA):
- 하나의 입력에 대해 여러 상태로 전이 가능.
- 특정 입력 심볼에 대해 전이가 정의되지 않을 수도 있음.
- 결정적 유한 자동자(Deterministic Finite Automaton, DFA):
- 이 유형에는 두 가지가 포함됩니다:
- 출력을 생성하는 유한 자동자:
- 입력을 처리하면서 동시에 출력 값을 생성.
- 대표적인 두 가지 유형:
- 무어 기계(Moore Machine):
- 상태에 따라 출력이 결정.
- 각 상태에 고정된 출력 값을 가짐.
- 밀리 기계(Mealy Machine):
- 입력과 상태의 조합에 따라 출력이 결정.
- 상태 전이와 동시에 출력 값을 생성.
- 무어 기계(Moore Machine):
- 자동자의 일반적인 구조:
- 모든 자동자는 결정적과 비결정적으로 나뉠 수 있음.
- 유한 자동자뿐만 아니라, 선형 제한 자동자(LBA)나 튜링 기계(Turing Machine)에서도 이 구조는 동일하게 적용됨.
무어 기계(Moore Machine)
- 정의:
- 출력이 현재 상태에 의해서만 결정되는 유한 상태 기계.
- 즉, 상태가 바뀌는 순간 출력도 변경됩니다.
- 구성 요소:
- 상태 집합 ((Q))
- 입력 알파벳 ((\Sigma))
- 출력 알파벳 ((\Gamma))
- 전이 함수 ((\delta: Q \times \Sigma \to Q))
- 출력 함수 ((\lambda: Q \to \Gamma)): 상태에 따라 출력 결정.
- 초기 상태 ((q_0))
- 특징:
- 출력은 상태에 고정되어 있음.
- 상태 전이가 일어날 때 출력이 달라질 수 있음.
- 예제:
- 문제: 입력 문자열에서 짝수 개의 (1)이 포함되었는지 확인하고, 그에 따라 출력
YES
또는NO
를 반환. - 다이어그램:
- 문제: 입력 문자열에서 짝수 개의 (1)이 포함되었는지 확인하고, 그에 따라 출력
q0 --1--> q1 --1--> q0
| |
0 0
YES NO
- 출력:
- (q_0): 짝수 개의 (1) → 출력
YES
. - (q_1): 홀수 개의 (1) → 출력
NO
.
- (q_0): 짝수 개의 (1) → 출력
밀리 기계(Mealy Machine)
- 정의:
- 출력이 현재 상태와 입력 심볼의 조합에 따라 결정되는 유한 상태 기계.
- 구성 요소:
- 상태 집합 ((Q))
- 입력 알파벳 ((\Sigma))
- 출력 알파벳 ((\Gamma))
- 전이 함수 ((\delta: Q \times \Sigma \to Q))
- 출력 함수 ((\lambda: Q \times \Sigma \to \Gamma)): 상태와 입력의 조합에 따라 출력 결정.
- 초기 상태 ((q_0))
- 특징:
- 출력은 상태와 현재 입력 심볼의 영향을 받음.
- 상태 전이가 일어나는 동안 출력이 생성됨.
- 예제:
- 문제: 입력 문자열에서
0
을A
로,1
을B
로 변환. - 다이어그램:
- 문제: 입력 문자열에서
q0 --0/A--> q0
--1/B--> q0
- 출력:
- (0)을 읽으면 출력
A
. - (1)을 읽으면 출력
B
.
- (0)을 읽으면 출력
무어 기계와 밀리 기계의 차이
구분 | 무어 기계 | 밀리 기계 |
---|---|---|
출력 결정 기준 | 현재 상태 | 현재 상태 + 현재 입력 |
출력 시점 | 상태 전이 후 출력 생성 | 상태 전이와 동시에 출력 생성 |
구조 | 상태당 고정된 출력 값을 가짐 | 상태와 입력의 조합에 따라 출력이 달라짐 |
복잡성 | 상대적으로 단순 | 더 복잡한 출력 로직 구현 가능 |
적용 사례
- 무어 기계:
- 간단한 제어 시스템 (예: 엘리베이터 상태 표시등).
- 상태 기반 출력이 필요한 시스템.
- 밀리 기계:
- 실시간 반응 시스템 (예: 실시간 번역기).
- 상태와 입력에 따라 동적인 출력이 필요한 시스템.
'강의 > Theory of Computation' 카테고리의 다른 글
Non-Deterministic PushDown Automata (NFA) (0) | 2025.02.05 |
---|---|
Construction of Minimal DFA Examples (0) | 2025.02.02 |
Construct Minimal DFA (0) | 2025.02.01 |
Introduction (0) | 2025.01.26 |