最低限の効率を証明できますか?


7

問題が与えられた場合、この問題を解決するためのアルゴリズムの最良の最悪の場合の効率を証明することは可能ですか?

たとえば、配列のソートの問題を考えてみましょう。

より単純なソートアルゴリズムの多くは、最悪の場合の効率が O2クイックソートやバブルソートなど。ただし、TimsortやSmoothsortなどの他のアルゴリズムには、Oログより効率的です。

他のアルゴリズム(私の知る限り)は、配列よりも効率的に配列をソートできませんでした Θログ。より効率的な他のアルゴリズムが存在しないことを証明することは可能ですか?

より効率的なアルゴリズムが存在する場合に、ソートアルゴリズムを証明する方法がある場合、これは他の問題にも適用されますか?

回答:


10

特定のアルゴリズムが特定の時間を取る必要があること、または特定のデータ構造が特定の量のスペースを必要とすることを示す方法は確かにあります。一般的な方法の1つは、情報理論を使用することです。

ソートされていない配列は、ソートされた配列の順列です。がある可能な順列。情報理論的な意味でのソートの仕事は、それがどの順列であるかを正確に発見することです。

の間で番号を送信するには 1 そして メートル 送信が必要 ログ2メートル情報のビット。の順列を送信するには したがって、要素には ログ2情報のビット。スターリングの近似により、これはログ2+O低次 ビット。

バイナリ比較演算は、1ビットの情報を検出します。したがって、バイナリ比較演算のみを使用するソートアルゴリズムは、少なくともログ2+oログ比較。比較に一定の時間がかかると仮定すると、ソートには少なくとも時間がかかることを意味しますΩログ 時間。

基数ソートは、クエリごとに複数のビットの情報を発見することで、これに勝ることができます。

同様の議論は、二分探索が最適であることを示しています。あなたはの間の数を見つけようとしています1 そして 、つまり発見 ログ2情報のビット。クエリ操作で1ビットの情報が返される場合は、少なくともログ2 要素を検索するクエリ。

スペースの使用についても同様です。順列をメモリに保存する必要があるとします。同じ議論により、これには少なくともログ2+oログストレージのビット。あなたが必要だからログ2 整数を格納するビット 1 そして 、あなたは本質的に格納することよりも良いことはできません 整数。


7

実際、ソートには少なくとも時間がかかることが証明されていますOログソートが比較に基づいている場合の時間。固定サイズの整数の場合、より高速なメソッド(基数ソート)があります。

ただし、並べ替えは、これが行われた場合のまれな問題の1つです。一般に、ほとんどの問題の時間の複雑さの下限はわかりません。たとえば、O2 の下限でした NP-完全な問題、それから私たちはそれを知っています PNP。しかし、そのような結果は証明されていないので、PNP 謎のままです。

一般的な問題については、問題の表現を取り込んで、その時間の複雑さの下限を返すアルゴリズムはありません。これは、そのような複雑さのセットがインデックスセットになるためです。つまり、アルゴリズムではなく、言語(問題)のプロパティを表します。ライスの定理と呼ばれる結果があり、そのようなセットは決定不可能であると述べています。


2

一般にこれは可能ですが、その際に計算モデルを指定することが重要です。よく知られている古典的な例はΩログ決定木モデルでのソートにバインドされています。決定木モデルで証明されたソートの下限を回避するには、比較を実行してはなりません。

別の例は細胞プローブモデルです。ウィキペディアの例に加えて、たとえばFredman-Saks(STOC'89)を見ることができます。これは強力なモデルです。アルゴリズムで限界を超えたい場合は、メモリにアクセスしないでください。

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