アルゴリズムがビット文字列として表現できると仮定できるのはなぜですか?


17

計算の複雑さとチューリングマシンに関する本を読み始めています。引用は次のとおりです。

アルゴリズム(つまりマシン)は、標準的なエンコーディングを決定すると、ビット文字列として表すことができます。

この主張は単純な事実として提供されていますが、私には理解できません。

たとえば、入力としてを取り、x + 1 2または以下を計算するアルゴリズムがある場合:x(x+1)2

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

それは、これはアルファベット使用して文字列として表現することができますどのように{0,1}


38
テキストがどのようにエンコードされるかを理解するために絶対的に必要な知識がわからない。今日は学ぶのに最適な日です!joelonsoftware.com/2003/10/08/…–
エリック

1
引用されたテキストのあいまいさに基づいて、OPは別の観点からこれに来ていると思います。OPは、チューリングマシン自体への入力ではなく、「マシンとアルゴリズム全体をビット列としてどのように構築できるか」を意味すると思います。引用されたテキストは、アルゴリズム全体が自己実行できることを暗示していますが、utfエンコードされたc言語のビットは、マシンが実際にその文字列にどのように作用するかについて何も述べていません。
センチネル

3
...私は、ローマの経験不足を犠牲にして、ここの誰もが情報源を誤解し、冗談をやりすぎていると思います。これらのコメントと回答のほとんどは、任意の送信用にテキストをエンコードすることについて述べていますが、引用文は、チューリングマシンが使用するアルゴリズムをエンコードすることについて語っています。(現在)受け入れられている回答は、2番目の文で少なくともそれに触れています。
イズカタ

2
@Izkata普遍性のために、これら2つのステートメントが同等であることを認識しているかどうかわかりません。
コンラッドルドルフ

15
おもしろいことは、私があなたのコード化されたアルゴリズムを読むことができるようにするために、あなたがそれをタイプするとすぐに、それは必然的にビットのシーケンスに変えられなければならなかったことです。あなたのキーボードから私のモニターまでずっと、それは異なって表されませんでした。それは私たちの心の中だけで非バイナリ表現を持っていました。そして生理学レベルでは、シナプスを見ると、それでも議論の余地があります。
ピーター-モニカの復活

回答:


45

あなたの質問に対する最も素朴でシンプルな答えは、提供されたコード(およびコンパイルされたマシンコード)は、実際には{0,1} *の構文文字列として表されているということです。さらに、チューリングマシンについて話しているので、それらが実行するプログラムは操作/命令の線形リストであり、これらをビット/バイトとして表現できない理由はありません。


チューリングマシンを指示のリストとして正確にどのように表現しますか?通常の定義はこのようなものです。
svick

@svick以下の私の答えで述べたように、ユニバーサルTMを使用します。これは、TMの説明を入力として(適切な方法でエンコードされた)
-dseuss

@svickポインタをテープ間で移動するための簡単な指示を備えたプログラミング言語ですか?そのような例として、難解なプログラミング言語Brainfuckが考えられます。サンプルコード
-LukStorms

@LukStormsもう「チューリングマシン」と呼ぶことはできないと思います。
-svick

52

あなたはすでにテキストとしてその機能の表現を持っています。ASCIIエンコードを使用して、各文字を1バイト値に変換します。その結果は、バイトの配列、すなわち、ビットのシーケンス、すなわち、アルファベット上の文字列である。これがエンコーディングの一例です。{0,1}


丁度。そして、私が上で言ったように、それはローマがそれを書いている間に起こりました。モニターに表示されるグリフでさえ、バイナリコントローラー、つまりバイナリネットワークに接続されたバイナリメモリからバイナリデータ接続を介して送信される白黒ピクセル、つまりバイナリ情報です。すべてのアルゴリズムをビット文字列として表すことは可能ですか?それ以上:アナログメディアと対面のコミュニケーションに限定しない限り、避けられません。
ピーター-復帰モニカ

@ PeterA.Schneiderアナログメディアまたは対面を使用することは、埋め込まれた個別のエンコーディングがないことを必ずしも意味しません。自然言語を使用することは、個別のエンコードを使用することからそれほど遠くありませんか?
ジャンバプティストユネス

32

抵抗できません...

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

⢱⠀
⢸⠁
⠊

(上のドットは1を表し、空白はゼロを表します)。


5
面白い(+1)が、エンコードの本質的に任意の性質を強調するのに役立つ。
ジョンコールマン

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に固執する方が良いと思います。ここでUnicodeを使用すると、かなり複雑になります。
ルスラン

8

この概念の背後にある基本的な仮説は、教会とチューリングの論文です。「アルゴリズム」という用語は非常に非公式な用語で考えられる可能性があるため、どのアルゴリズムもビット列として表現できることはわかりにくいかもしれません。Church-Turing論文では、アルゴリズムとは何かについて非常に厳密に定義された概念を使用しています(そして、それでも単語に関するいくつかの質問がありました)。しかし、彼らの用語は非常に揺れ動いており、「アルゴリズム」のような単語のこれらの定義は非常に効果的であるため、単にそれらを定義として受け入れると主張されることがあります。

Church-Turingは、すべてのアルゴリズムをチューリングマシン上の計算として実装できると述べています。チューリングマシンの記述は有限の値のセットであるため、この記述を一連の数字にマッピングしてから、一連の0と1にマッピングする方法は簡単です。

他の回答で述べたように、ASCIIエンコードまたは他のエンコードを使用してアルゴリズムの例を表すのは簡単です。

