アルゴリズム分析を自動化できますか?


8

コンパイラが最悪の場合の漸近分析を自動的に実行できるように、プログラミング言語とコンパイラの可能性について誰かが考えましたか?私が考えているユースケースは、コードを書いてコンパイルするプログラミング言語です。コンパイラーは、コードがO(n ^ 2)で実行されることを教えてくれます(たとえば)。これは、アルゴリズム分析を行う賢い人々が行うこと、おそらくループを数えることなどによって行われます。

  • 問題の問題を停止するため、そしてP = NPの場合の多項式時間で実行されるSATのLevinアルゴリズムなど、ダブテールで機能するプログラムを使用できるため、プログラミング言語を十分に制限して、このようなもの。特定の種類のプログラミング言語がそのようなコンパイラーを使用できないようにする否定的な結果はありますか?

  • 正確な漸近分析ではなく、「興味深い」上限を与えるシステムにも興味があります。

  • 私は特にしていないでブラックボックスと特定の長さの入力からのサンプルの統計的手法に興味を持って、プログラムにかかる時間を見つけます。これらの方法は非常に興味深いですが、私が探している方法ではありません。おおよその限界を与える正確な方法に興味があります。

誰かが私にこの方向での仕事についてのいくつかの参照を指摘してくれれば私は非常に感謝します。


5
:これは、次の質問が重複する可能性であるcstheory.stackexchange.com/questions/12585/...
コーディ

決定できない停止の問題がそのような言語にあるため、除外できる明白な言語はチューリング完全です。それからこれは疑問につながります、これが可能なチューリング完全よりも制限された言語は何ですか?しかし、間違いなく、チューリング完全でない限り、言語は「プログラミング言語」ではありません。したがって、おおまかに言って、そのような目標は基本的に理論的には不可能です...しかし、複雑さが限定された言語にはいくつかの緩和策があるかもしれません...
vzn

答えは「いいえ」です。プログラムが時間n 3で実行される場合でも、アルゴリズム的に区別することはできません。Pのランタイム境界は決定可能ですか?を参照してください(プログラミング言語は十分に表現力があると仮定します。つまり、特定のステップ数で別の特定のプログラムをシミュレートできます)。2
Kaveh

3
@Kaveh私の質問が「Pの実行時境界は決定可能ですか?」の複製であることに同意しません。私はすでにそれが不可能であることを証明する方法を知っていました。それにもかかわらず、このスレッドも私の注意を喚起してくれてありがとう!ただし、codyが指摘したように、私の質問重複している可能性があります。
manoj 2013

2
私が若くて世間知らずだったとき、私はgcovを使用して複雑さアナライザーを書こうとしました。各行が実行された回数を示します。:) 良い質問!
Pratik Deoghare 2013

回答:


8

Implicit Complexityは、たとえば、多項式プログラムのみを受け入れる型システムがあるという意味で、(一部の)複雑性クラスは型システムによって分類できることを教えてくれました。この研究のもう1つの実用的な考え方は、RAML(Resource Aware ML)です。これは、プログラムの実行時間の正確な情報を提供する型システムを備えた関数型プログラミング言語です。実際には、big-Oの複雑さよりも正確であり、基本操作のコストモデルによってパラメーター化された定数要素も含まれます。

これはごまかしだと思うかもしれません。確かに、一部のアルゴリズムは正確に計算することが非常に難しい複雑さを持っているので、この言語がプログラムの複雑さを簡単に判断できるのはなぜですか。秘訣は、与えられたアルゴリズムを表現する多くの方法があり、型システムが拒否する(いくつかの細かいプログラムを拒否する)ものと、おそらくそれを受け入れるものがあるということです。したがって、ユーザーは無料で世界を手に入れることができません。コストの見積もりを計算する必要はもうありませんが、システムで受け入れられる方法でコードを表現する方法を理解する必要があります。

(計算を終了するプログラミング言語や証明可能なセキュリティプロパティなどの場合と同様に、これは常に同じトリックです。)


ありがとう、これは非常に興味深い答えです。RAMLを詳しく見ていきます。
manoj 2013

7

