最悪の場合の実行時間が指数関数的である一方で、シンプレックスアルゴリズム以外のアルゴリズムが実際に非常にうまく機能する他のアルゴリズムはありますか?


9

最悪の場合、実行時間が多項式である場合、一般にアルゴリズムを「良いアルゴリズム」と呼びます。ただし、場合によっては(たとえば、シンプレックスアルゴリズム)、アルゴリズムの最悪のケースは指数関数的ですが、実際には非常にうまく機能します。

シンプレックスアルゴリズム以外に、この状況の(確定的な)例はありますか?


1
:関連する質問に興味ができるcstheory.stackexchange.com/questions/305/...
ラドゥグリゴール

回答:


13

もちろん、最悪の場合の実行時間は指数関数的ですが、最新のSAT解決アルゴリズムはほとんどのインスタンスを非常に高速に解決できます。ただし、この場合、実用的な速度は、洗練された単一のアルゴリズムではなく、長年にわたるアルゴリズムエンジニアリングの結果です。競合駆動型の節学習によってSATソルバーのパフォーマンスが大幅に向上したことを理解しましたが、後の改善は、アルゴリズムのさまざまなヒューリスティックを巧妙に使用することによって達成されることがよくあります。



13

Hindley-Milnerの型推論はEXPTIME完全ですが、プログラムでは一般的に人々はそれをかなり線形に近い形で記述します。


1
これは少し違いませんか?私の記憶は、Hindley-Milnerのパフォーマンスが悪い(深くネストされたlet)ために必要な条件を特徴付けることができるため、HMが実際に優れている理由は、このネストが実際にはかなり低く制限されていることです(通常、実行するにつれてインデントが増える) letバインディングに深く入り、画面の右端に向かって神経質になっていきます...)確かに、私は以前にメモリからこの主張をしましたが、最近、その参照を回復できませんでした。
Rob Simmons、

2
いいえ、それは必要条件ではありません。letバインディングのシーケンスを(ネストなしで!)与えることができます。これにより、シーケンス内の追加のエントリごとに、推論された型のサイズが2乗されます。例については、cstheory.stackexchange.com / questions / 2428 /…を参照してください。
Neel Krishnaswami 2010年

この例はSMLであり、OCamlの処理方法に慣れていますが、バインディングのシーケンスが「let」である場合、それらネストされていると思います。グローバル関数が定義されていないためですが、ここでは暗黙的なネストが行われています。特定の定義は、その上のすべての定義にアクセスでき、以下の定義にはアクセスできません。
amnn

1
@amnn:参照されているネストは、バインドされている形式でのネストのネストでした。つまり、let z = (let y = e in e') in e''とは対照的です let y = e in let z = e' in e''
Neel Krishnaswami

9

Brendan McKayのnauty(AUTomorphismsはありませんか?)プログラムは、グラフの標準的なラベル付けの問題を解決し(グラフの同型写像とグラフの同型写像の問題を同時に解決)、指数関数的に最悪の場合のパフォーマンスを発揮します(Miyazaki、1996)。ただし、ほとんどのグラフ、特に自己同型が少ないグラフでは非常に高速に機能します。

具体的には、アルゴリズムは頂点を次数で分割することから始め、次に各パーツ間の次数で分割します。このプロセスが安定すると、重要な部分の頂点を区別するための選択を行う必要があり、これにより指数関数的な動作が発生します。ほとんどのグラフでは、この分岐手順の深さが浅いです。


私は、nautyが洗練を助けるために、いくつかのランダム性を使用したと思いましたか?その場合、これはシンプレックスアルゴリズムに非常に類似している可能性があります(ただし、グラフ同型の平滑化分析の概念は明らかにありません)。
Joshua Grochow 2010年

1
一貫性のある標準的なラベル付けを行う必要があるため、ランダム性は使用しません。ただし、頂点の分割に役立つように、独自に作成した頂点不変の手順を使用できます。時々、この不変式は、それがどのように生成されたかランダムに見えます(多くの場合、これは距離次数シーケンスの複雑な関数です)が、それは衝突を減らすためだけです。
デリックストーリー2010年

1
この頂点不変量は、シンプレックスアルゴリズムのアンチサイクリングルールと比較できます。
デリックストーリー2010年


1

LPのシンプレックスアルゴリズムと同様の混合ナッシュ均衡を見つけるためのアルゴリズムがあります。(名前を忘れました。)指数関数的に最悪の場合の複雑さがありますが、実際にはよく動作するという漠然とした記憶があります。


Lemke-Howsonアルゴリズムですか?
Rahul Savani、2011

1

ビンパッキング(多くのバリアント)は、複雑さがNP困難であることがわかっている問題です。

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

ただし、「実用的な」バージョンに適用すると、多くのヒューリスティックが非常にうまく機能します。1次元のビンの場合、これらのヒューリスティックのいくつかを、最初に適合するようにパッキングします。ファーストフィット減少; 最適; 最適な減少は、学生に見せるためのトピックとして非常に魅力的です。学生は、基本的なヒューリスティックのいくつかを自分で見つけることができます。


問題がNP完全である場合でも、多くの例があり、単純なアルゴリズムでそれを処理できます。特に、近似アルゴリズムを使用します。しかし、私は実際には指数時間アルゴリズムを探しています。あなたの例は、単純なアルゴリズムで簡単に解決できる難しい問題に関連しています。多分、ビンパッキング(または別の問題)を正確に解くための指数時間アルゴリズムがあります。そして実際には多項式時間がかかります。
Arman、

0

永続化アルゴリズム(元はEdelsbrunner-Letscher-Zomorodianによるもので、多くのバリエーションがあるため)は最悪の場合は3次ですが、実験から通常は線形時間で実行されるようです。

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