あなたの本がこの声明を事実として与えている理由は、多くの人がアルゴリズムの定義の基礎として教会チューリングの論文を単に使用しているという事実に起因すると思います。このような定義を使用する場合、基本的にそのように定義されているため、「5は数字です」と同様に事実は明らかです。


9
チャーチ=チューリングのテーゼはありません定理、それは非公式の一つであり、アルゴリズムの概念、のための任意の定義を必要としません。また、このために教会とチューリングのテーゼを呼び出す必要もありません。一部のオブジェクトが有限の文字列として表現でき、一部のオブジェクトが表現できない「深い」理由は、一部のセットが可算であり、一部がそうでないことです。
クイックソート

「マシン仕様のコンポーネントと言語の文字列セットとの間に注入を指定すると、アルゴリズムを文字列としてエンコードできる」と見ています。OPは彼の例でこれを行い、「$(x + 1)^ 2 $」で表されるマシンを取得し、整形式C(またはBCPL、C ++など)関数の言語で文字列として再表現します。 。
エリックタワーズ

1
@EricTowers教会とチューリングの論文が必要です。それ以外の場合、すべてのアルゴリズムのアルゴリズムのマシン仕様が存在することを確認できません。
コートアンモン-モニカの

1
「表現するために数え切れないほどの数の記号を必要とするアルゴリズム」は表現できないと断言します。そのような式は、数え切れないほど多くの記号を使用する必要があります。そうでない場合は、より小さいサブ言語で表現できます。さらに、無限アルファベット上の(非愚かな)表現は、ほとんどすべてのシンボルに無限量のエントロピーを持っているため、表現を無視します(つまり、実際に受信者と通信できません)。すべての初期論理は、このような無限の文字列での操作を拒否します。また、数え切れない文字列での作業を許可する無限の論理については知りません。
エリックタワーズ

1
コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
DW

4

この声明は、ユニバーサルTMの存在に基づいています。これらは基本的にプログラム可能なTMであり、他のTMを多くてもポリオーバーヘッドでシミュレートできます。したがって、プログラムは単にゼロと1としてエンコードされた入力の一部です。


1
@Discretelizard、私はあなたに従わない。すべてのアルゴリズムは、ユニバーサルTMへの入力として表現できます。言語は計算可能または計算不可能な場合があります。アルゴリズムの計算可能性に関する標準的な概念に慣れていないので、あなたが何を得ているのかわかりません。計算できないアルゴリズムがあるとはどういう意味ですか?おそらく、必ずしも終了しないアルゴリズムを考えているのでしょうか?しかし、ユニバーサルTMはそのようなアルゴリズムを実行できます。
DW

@Discretelizard私もあなたに従わない。チューリングマシン上で実行可能なことは、本質的にアルゴリズムの定義です。たとえば、停止問題のオラクルを持つチューリングマシンの「アルゴリズム」について話すことができると思いますが、通常、「アルゴリズム」は「チューリングマシンでできること」を意味します。
デビッドリチャービー

@DavidRicherby確かに、アルゴリズムの実際の定義はより厳密だと思います。しかし、この質問に関しては、私たちがはるかに寛大な制限を課している理由についてであり、さらに強い制限があると言うことは私の意見ではあまり有益ではありません。
離散トカゲ

4

さて、どのような種類のエンコーディングでも有限のビット文字列として表現できないアルゴリズムについて話しましょう。

このようなアルゴリズムを入力してみましょう...ああ、でもそうすれば、入力したテキストのエンコードでそのアルゴリズムを表現できます。

たとえば、机上の数枚のコインの位置によって、「アナログ手段」を使用してアルゴリズムを表現するのはどうですか。それらのコインの位置はいくつかの実数でモデル化できますが(一部のエンコードでは有限表現が不可能な場合があります)、この記述全体を再びアルゴリズムの表現と見なすことができ、ビット文字列に再びエンコードできます!

これらの例が、あるアルゴリズムが有限のビット列で表現できない場合、このアルゴリズムをまったく説明する手段がないことを明確にすることを願っています!

それでは、なぜ私たちは話すことができない何かの存在を考慮するのでしょうか?哲学にとっては興味深いかもしれませんが、科学にとってはそうではありません。したがって、ビットストリングで表すことができるようにアルゴリズムの概念を定義します。そうすれば、少なくともすべてのアルゴリズムについて話すことができることがわかります。


質問が尋ねた上記の答えですが、与えられた例についての混乱は、表現が何らかのアルゴリズムを一意に表現するだけでよいという事実によるものだと思います。表現の方法は、アルゴリズムによって呼び出される実際の計算を伴う必要はありません!これは非常に便利です。計算できないアルゴリズムも表現できるからです!


rAr

1
ArR

1
はい!ラブリー!ヴィットゲンシュタイン!「Wovon man nicht sprechen kann、darübermuss man schweigen。」
ピーター-モニカの復活

r

@Raphaelはい、そして?数え切れない数のアルゴリズムを書き留めることが不可能であることは驚くべきことではありません。繰り返しますが、書き留められないアルゴリズムを「表現」すると主張します。「エクスプレス」とはどういう意味かわかりませんが、少なくとも表現を暗示しているようです。私の主張は、アルゴリズムが表現されていないという前提で始まるため、これが私の主張とどのように矛盾するかはわかりません。
離散トカゲ

2

これを確認する別の方法は、情報理論によるものです。意味のある/有用な情報/質問のすべてのエンコーディングは、バイナリの「シーケンス」にすることができます。

この分野の多くは、「意味のある情報を伝達するために、質問の最小平均数を尋ねる方法は何ですか?」という質問に行きます。実際には、これは「はい/いいえの質問を最小限にして、コミュニケーションや発言の内容を理解するための最適なアプローチは何ですか?」と同じです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.