튜링머신(Turing Machine)

앨런 튜링

튜링 머신은 앨런 튜링이 1936년에 제안한 이론적인 기계이다.

수학자 앨런 튜링은 힐버트 프로젝트의 목표에 도전하기 위해 튜링 머신 개념을 도입했다. 힐버트 프로젝트는 모든 수학적 명제를 증명해주는 만능 기계를 만들려는 시도였으나, 튜링은 이러한 프로젝트의 목표가 불가능하다는 것을 증명하기 위해 튜링 머신을 사용했다.

 

이러한 배경으로 제안된 튜링 머신은 컴퓨터 과학의 기초가 되는 개념이 되면서 컴퓨터가 수행할 수 있는 모든 계산 작업을 수행할 수 있으며, 이를 통해 컴퓨터 과학에서 다양한 계산 문제를 이해할 수 있게된다.

 

튜링 완전성(Turing Completeness)

컴퓨터 과학에서 중요한 개념으로, 계산 이론의 관점에서 특정 시스템이 모든 튜링 머신의 계산 수행 능력을 말하며 튜링 완전성은 컴퓨터 시스템의 계산 능력을 평가하는 기준이 된다.

 

튜링 완전한 시스템은 두 가지 기본 요소가 있다.

1. 기계의 상태를 나타낼 수 있는 유한한 수의 상태

2. 무한한 길이의 메모리를 사용

 

튜링 완전한 시스템은 모든 계산 문제를 해결할 수 있는 이론적인 기계로 볼 수 있으며 이를 통해 현대의 대부분의 프로그래밍 언어와 컴퓨터 아키텍처는 튜링 완전하다고 간주되고 이를 통해서 다양한 시스템 간의 계산 능력을 비교할 수 있다.

 

튜링 완전성을 갖춘 시스템은 어떤 알고리즘도 구현이 가능하며 이론적으로는 다른 튜링 완전한 시스템과 동일한 계산 능력을 가진다. 하지만 언제까지나 튜링 완전성은 이론적인 기준일 뿐 실제 성능을 반영하지 않기 때문에 실제로는 하드웨어 성능, 메모리 제한 등의 제약 때문에 모든 시스템이 동일한 성능을 내지는 않는다.

 

작동 방식

튜링머신은 무한히 긴 테이프가 있고 이 테이프는 일정한 크기로 나누어져 있으며 이를 셀이라고 부른다. 이 셀에는 기호가 기록되어있고 테이프를 따라 움직이는 헤더에 의해서 기록이 바뀔 수 있다. 튜링 머신의 상태는 상태 레지스터에 저장되고 이 상태에 대 따른 동작은 액션 테이블에 의해서 결정된다.

 

액션 테이블에 작성되는 동작은 테이프에 기호를 읽거나 새로 기록하고, 헤더를 왼쪽 또는 오른쪽으로 이동 그리고 정지의 기능을한다. 만약 액션 테이블에서 특정기호를 읽을 때 까지 헤더를 이동시키고 해당 기호를 읽었을 때 새로 기록을 하거나 또는 다른 동작을 수행시키는 등의 방식으로 모든 계산을 처리할 수 있는 기계로 동작하게 된다. 

Turing Machine

 

한계

튜링 머신에는 계산할 수 없는 문제들이 존재한다.

튜링 머신은 이론적인 개념이기 때문에 현실에 존재할 수 없는 무한한 길이의 테이프와 무한한 시간을 가정으로한다. 따라서 유한한 메모리와 제한된 시간을 가지는 실제 컴퓨터에서는 동일한 계산 능력을 가질 수 없다,

 

그리고 또 다른 한계의 대표적인 예로는 튜링의 정지 문제(Halting Problem)가 있다. 이 문제는 어떤 튜링 머신이 특정 입력에 대해 정지할지 즉, 계산이 완료되어 결과를 출력하고 종료할것인지 또는 무한 루프에 빠져 계속 실행할지를 결정하는 문제이다. 튜링은 이 문제에 대한 알고리즘이 존재하지 않음을 증명했는데 이는 어떤 일반적인 알고리즘이나 프로그램이 입력과 조합에 대해 항상 올바른 정지 여부를 결정할 수 없음을 의미한다. 튜링은 이러한 튜링 머신이 정지문제에 대해서 해결할 수 없다는 점을 통해서 힐버트의 프로젝트를 반증 했다.

 

정지 문제의 불가능성은 튜링 머신과 같은 계산 모델의 한계를 보여주며, 컴퓨터 과학의 여러 분야에서 중요한 영향을 미친다. 예를 들어 프로그램의 정확성, 최적화 또는 자동 버그 찾기 등의 분야에서 이론적한계를 인식하고 이에 대한 해결책을 찾는데 도움이 된다.

 

정지 문제의 증명은 컴퓨터 과학과 수학에서 근본적인 한계를 보여주며, 계산 가능성 이론의 발전에 큰 영향을 미쳤다. 또한, 이 결과는 계산의 본질과 한계에 대한 연구를 촉진시키며 컴퓨터 과학의 핵심 개념으로 자리잡게 되었다.

 

 

 

 

728x90
반응형

'Computer > Engineering' 카테고리의 다른 글

데이터 경로와 제어 유닛  (0) 2023.03.17
메모리  (0) 2023.03.17
명령 사이클과 명령어 집합 구조  (0) 2023.03.17
레지스터  (0) 2023.03.17
CPU  (0) 2023.03.17

Rubber-Duck

프로그래밍에서 사용하는 용어 중에 고무오리(Rubber Duck)라는 게 있다.

