シンプルで実用的な決定論的アルゴリズム、複雑な実行時間


18

非常に多くの場合、アルゴリズムの実行時間が複雑な式である場合、アルゴリズム自体も複雑で非実用的です。漸近実行時間の各キューブルートと因子は、アルゴリズムに複雑さを加え、実行時間に隠された定数因子を追加する傾向があります。loglogn

この経験則が失敗する印象的な例はありますか?

もちろん、実行時間が非常に単純な最悪の場合でも、実装が非常に難しいアルゴリズムのを見つけるのは簡単です。しかし、逆はどうですか?

実装は簡単ですが、最悪の場合の漸近実行時間として非常に複雑な式が発生する、非常にシンプルで実用的な決定論的アルゴリズムの例はありますか?

キーワード「決定論的」および「最悪」に注意してください。単純なランダム化アルゴリズムの分析は、かなり簡単に複雑な表現につながります。

もちろん、「複雑な」ものは好みの問題です。とにかく、私はあなたの論文のタイトルに入れるにはあまりにもugい表現を見たいと思います。そして、1つの自然なパラメーター(入力サイズ、ノード数など)の複雑な関数を好むでしょう。


PS。私はと思っていない CWを、この「ビッグリストの質問」にする、とではありません。1つの優れた例を見つけたい(存在する場合)。したがって、これまでのどの回答よりも「良い」と思う場合にのみ、別の回答を投稿してください。


2
AKS素数性テストアルゴリズムは回答として認められますか?実行時間の「複雑さ」は、ある意味で、素数の分布の疑似ランダム性の結果であるため、私は
heしてい

私の考えでは、最悪のケースはほとんどの場合「すべてを実行する」原因であり、すべてがランタイムを測定するものです。したがって、当然、簡単なアルゴリズムは簡単なWCランタイムを持っています。何らかのトリックによって少しだけ削り取ろうとすると、複雑なランタイムが発生します。しかし、あなたの質問は興味深いです。私の気持ちが正しいかどうかは確かに興味があります。
ラファエル

@arnab:ありがとう、AKSは良いアイデアです。しかし、私たちはそれを「実用的」と呼べるかどうかわかりませんか?
ユッカスオメラ

調査の伝播、制約の伝播、シーケンシャルTRWなどのメッセージ受け渡しスキームは「アルゴリズム」としてカウントされますか?実装が簡単で、ランタイムを予測するのが難しい
ヤロスラフ・ブラトフ

おっと、私はいつもポラードのロー法が好きで、それはシンプルで実用的で、分析は本当に難しいですが、アルゴリズムのランダムさは、ポストへの答えとしてそれを無資格にします...
Hsien-Chih Chang張顯之

回答:


20

私が考えることができる最良の例は、平面内のn行の配置でレベルを計算するアルゴリズム(後述)です。つまり、正確にk行が垂直にある点で形成される折れ線です。これは、この問題で知られている最も効率的なアルゴリズムではありません。より単純で複雑な、より効率的なアルゴリズムがありますが、このアルゴリズムはほとんどの(すべてではないにしても)よりも実用的だと思います。kレベルの複雑さを使用しているため、分析はおそらくタイトではありません。これは有名な未解決の問題です(分析の他のすべての用語はタイトだと思います)。それでも、kレベルの境界を改善すると、実行時間がずっと簡単になるとは思わない。k =と仮定しますknkkkは、 nのみの関数として複雑さを記述します。k=n/2n

このアルゴリズムは、ラインスイープパラダイムに基づいており、2つの動的運動トーナメントを運動優先キューとして使用します。挿入と削除は、ラインがkレベルの上または下に移動し、1つの動的トーナメントから別のトーナメントにラインが移動するときに実行されます。したがって、あるO N 4 / 3(デイの行き用いて挿入および欠失Kレベルの複雑さが)。各イベントは、で処理されたO ログN 時間とが存在するO N 4 / 3 α nは(logn)kO(n4/3)kO(logn)イベント( α n はラインセグメントの配置の上位エンベロープの複雑さに由来し、 log n / log log nlog n -aryツリーの高さに由来します)。合計実行時間はOn4/3αnログn/ログログnαnログn/ログログnログn

On4/3αnログ2n/ログログn

