回答:
以下は、それらが決定不可能であることを示す簡単な引数です。つまり、特定のアルゴリズムが実行時間またはメモリ使用量に関して最適であるかどうかをチェックするアルゴリズムはありません。
ブランクテープの停止問題を、実行時間の最適化に関する問題にまで減らします。
してみましょう与えられたチューリングマシンです。Nを次のチューリング機械とする:
n M n M n 2 n:入力
1. (最大で)ステップ、空のテープでを実行します。
2.がステップで停止しない場合は、サイズループを実行してから、NOを返します。
3.それ以外の場合は、YESを返します。
2つのケースがあります。
が空のテープで停止しない場合、マシンは入力でステップを実行します。したがって、その実行時間はです。この場合、は明らかに最適ではありません。N Θ (2 N)N Θ (2 N)N
場合ブランクテープの停止、その後機械、すべての十分な大きさのための手順の一定数のために実行される実行時間であるので、。この場合、が明らかに最適です。N n O (1 )N
要するに:
さらに、のコードを指定すると、のコードを計算できます。したがって、ブランクテープでの停止の問題から実行時の最適性の問題への削減があります。特定のチューリングマシンが最適かどうかを判断できた場合、上記の削減を使用して、特定のマシンがブランクテープで停止するかどうかを確認できます。空白のテープで停止することは不可能であるので、あなたの問題もまた決定不可能です。N N M
スペースについても同様の引数を使用できます。つまり、特定のチューリングマシンが使用するスペースに関して最適かどうかを確認することもできません。
さらに強力なステートメントが当てはまります。特定の計算可能な関数が、特定の計算可能な関数を計算する時間の複雑さの上限であるかどうかを判断することはできません。スペースについても同様です。つまり、基本的な複雑性理論でさえ、アルゴリズムによって自動化することはできません(これは、複雑性理論家にとって朗報と見なすことができます;)。
他の人が述べたように、答えはノーです。
しかし、Blumが書いた興味深い記事「再帰関数の複雑さのマシンに依存しない理論」があります。彼は、プログラムがこれらの関数を計算するためにどれほど速くても、非常に速くそれらを計算するための別のプログラムが存在するという特性を持ついくつかの関数があることを示しました。
とても素敵な物件です!
ハ!答えが「はい」の場合、別の世界に住んでいることになります。
残念ながら、これは不可能であり、実際、私は(自明ではない)最適性を証明することがコンピュータサイエンスの最も興味深い(そして難しい)問題であると個人的に考えています。私が知る限り-私は修正されてうれしいです-多項式の問題に対する最適化の結果は存在しません(もちろん、アルゴリズムが入力サイズに比例して時間がかかる自明な最適化の結果を除く)。