알고리즘을 비트 열로 표현할 수 있다고 가정 할 수있는 이유는 무엇입니까?


17

전산 복잡도와 터링 머신에 관한 책을 읽기 시작했습니다. 인용문은 다음과 같습니다.

정규 인코딩을 결정하면 알고리즘 (예 : 기계)을 비트 문자열로 나타낼 수 있습니다.

이 주장은 간단한 사실로 제공되지만 이해할 수 없습니다.

예를 들어 를 입력으로 사용하고 계산 하는 알고리즘이 있거나( x + 1 ) 2엑스(엑스+1)2

int function (int x){
   x = x + 1; 
   return x**2; 
}

알파벳 사용하여 어떻게 이것을 문자열로 나타낼 수 있습니까?{0,1}


38
텍스트 인코딩 방법을 이해하는 데 필요한 최소한의 필수 지식을 모릅니다. 오늘은 배우기에 좋은 날입니다! joelonsoftware.com/2003/10/08/…
Eric Lippert

1
인용 된 텍스트의 모호성에 따라 OP가 다른 관점에서 올 것이라고 생각합니다. OP는 튜링 머신 자체의 입력이 아니라 '전체 머신과 알고리즘을 비트 문자열로 어떻게 만들 수 있습니까?'를 의미한다고 생각합니다. 인용 된 텍스트는 전체 알고리즘을 자체적으로 실행할 수 있음을 암시하지만 UTF로 인코딩 된 c 언어 비트는 기계가 실제로 해당 문자열에서 어떻게 작동하는지에 대해서는 아무 것도 말하지 않습니다.
Sentinel

3
... 로마의 경험이 없어서 여기에있는 모든 사람들이 소스를 오해하고 농담을 너무 멀리하고 있다고 생각합니다. 이러한 의견과 답변의 대부분은 임의의 전송을 위해 텍스트를 인코딩하는 것에 관한 것이며 견적은 튜링 머신이 소비하는 알고리즘을 인코딩하는 것에 관한 것입니다. (현재) 받아 들여진 대답은 적어도 두 번째 문장에서 대답합니다.
이즈 카타

2
@Izkata 나는 보편성으로 인해이 두 문장이 동등하다는 것을 알고 있는지 확실하지 않습니다.
Konrad Rudolph

15
재미있는 것은 순서 나에게 그것이 당신의 코딩 알고리즘을 읽을 수 있도록하기위한 것입니다 반드시 당신이 그것을 입력 한 빨리 비트의 순서로 전환해야했다합니다. 키보드에서 모니터까지 완전히 다르게 표현되지 않았습니다. 그것은 우리의 마음에서만 비 이진 표현을 가졌다; 생리적 차원에서 시냅스를 볼 때, 심지어는 논란의 여지가 있습니다.
피터-복원 모니카

답변:


45

귀하의 질문에 대한 가장 순진하고 간단한 답변은 제공된 코드 (및 컴파일 된 기계 코드)가 실제로 {0,1} *의 구문 문자열로 표시된다는 것입니다. 또한 튜링 머신에 대해 이야기하고 있기 때문에 이들이 실행하는 프로그램은 작업 / 명령의 선형 목록이므로 비트 / 바이트로 표현할 수없는 이유는 없습니다.


Turing machine을 지침 목록으로 정확히 어떻게 표현합니까? 일반적인 정의는 다음과 같습니다 .
svick

@svick 아래 답변에서 언급했듯이 범용 TM을 사용합니다.이 TM을 입력으로 설명합니다 (적절한 방식으로 인코딩 됨)
dseuss

@svick 포인터를 테이프 위로 이동시키는 간단한 지시 사항이있는 프로그래밍 언어? 나는 그러한 예가 난해한 프로그래밍 언어 인 Brainfuck 일 수 있다고 믿는다 . 예제 코드
LukStorms

@LukStorms 더 이상 "Turing machine"이라고 부를 수 없다고 생각합니다.
svick

52

해당 기능을 이미 텍스트로 표현했습니다. ASCII 인코딩을 사용하여 각 문자를 1 바이트 값으로 변환하십시오. 그러면 결과는 바이트 시퀀스, 즉 비트 시퀀스, 즉 알파벳 위의 문자열 입니다. 이것이 인코딩의 한 예입니다.{0,1}


