3

私が取り組んでいるプロジェクトでは、ランダムなアルゴリズムを生成して実行できるようにしたいと考えています (信じてください、それには十分な理由があります!)。これを理解する現代的な方法は、すべてのプログラムがバイナリで一意の大きな長い数にコンパイルされることです)。

私が非常に大きな数を持っているとしましょう。これに対応するプログラムを実行するにはどうすればよいですか?

ここでは言語はそれほど重要ではありません。これを簡単にするメカニズムが含まれている場合は、他の言語よりもいくつかの言語を選択できれば幸いです。どの言語を選んでも難しい場合は、Java が最も得意です。

ランダムなアルゴリズムを生成する別の方法を提案した場合も問題ありませんが、最終的にはロジックを変更して、純粋なランダム性ではなくヒューリスティックを使用してアルゴリズムを選択することに注意してください.

4

3 に答える 3

2

「すべての TM に番号を割り当てることができる」「すべての番号は有効で意味のある TM を表す」の間には大きな違いがあります。たとえば、2000 バイトの長さの単純なプログラムのコンパイル済みオブジェクト コードを含むバイナリ文字列を考えてみましょう。これは 8000 ビットの数値で、そのうち約 10 個の2400値があります。そのほぼ無限の数の値のうち、ごく微視的な部分だけが、有効で実行可能なプログラムを表します。実行可能ファイルをランダムに生成する可能性は限りなくゼロに近いです。

ここで、たとえば 6000 バイトのプログラムについて、この演習を繰り返します。問題は 3 倍ではなく、約 10 12000倍難しいです。等々...

于 2012-10-10T02:26:14.963 に答える
1

これは基本的に、プログラムを実行するときにオペレーティング システムが行うことです。基本的に、「バイナリの大きな長い数値」をメモリにロードし、命令0からプログラムの実行を開始します。

http://en.wikipedia.org/wiki/Loader_(コンピューティング)

したがって、ランダム アルゴリズムを実行するには、ファイルにランダム データを生成し、そのファイルを exec() するだけです。

于 2012-10-10T02:11:01.773 に答える