고무오리, 영어로 하면 러버덕

러버덕은 문제를 해결하기 위한 방법 중 하나이다. 가상의 대상을 두고 문제에 대해서 설명을 하는 과정 중에 해결책을 찾게 되는 방법으로 이러한 것을 러버덕 디버깅이라고도 한다. 실제로 나도 프로그래밍을 하다가 문제가 생겼을 때 은연중에 설명하듯이 혼자 중얼거리면서 해결방벙을 떠올리곤 했다.

 

이 단어의 유래에 대해서 생각해 봤다.

서구권을 기준으로 물이 받아진 욕조를 떠올렸을 때 물 위에 떠있는 인형 하면 가장 먼저 고무오리가 연상된다.

욕조에 앉아 있으면 심리적으로 안정이 되면서 복잡하던 머릿속도 정리가 되는데 이때 일상생활에서나 현재 겪고 있는 문제에 대해서 상태로 앞에 떠있는 고무오리와 대화를 하면서 현재 겪고 있는 문제의 답을 떠올리거나 스트레스를 해소하는 경험이 일반적으로 나타난 게 아닐까 생각한다.

 

실제로 심리학적으로 목욕을 하면서 대화나 노래 등 소리를 내는 행위는 스트레스를 줄이고 감정을 조절하는데 도움을 준다고 하는데 그렇기 때문에 이러한 일반적인 경험이 바탕이 되어서 '문제가 생겼을 때 찾는 대화의 대상'이라는 대명사가 고무오리가 된 게 아닌가 생각한다.  왜 하필 고무오리일까라는 부분에서 시작해서 생각해 본 나만의 의견이다.

 

Lover-Duck

러버덕은 내가 블로그를 시작하는 취지와 가장 부합한다.

어떻게 보면 블로그 자체가 나에게 러버덕과 같은 의미를 가진다. 혼잣말을 하듯이 머릿속에 생각들을 일단 써 내려간다. 그렇게 지우고 쓰고를 반복하면서 글을 작성하다 보면 정리가 덜됐던 부분도 다시 한번 정리하고 이해가 안 가던 부분도 어느샌가 자연스럽게 이해하게 된다. 

 

그래서 블로그 이름도 러버덕으로 했는데 rubber를 lover로 바꾼 건 특별한 이유는 없이 그냥 발음이 똑같아서인 이유도 있고 더 귀여운 느낌이 들기도 해서이다. 하지만 별로 마음에 들지 않아서 조만간 바꾸지 않을까 싶다.

728x90
반응형

'Life' 카테고리의 다른 글

베트남 콘삭 커피  (0) 2023.04.09
티스토리 단축키  (0) 2023.03.30
장 줄리앙 전시회 - 그리고 거기  (1) 2023.03.27
재벌집 막내아들  (0) 2023.01.08
2023-01-07 시작  (0) 2023.01.07

Naver blog, Github page, Notion 에 이어서 새로 블로그를 시작하기로 한다.

블로그를 하는 가장 큰 목적은 공부한것들을 기록하고 나중에 찾아보기 용이하게 하기위해서이다.

부가적으로 글쓰는 연습이나 머리속 생각들을 글로 기록하면서 정리하기 위해서 블로그를 꾸준히 해왔다.

 

블로그를 통해 공부한것들을 기록하기 시작한것은 프로그래밍을 배우면서이다.

배운것들을 정리하면서 복습하기위한 용도로 사용해왔었는데 생각보다 괜찮은 방법인것 같아서 블로그에 글을 작성하는것을 꾸준히하고 있다.

 

처음 시작했던 네이버 블로그에는 가장 기초적인 내용이 담겨있다. 대부분의 내용들이 수업에 나온 내용들을 정리하고 요약하면서 파생된 내용까지 정리했다. 두번째로 사용한 깃허브 페이지는 좀 더 프로그래머스럽게 블로그를 관리해보고 글을 작성해보려고 시작했고 네이버 블로그에서 정리한 내용들을 다시한번 상기하면서 글을 작성하고 이후 수업 내용을 넘어서 내가 하고싶었던 공부를 하면서 내용을 정리했다. 

 

이후 회사에 들어가고 나서는 글을 작성할 겨를이 없었고 깃허브페이지의 단점인 번거로운 과정들 때문에 게시물이 끊겼다. 하지만 틈틈이 기록하고 메모하는것은 멈추지 않았고 이때 메모장, 윈도우 노트앱, 에버노트, 옵시디언 등 여러 노트 프로그램들을 사용하다가 노션에 정착하게 되었다. 

 

그러다가 노션은 업무에 관련된 내용만 정리하기로 하고 개인적인 내용을 정리하기 위해서 블로그를 다시 시작한다. 기존에 했던 블로그를 이어서 하는게 아니고 또 새로 만든 이유는 블로그마다 나의 상태가 변화되어가는게 느껴져서 나만의 분기점으로 삼기 위해서 구분짓는 단위로 활용하기 위해서이다.

 

앞으로 언제까지 여기에 글을 게시할지는 모르겠지만 만약 글이 중단된다면 그건 아마도 나의 성장에 따른 분기시점이 될것이다.

 

 

 

 

728x90
반응형

'Life' 카테고리의 다른 글

베트남 콘삭 커피  (0) 2023.04.09
티스토리 단축키  (0) 2023.03.30
장 줄리앙 전시회 - 그리고 거기  (1) 2023.03.27
재벌집 막내아들  (0) 2023.01.08
러버덕과 러버덕  (0) 2023.01.07

+ Recent posts