바로 그거죠. 그리고 내가 위에서 말했듯이, 로마가 그것을 쓰는 동안 일어났습니다. 모니터에서 볼 수있는 글리프도 바이너리 컨트롤러를 통해 이진 네트워크에 연결된 이진 메모리에서 이진 데이터 연결을 통해 전송되는 흑백 픽셀, 즉 이진 정보입니다. 그것은가 가능한 비트 문자열로 모든 알고리즘을 표현하기 위해? 그 이상 : 자신을 아날로그 미디어와 대면 통신으로 제한하지 않는 한 불가피 합니다.
피터-복원 모니카

@ PeterA.Schneider 아날로그 미디어 또는 대면을 사용한다고해서 반드시 이산 인코딩이 포함되어 있지는 않습니다. 자연어를 사용하는 것이 이산 인코딩을 사용하는 것과 멀지 않은가?
장 밥 티스트 Yunès

32

나는 저항 할 수 없다 ...

⡂⡀⣀⢀⣄⡀⣰⡉⡀⠀⡀⡀⣀⠀⢀⣀⢀⣄⡀⡂⢀⣀⡀⢀⢀⡀⠀⡰⣀⠀⣀⠀⡂⡀⣀⢀⣄⡰⡀⢠⠂
⡇⡏⠀⡇⡇⠀⢸⠀⡇⢀⡇⡏⠀⡇⣏⠀⠀⡇⠀⡇⣏⠀⣹⢸⠁⢸⠀⡇⢈⠷⡁⠀⡇⡏⠀⡇⡇⠀⡇⢼⠀
⠁⠁⠀⠁⠈⠁⠈⠀⠈⠁⠁⠁⠀⠁⠈⠉⠀⠈⠁⠁⠈⠉⠁⠈⠀⠈⠀⠱⠉⠀⠉⠀⠁⠁⠀⠁⠈⠱⠁⠘⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢤⡀⡤⠀⣀⣀⣀⠀⢤⡀⡤⠀⠀⢰⠀⠀⢹⠠⠀
⠀⠀⠀⣠⠛⣄⠀⠒⠒⠒⠀⣠⠛⣄⠀⠉⢹⠉⠁⢸⢀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀
⠀⠀⠀⣄⢄⠤⢄⢴⠤⢠⠀⢠⢠⡠⢠⡠⢄⠀⢤⡀⡤⢺⡖⠐⣷⠂⠊⢉⡆
⠀⠀⠀⡇⠸⣍⣉⠸⣀⠸⣀⢼⢸⠀⢸⠀⢸⠀⣠⠛⣄⠀⠀⠀⠀⠀⣴⣋⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

⢱⠀
⢸⠁
⠊

위의 점은 공백을 0으로 표시합니다.


5
재미 있지만 (+1) 인코딩의 본질적인 임의 특성을 강조합니다.
John Coleman

4
이 컴파일러를 작성하는 재미를 :)
Barmar


1
@Barmar 소리에 대한 도전처럼 codegolf.stackexchange.com
IMSoP

1
@RomaKarageorgievich 는 점자 문자로 렌더링 하는 기능 입니다. 다음 은 명령 줄에서 호출 할 수 있는 간단한 래퍼 입니다.
leftaroundabout

13

의 순서로 컴퓨터 저장 모든 것을 0하고 1당신이 그것을 어떻게하는지 물어 입력 한 질문을 포함. 예를 들어, 각 문자와 기호는 8 비트로 표현됩니다 (현재는 16 비트이며 더 복잡한 방식에 대해 이야기하고 있습니다). 여기서수 있습니다 . 글쎄, 그들은 비트가 아니라 16 진수 및 8 진수 코드를 보여줍니다. 숫자를 디지털 표현으로 변환하는 방법을 알고 있습니까?


6
Windows 및 UTF-16을 사용하는 Qt 또는 ICU와 같은 일부 라이브러리에서만 16 바이트입니다. 그리고 모든 문자조차도 일반적으로 UTF-32에서도 단일 코드 단위를 사용하지 않으므로 더 길 수 있습니다. 따라서이 토론에서 ASCII를 고수하는 것이 낫다고 생각합니다. 유니 코드를 여기에 가져 오는 것은 상당히 복잡합니다.
Ruslan

