일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- pandas
- Rxjava
- MyVoca
- relay
- Codeforces
- boj
- 쿠링
- GitHub
- Compose
- 코드포스
- androidStudio
- ProGuard
- Coroutine
- Coroutines
- textfield
- android
- Hilt
- architecture
- TEST
- MiTweet
- 백준
- Kotlin
- Gradle
- 프로그래머스
- Python
- 암호학
- AWS
- livedata
- activity
- 코루틴
- Today
- Total
이동식 저장소
6주차 1차시 본문
2-Tape DTM

테이프 2개를 사용하는 DTM
을 생각해보자. 이 기계는 테이프가 1개인 DTM
보다 더 많은 계산을 할 수 있을까? 결론부터 말하면, 실행 시간이 조금 빨라질 수는 있어도 두 기계의 계산능력 자체는 동일하다.
테이프가 2개인 DTM
의 전이함수는 다음과 같다.
어쨌든 테이프가 2개 있으니 테이프 1개짜리보다 더 많은 계산을 할 수 있을 것 같지만, 그렇지 않다고 했다. (6주차 1차시 15:00~) 굉장히 비효율적이긴 하지만 테이프 1개짜리 DTM
으로 테이프 2개짜리 머신을 시뮬레이션할 수 있다. 같은 방법으로 테이프 DTM
도 테이프 1개짜리 기계로 모두 시뮬레이션할 수 있다.
스택 2개만 있어도 되는 이유
사실 지난 시간에 이와 유사한 문제를 생각해 보았다. 스택 DPDA
는 모두 스택 2개짜리 DPDA
로 시뮬레이션할 수 있다고 했는데, 그 이유를 지금부터 따져 보자.
스택 2개를 갖는 DPDA
는 테이프를 2개 갖는 DTM
으로 시뮬레이션할 수 있다. 테이프 하나를 스택처럼 쓰면 가능하다. 마찬가지로 스택 DPDA
혹은 NPDA
는 테이프 하나를 갖는 DTM
으로 시뮬레이션할 수 있다.
그런데 DTM
은 스택 2개를 갖는 DPDA
로 시뮬레이션할 수 있다. DTM
의 헤드를 왼쪽으로 움직이는 것은 첫 번째 스택에서 글자를 읽는 것으로, 헤드를 오른쪽으로 움직이는 것은 두 번째 스택에서 글자를 읽는 것으로 대체할 수 있다. 마찬가지로 글자를 쓰는 행위는 첫 번째 혹은 두 번째 스택에 글자를 push하는 것으로 대체할 수 있다. 따라서 스택 2개짜리 DPDA
는 DTM
을 시뮬레이션할 수 있다.
결론적으로 스택 3개, 4개, 혹은 그 이상을 갖는 DPDA
는 모두 스택 2개를 갖는 DPDA
로 시뮬레이션할 수 있다. (6주차 1차시 27분부터)
그래서 이걸 어디다 써먹어요?
재밌잖아? (실제로 하신 말)
Universal Turing Machine (UTM)
UTM
은 단 하나의 Turing machine으로 모든 튜링 머신을 시뮬레이션하기 위해 고안되었다. 그런데 이는 매우 어려운 문제처럼 보인다. 튜링 머신마다 사용하는 알파벳, 전이함수, 상태가 전부 다른데 어떻게 이러한 것들을 일반화할 수 있을까?
UTM
은
UTM
은 상태를 표현하는 테이프, 전이함수를 표현하는 테이프, 입력이 주어지는 테이프까지 총 3개의 테이프를 사용한다. 임의의 튜링 머신의 상태, 전이함수, 입력은 모두 UTM
은 임의의 튜링 머신을 시뮬레이션할 수 있다.
당연한 얘기같지만 절대로 그렇지 않다, UTM
이전에 고안되었던 컴퓨터는 정렬, 암호 해독 등의 특정한 목적만을 위해 설계되었다. UTM
이 제안된 이후 상태, 전이함수, 입력을 하나로 묶어 소프트웨어라는 새로운 개념이 생겨났고, 흔히 최초의 컴퓨터라고 언급되는 ENIAC
은 일반적인 일을 할 수 있는 하드웨어에 탄도를 계산하는 소프트웨어를 탑재하여 만들어졌다.
...그렇구나. 끄덕끄덕
Classes
이제는 튜링 머신의 Class에 대해 생각해 보자. Class는 Language의 집합이다. 까먹은 건 아니겠지?
튜링 머신의 Class는 다음과 같이 나눌 수 있다.
Class E
: Enumerable Class
그런데
어떤
Class co-E
: Complementary Enumerable
Class E
에서 Yes와 No만 바꾼 형태이다. 이 정의를 이용하면
Class D
: Decidable
이 정의는 Class E
보다 더 그럴듯해 보인다. 문제를 풀 수 없을 때에도 답을 줘야 하지 않겠는가?
다음 시간에 Class E
와 Class D
가 같은지 다른지에 대해 알아보도록 하자.