COSTAツールによって開発されたCOSTA研究グループは正確に何をしたいん。(Javaバイトコード形式の)プログラムが与えられると、ツールは、プログラマーによって提供されたコストモデルに基づいてコスト方程式を生成します。コストモデルには、ランタイム、メモリ使用量、課金対象のイベント(テキストメッセージの送信など)などのエンティティを含めることができます。次に、専用のツールを使用して実行時方程式を解き、コストモデルの閉じたフォームの最悪ケースの上限を生成します。

当然のことながら、ランタイム方程式の生成に失敗したり、閉じたフォームの検索に失敗したりすることで、ツールがすべてのケースで機能するわけではありません。これは当然のことです。


2

私は実際に同じ質問について少し前に考えました。ここに私が持っていた一連の考えがあります:

あなたが言ったように、停止の問題は問題です。これを回避するには、常に停止するプログラムのみを許可する言語が必要です。一方、私たちの言語は、最も一般的な問題に対処するのに十分な表現力を備えている必要があります(たとえば、少なくとも複雑度クラスEXPのすべてをキャプチャする必要があります)。

では、LOOPプログラムを見てみましょう。LOOPプログラムは常に停止し、その表現力はEXPをはるかに超えています。より良いアイデアを得るために、ランタイム関数をLOOPプログラムとして表現できる任意のTMをシミュレートできます。

ここで、入れ子の深さと各ループの繰り返し数の大きさを構文の観点から見ることができ、開始点があります(ただし、これがどれほど遠いかはわかりません)。ただし、次の問題を考慮してください。

f

f=yyy>

pf

y := n + 1
while not prime(y) 
    y++
return y

さて、境界ループのみでこれをどのように行うのでしょうか?ここで問題となるのは、検索する必要がある数値の範囲の上限について考えることです。

 プライム pa プライム pp<pp+1

ここでの私の直感は、コンパイラーが提供できる唯一の情報は、最終的にプログラマーによって提供される構文を注意深く分析することからのものであるということです。したがって、コンパイラーがプログラムの時間の複雑さについて意味のあるステートメントを作成できるようにすることは、プログラマーにこの情報をプログラムに組み込むことを強制することを意味します。

ただし、最後の段落は主観的なものであり、興味深い結果をもたらす可能性のある他のアプローチが存在する可能性があります。私はこの道を行くときに何を期待してはいけないのかを考えたかっただけです。


2
ループの入れ子の深さがここでの主要な問題であり、複雑さはプリミティブな再帰関数に及びます。ループプログラムの複雑さ、Meyer&Ritchie、ACM '67 Conference、dx.doi.org / 10.1145 / 800196.806014を参照してください
Sylvain

ありがとう。私はあなたがここで立派な主張をすると思う。タイプ(while(predicate = true))のループを実行しようとすると、問題が発生します。それは、述語が初めてfalseになるときについて議論する必要があるためです。あなたが設定したコンテキスト内で私の質問を言い換えると、興味深いプログラムを書くために簡単な方法で構成でき、実行時間の境界を取得できる、明確に定義された実行時間を持つ一連のプリミティブを設計できるかどうか疑問に思います。おそらく最初の回答で指摘されているように、RAMLはすでにこれの一部を実行しています。
manoj 2013

1
この種のより多くのポインターを与えるために、コブハムの関数の本質的な計算の難しさは、暗黙の複雑さに関する最も初期の作品の1つとしてしばしば引用されます:再帰スキームによってFPを特徴付けます。Bellatoni&Cookによるこのラインに沿ったより最近の研究は、ポリタイム関数の新しい再帰理論的特性評価、Computational Complexity 1992にあります。SIGACTNews 31(1):31--42、2000のHofmannによる調査も参照してください。dx.doi.org/10.1145/346048.346051
シルヴァン

Sylvainに感謝します。調査を調べています。私は暗黙の複雑性理論のこの領域を認識していますが、彼らが答えようとしている基本的な質問が何であるかを理解していないため、実際にそれを研究することに全く苦労していません。今、私はこれらのアイデアを理解するより多くの動機を持っています!
manoj 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.