8

이 개념의 기본 가설은 Church-Turing 논문 입니다. "알고리즘"이라는 용어는 매우 비공식적 인 용어로 생각 될 수 있기 때문에 임의의 알고리즘이 비트 열로 표현 될 수 있음을 알기가 어려울 수 있습니다. Church-Turing 논문에서, 그들은 알고리즘이 무엇인지에 대해 매우 엄격하게 정의 된 개념을 사용합니다 (그리고 심지어 단어에 대한 몇 가지 질문이 있습니다). 그러나 그 용어가 너무 많이 흔들 렸기 때문에 때때로 "알고리즘"과 같은 단어에 대한 이러한 정의가 너무 효과적 이어서 정의 로 받아 들일 수 있다고 주장하는 경우가 있습니다.

Church-Turing은 모든 알고리즘이 Turing Machine에서 계산으로 구현 될 수 있다고 말합니다. Turing Machine에 대한 설명은 유한 한 값 세트이므로이 설명을 일련의 숫자로 매핑 한 다음 0과 1의 순서로 매핑하는 방법을 보는 것은 간단합니다.

다른 답변에서 언급했듯이 ASCII 인코딩이나 다른 인코딩을 사용하여 예제 알고리즘을 나타내는 것은 쉽지 않습니다.

나는 당신의 책이이 진술을 사실 로 제시하는 이유 는 많은 사람들이 단순히 교회 튜링 논문을 알고리즘의 정의의 기초로 사용한다는 사실에서 비롯된 것이라고 생각합니다 . 이러한 정의를 사용하는 경우 기본적으로 정의한 "5는 숫자"와 같이 사실입니다.


9
교회 - 튜링의 논문은 하지 정리 (theorem)과는 비공식 하나입니다 알고리즘의 개념에 대한 정의를 포함하지 않습니다. 나는 또한 이것을 위해 교회 튜링 논문을 불러야 할 필요성을 보지 못했다. 일부 객체가 유한 문자열로 표현 될 수 있고 일부 객체가 계산할 수없고 일부는 계산할 수 없기 때문에 "깊은"이유가 있습니다.
quicksort

"기계 사양의 구성 요소와 언어의 문자열 집합 사이에 주입을 지정하면 알고리즘을 문자열로 인코딩 할 수 있습니다." OP는 그의 예에서 이것을 " $ (x + 1) ^ 2 $ "로 표현한 기계를 취하여 잘 구성된 C (또는 BCPL, C ++ 등) 언어의 문자열로 다시 나타냅니다. .
Eric Towers

1
@EricTowers 교회-투어링 논문이 필요합니다. 그렇지 않으면 모든 알고리즘에 대해 알고리즘의 기계 사양이 있는지 확신 할 수 없습니다.
Cort Ammon-복원 모니카

1
나는 "표현하기 위해 셀 수없이 무한한 수의 기호를 요구하는 알고리즘"을 표현할 수 없다고 주장한다. 이러한 표현은 셀 수없이 많은 기호를 사용해야하며, 그렇지 않으면 더 작은 하위 언어로 표현 될 수 있습니다. 또한, 무한 알파벳에 대한 (어리석지 않은) 표현은 거의 모든 기호에 무한한 양의 엔트로피를 가지므로 표현을 무시합니다 (즉, 실제로 수신자와 통신 할 수 없음). 모든 ffirstary 논리는 그러한 무한 문자열에서 작동을 거부하며 셀 수없는 문자열에 대한 작업을 허용하는 부정 논리를 알지 못합니다.
Eric Towers

1
의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
DW

4

이 진술은 보편적 인 TM 의 존재에 근거합니다 . 이들은 기본적으로 프로그래밍 가능한 TM으로, 대부분의 폴리 오버 헤드로 다른 TM을 시뮬레이션 할 수 있습니다. 따라서 프로그램은 단순히 0과 1로 인코딩 된 입력의 일부입니다.


