アルゴリズムの自動ランタイム分析の方法はありますか?


10

私は疑問に思っています、少なくともアルゴリズムの関連するサブセット(分析可能なアルゴリズム)で機能する自動ランタイム分析の方法はありますか?

私は私に与えた「自動アルゴリズム分析」ググこれを、それはあまりにもMathyさんです。私が理解できるpsuedocodeの簡単な例が欲しいだけです。具体的すぎるかもしれませんが、一見の価値があると思いました。


「any」と「an」の間のストレスが、あなたが本当に何を求めているかをどのように明らかにするのか、私にはわかりません。いくつかの決定手順が特定のアルゴリズムBにバインドされている場合、実際の入力はなく、答えは常に同じです。あなたが尋ねたいのは、クラスがバインドされている/既知の「アルゴリズムのクラス内の任意のアルゴリズム」かどうかだと思います。(編集:これは私のムムのコメントも指摘されています)。
Nicholas Mancuso 2014

2
"an"と "any"のあいまいさが、数量詞が発明された理由です。
Nate Eldredge 2014

2
質問を編集して、関連する部分に焦点を当てました。正確にゼロの数学を使用して問題を正確に(これまでに質問を指定した限り)、簡潔に表現する方法に注意してください。さて、質問はまだ不十分です:もちろんそのようなアルゴリズムはあります。たとえば、で実行されるアルゴリズムの(非常に関連性の高い)クラスのすべてのアルゴリズムを分析する単純なアルゴリズムがあり。したがって、入力のセットにいくつかの制限を課す必要があることは明らかです。(「私が理解できる疑似コードの簡単な例」はないかもしれないことに注意してください。)Θ(nlogn)
ラファエル

回答:


12

COSTAツールはこれを実行しますが、計算可能性の問題が原因で、ご想像のとおり多くの場合失敗します。これについては多くの論文があります。 E. Albert、P。Arenas、S。Genaim、G。Puebla、D。ZanardiniによるJavaバイトコードのコスト分析は、良い出発点です。

取られたアプローチは、Javabyteコードから実行時の反復を推測し、これを閉じた形式に変換することです。このツールは、スペース使用量の境界も計算します。


8
@Nathvi私はあなたがいくつかのコメントにイライラしていることを理解できますが、私は本当に必要ではないことに同意しますが、非常に評判の高い科学者の仕事(そして偶然にも私の答え)に「ペタンティックドライブル」という用語を使用しないように注意する必要もあります。あなたは数学が好きではない資格がありますが、それなしではそれほど遠くに行くことはできません。
babou 2014

12

特定のアルゴリズムが停止するかどうかを決定できるアルゴリズムはないため、特に、特定のアルゴリズムの複雑さを厳密に分析できるアルゴリズムはありません。


2
私の質問は、入力された任意のアルゴリズムに関するものではありません。そうであれば、停止の問題により、あなたの答えは正しいでしょう。「私のアルゴリズムBを取り込んで、アルゴリズムBの時間の複雑さを出力するアルゴリズムAはありますか?」
Nathvi、2014

6
アルゴリズムBが固定されている場合は、アルゴリズムAがあることを確認してください。「O(n)」またはBに対応する複雑さの測定値を出力するだけのアルゴリズムがあれば十分です。アルゴリズムAへの入力が1つしかない場合、その場合、必要な出力は1つだけです。
mhum

5
@Nathviそれも私にははっきりしていませんでした-私はまた、「他のアルゴリズムの複雑さを見つけるアルゴリズムはあるのか」という質問も理解しましたが、それでもあなたの本当の質問は理解できません。あなたが賛成票を数えることに夢中なら、どうやら2人以上がそのように解釈しました。混乱した場合は、質問を編集することをお勧めします。それ以外の場合は、質問を読む全員ではなく、この会話を読む人だけが、あなたが求めていることを理解し、良い答えを出します。FWIW、私はそれがあることを意図していたとは思わない... -あなたはDWの応答が敵対的だと感じたように見える
JKFF

6
@ignis答えは不完全かもしれませんが、Yuvalが書いた文章は完全に正しいです。そして、停止の問題はエキゾチックなサイドケースではありません。それは計算の本質です。
David Richerby 14

3
@nikieこれはこの質問の範囲内では役に立ちません。実行時の境界は、常に終了するすべてのアルゴリズムのセットであっても決定できません
ラファエル

9

(半)自動化された平均ケース分析への1つのアプローチ、つまりMaLiJAn knowを知っています。これは、KnuthがTAoCPで使用する分析の種類によく似ています。核となる考えは

  • プログラム(フロー)をマルコフ連鎖としてモデル化し、
  • 一連のプログラム実行をカウントすることにより、いくつかの固定入力サイズ遷移確率をトレーニングします(これにより、最尤推定量が生成されます)。n
  • 確率関数n外挿し、
  • コンピュータ代数を使用して平均コストを導き出します(これらの関数を記述します)。

追加のコスト測定(例:比較、「時間」)のみが機能し、期待値のみが正確であることに注意してください(完全確率関数を想定)、より高いモーメントは導出できません。

外挿を除くすべてのステップは厳密であり[2]、この方法はよく知られている結果を高精度で再現することが実証されています-もちろん、適切なランダムサンプル入力が与えられます。結果に対する証明または近似の保証はありませんが(これまでのところ、外挿ステップは純粋にヒューリスティックです)、ツールで得られた結果は、分析が難しいアルゴリズムで実験し、仮説を立てるのに役立ちます[3、4]。


  1. 完全な開示:私はこの研究グループのメンバーであり、ツールの開発に関わっていました。
  2. U. LaubeとM. Nebelによるアルゴリズムとデータ構造の最尤分析(2010)[ preprint ]
  3. S. Wild et al(2012)によるMaLiJAnを使用したJava 7のデュアルピボットクイックソートのエンジニアリング [ プレプリント ]
  4. U. Laube und M. Nebelによる特別グラフでのFord–Fulkerson法の最尤分析(2015)[ preprint ]

これらの手法には、平均的なケース分析の精度に関する推定が付属していますか?
Martin Berger、

@MartinBerger残念ながらありません。私たちはそれについていくつかのアイデアを持っていますが、まだ実装されていることは言うまでもありません。有限数の入力サイズのみをチェックするメソッドをだますのは簡単なので、一般的に希望はほとんどないことに注意してください。ランタイム関数やデータセット、あるいはその両方を前提として、何かが可能になる場合があります。ツールは、少なくとも「もっとデータが必要です」と言うことができなければなりません。
ラファエル

それは面白い。この追加作業を回避していただければ幸いです。
Martin Berger、

8

もちろん、Yuval Filmusが指摘したように、そのような問題に対する一般的な解決策を期待するべきではありません。しかし、通常そうであるように、一般的なケースの興味深いサブセットに対する解決策が見つかります。

私はこの種の仕事についてたまたま知っているので、決してこの分野の専門家ではなく、かなりの知識があります。これは自動平均複雑度分析に関係し、作業はPhilippe Flajoletと彼の同僚によって行われました。

λυ´ω

私がウェブで見つけた1つの論文は1990年の論文です:Philippe Flajolet、Paul Zimmermann、およびBruno Salvyによるアルゴリズムの自動平均ケース分析

後の論文でこの作業が拡張されたと思いますが、実際にはわかりません。作品はかなりひどく引用されており、それをウェブで検索すると、同じトピックに関するより最近の作品が得られるはずです。

今、私はフラジョレットと彼の同僚の仕事が非常に数学的なものであったことを恐れています。

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