詳細とリファレンスについては、ティモシーチャンの原稿http://www.cs.uwaterloo.ca/~tmchan/lev2d_7_7_99.ps.gzを確認してください。因子は、(inteadのバイナリ使用して除去することができるログN 運動大会進)を、実際には私が実行した試験における運動プライオリティキューをスピードアップ。キネティックトーナメントの代わりにキネティックヒープを使用すると、複雑さが少しlittleくなります(アルゴリズムは依然として実用的です)(平方根内のログが表示されます)。1/ログログnログnログ


素晴らしい例、ありがとう!これは簡単なことではありません。:)
ユッカスオメラ

1
このアルゴリズムは非常に簡単です乱択アルゴリズムは、私の論文「平面的な配置で散歩」を参照してください。これらのアルゴリズムのいずれかを(実装誰かとして(実装するよりも、実際には遅いです)。
サリエルのHar-Peled

私が考えていたものに最も近いと思われるため、この答えを受け入れました。しかし、誰かが新鮮なアイデアを持っているなら、私は聞いてうれしいです!
ユッカスオメラ

24

ユニオン検索データ構造操作は、次の条件を満たすようです。

http://en.wikipedia.org/wiki/Disjoint-set_data_structure


2
確かに、私は同じ答えを投稿しましたが、あなたがそれに私を打ち負かしたことに気づいた後、それを削除しました。:)非理論家でも発見できるかもしれないシンプルでエレガントなアルゴリズムですが、逆アッカーマンは複雑さを償却しました。
ウォーレンシューディ

まあ、の時間は、あなたがそれを比較する場合、 "複雑"という見えないO nは4 / 3 α N ログ2のn /ログログをn個ギリェルメの答えに。:)O(α(n))O(n4/3α(n)log2n/loglogn)
ユッカスオメラ

union-findのアルゴリズムの長さと証明の複雑さの比率はおそらく無敵です。3つの操作はすべて、9行のコードですか?
ニールクリシュナスワミ

1
問題は複雑な分析を持つシンプルで実用的なアルゴリズムについてではないと思います。質問は、複雑な実行時間を持つ単純で実用的なアルゴリズム、つまり上限に対して取得された実際の式に関するものだと思います。
ギルヘルムD.

6

シンプレックスアルゴリズム。実装は簡単で、実際には素晴らしく機能しますが、理論的に分析するのは面倒です。


n

実際、シンプレックスは、Klee-Minty構造を介して最悪の場合に指数関数的な時間がかかることが知られています。それは、私が思うに、ないユッカがについて尋ねているものの例だ
スレシュヴェンカト

1
たぶん、シンプレックスアルゴリズムではなく、シンプレックス法を言ったほうがいいでしょう。Klee-Mintyキューブとそのバリエーションは、一部のバニラピボットルールで機能します。しかし、たとえば、ランダムファセットピボットルールには、クレイジーな上限と(最近の)下限があります。Gil Kalaiには、最近の結果に関する素晴らしいブログエントリがありました。gilkalai.wordpress.com/2010/11/09/...
Mohitシン

良い点、Mohit。私も混乱していました。
Suresh Venkat

2

この「実用的」とみなすかどうかはわかりませんが、これは有名な未解決の問題です。ポール・エルドスは、コラッツの予想について次のように述べています。「数学は、そのような問題に対してまだ準備ができていません」

x=1


そして、このアルゴリズムによって解決される問題は何ですか...?
ユッカスオメラ

新しいランタイム分析手法を探すことをお勧めします。
モハマドアルトルコ

2
その場合、Collat​​z予想の証拠をブルートフォースで検索すると、「新しいランタイム分析手法」の動機付けになると言えます。どちらの場合も、アルゴリズムは無意識のうちに有向グラフを探索しています。Collat​​zの推測は楽しいものですが、これは「アルゴリズム」の興味深い例ではないと思います。
ニールドボードラップ

2

この例は、あなたの要求の手紙を満たしていないが、それが精神的な親和性を持っているので興味があるかもしれません。具体的には、パンケーキと焦げたパンケーキのスタックを反転でソートする問題。

http://en.wikipedia.org/wiki/Pancake_sorting

応用分野の1つは、さまざまな規則の順列の断片の反転を使用して、順列間の距離の観点からゲノムの再配列に関する質問を表現できる計算生物学(遺伝学)です。

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