1
@Discretelizard, 나는 당신을 따르지 않습니다. 모든 알고리즘은 범용 TM에 대한 입력으로 표현할 수 있습니다. 언어는 계산 가능하거나 계산 불가능할 수 있습니다. 알고리즘에 대한 표준 계산 개념에 익숙하지 않으므로 무엇을 얻고 있는지 잘 모르겠습니다. 계산할 수없는 알고리즘이 있다는 것은 무엇을 의미합니까? 아마도 종료하지 않는 알고리즘을 생각하고 있습니까? 그러나 범용 TM은 여전히 ​​이러한 알고리즘을 실행할 수 있습니다.
DW

@Discretelizard 나도 당신을 따르지 않습니다. 튜링 머신에서 실행할 수있는 것은 본질적으로 알고리즘 의 정의 입니다. 예를 들어 중단 문제에 대한 오라클을 갖춘 튜링 머신에 대한 "알고리즘"에 대해 이야기 할 수 있지만 일반적으로 "알고리즘"은 "튜링 머신에서 수행 할 수있는 작업"을 의미합니다.
David Richerby

@DavidRicherby 사실, 알고리즘의 실제 정의는 더 엄격합니다. 그러나이 질문은 왜 우리가 훨씬 더 관대 한 제한을 부과하고 더 강한 제한이 있다고 말하는 것은 내 의견으로는 매우 유익하지 않다는 것입니다.
이산 도마뱀

4

자, 어떤 종류의 인코딩에 대해서도 유한 비트 열로 표현할 수없는 알고리즘에 대해 이야기 해 봅시다.

그런 알고리즘을 입력 해 보겠습니다 ... 아,하지만 그렇게하면 입력 된 텍스트의 인코딩으로 해당 알고리즘을 표현할 수 있습니다.

책상 위에 동전 몇 개를 놓고 '아날로그 수단'을 사용하여 알고리즘을 표현하는 것은 어떻습니까? 이 코인의 위치는 실제 숫자 ( 일부 인코딩 에서는 유한하게 표현하기가 불가능할 수 있음)로 모델링 할 수 있지만 이 전체 설명은 다시 내 알고리즘의 표현으로 간주 될 수 있으며 비트 열로 다시 인코딩 될 수 있습니다!

이 예제를 통해 일부 알고리즘을 유한 비트 열로 표현할 수없는 경우이 알고리즘을 전혀 설명 할 수있는 방법이 없음을 분명히 바랍니다!

그렇다면 왜 우리가 말할 수없는 무언가의 존재를 고려할 것입니까? 아마도 철학에는 흥미롭지 만 과학에는 흥미롭지 않을 것입니다. 따라서 우리는 알고리즘을 비트 열로 표현할 수 있도록 알고리즘 개념을 정의합니다 . 최소한 모든 알고리즘에 대해 이야기 할 수 있다는 것을 알고 있습니다.


위의 질문에 대한 답변이 있지만, 주어진 예제에 대한 혼란은 대부분 표현이 일부 알고리즘을 고유하게 나타내기만하면된다는 사실 때문이라고 생각합니다. 표현 방식 에는 알고리즘에 의해 호출 된 실제 계산이 필요하지 않습니다 ! 계산할 수없는 알고리즘 도 나타낼 수 있으므로 매우 유용 합니다!


아르 자형아르 자형

1
아르 자형아르 자형


아르 자형

@Raphael 네? 셀 수없이 많은 수의 알고리즘을 작성할 수 없다는 것은 놀라운 일이 아닙니다. 그리고 다시, 당신은 당신이 쓸 수없는 일부 알고리즘을 "표현"한다고 주장합니다. 나는 당신이 "표현"의 의미를 이해하지 못하지만 적어도 표현을 암시하는 것 같습니다. 내 주장은 알고리즘이 표현 되지 않는다는 가정으로 시작하기 때문에 이것이 주장과 모순되는 것을 보지 못합니다.
이산 도마뱀

2

이것을 보는 또 다른 방법은 정보 이론을 통하는 것입니다. 의미 있고 유용한 정보 / 질문의 모든 인코딩은 이진 '시퀀스'로 만들 수 있습니다.

많은 분야에서 "의미있는 정보를 전달하기 위해 최소 평균 수의 질문을하는 방법은 무엇입니까?" 실제로, 이것은 "전달되거나 말한 것을 이해하기 위해 최소한의 예 / 아니오 질문을하는 가장 좋은 방법은 무엇입니까?"와 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.