プログラムの最小化


10

回路の最小化は、特定の回路のサイズを最小化するための問題です。一般的なプログラムに似たものはありますか?

特に私の質問は-

特定のプログラムの命令数を最小限にするアルゴリズムが存在しますか?私はそれが決定不可能な問題であることを知っていますが、何か最適なものを返すソリューションを探していません。

これを行うために既存のコンパイラー変換を適用できますが、事前に検索するために非常に狭い変換とアルゴリズムのセットを定義する必要がないものを探しています。

編集:私が持っているもう1つの問題は、そのような意味論的に同等なプログラムの空間全体を探究することを可能にする健全で完全な計算が可能か、それとも不可能かということです。


2
他の質問に対する答えは、「微積分」の定義に依存します。 HALTがcoREにないという事実は、ほとんどのそのような定義に対して「ノー」と答えます。

fn

回答:


10

制限されたサイズの入力を持つプログラムには単純なアルゴリズムがあります。長さ(または実行時間、長さの制限された関数)の増加順にすべてのプログラムを列挙します。プログラムがオリジナルと同等であることを証明できる場合は、停止してください。それ以外の場合は検索を続けます。

このアルゴリズムは健全です。それが完了するためには、拒否されたすべてのプログラムが元のプログラムと同等ではないことを証明できる必要があります。これは、入力サイズに制限がある限り、最終的なマシンモデルで可能です。

プログラムの実行時間が入力に依存する場合、最適なソリューションが存在しない可能性があることに注意してください。たとえば最悪の場合の限界を探すと、考えられるすべての限界のない入力を定量化すると、決定不可能な同等性に非常に速く遭遇し、入力が限界の場合は扱いにくい問題に遭遇します。

10年前、Rajev Joshi、Greg Nelson、Keith Randallよる「Denali:A Goal-Directed Superoptimizer」は、約5つの機械語命令の最適なプログラムを見つけることができました。最近の結果を見ていません。


5
サセックス大学の学生の1人は、超最適化を使用して、コアJavaルーチン(追加など)の長さを短縮しました。彼はこれを実行するために膨大な量のAmazon EC2計算を実行しました。彼の論文はこちらです。本当に短いプログラム以外には、明らかに実行可能なアプローチではありません。
Martin Berger
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.