web-dev-qa-db-ja.com

上限、下限

アルゴリズムの上限または下限を証明するとはどういう意味ですか?

26
DarthVader

上限を証明するということは、アルゴリズムがリソースに以下の制限を使用することを証明したことを意味します。

下限を証明するということは、アルゴリズムがリソースに以上の制限を使用することを証明したことを意味します。

このコンテキストでの「リソース」は、時間、メモリ、帯域幅、またはその他のものである可能性があります。

49
caf

上限と下限は、アルゴリズムの最小および最大の "複雑さ"と関係があります(複雑さの分析では非常に特定の意味があるため、このWordを使用することをお勧めします)。

たとえば、旧友のバブルソートを見てみましょう。すべてのデータが既に並べ替えられている理想的な場合、かかる時間はf(n)であり、関数はn、リスト内の項目の数に依存します。これは、リストが確実にソートされるようにするために、データセットの1つのパス(スワップなし)を作成する必要があるためです。

データが希望する順序とは逆にソートされている特に悪いケースでは、かかる時間はf(n2)。これは、各パスで1つの要素が正しい位置に移動し、すべての要素を実行するにはnパスが必要になるためです。

その場合、big-Oの複雑さは同じままですが、上限と下限は異なります。

余談ですが、バブルソートは(通常は適切な理由で)非常に悪質ですが、特定の状況では理にかなっています。データの大部分が既にソートされており、一度に1つまたは2つのアイテムのみがリストの最後に追加される傾向があるアプリケーションで実際に使用します。 1つのアイテムを追加する場合、および逆方向のバブルソートを使用すると、新しいリストが1つのパスでソートされることを保証できます。これは下限の概念を示しています。

実際、リストがソートされているかどうかを示す追加のデータを提供するだけで、下限をf(1)に設定するバブルソートを最適化できます。ソート後にこれを設定し、最後に項目を追加するときにクリアします。

5
paxdiablo

境界が何であれ(上限または下限)、考慮できる最悪の場合の入力について常に話しています。たとえば、並べ替えでは、最悪のケースが並べ替えられていない入力リストであると想定します。

私の理解はproblemsには下限があるということです。たとえば、比較ベースのソートの下限は\ Omega(n log n)であると言います。どのような比較ベースのソートalgorithmを使用するかについては想定していません。アルゴリズム(マージソート、クイックソートなど)が何であれ、この\ Omega(n log n)の範囲を超えることはできません。下限は、特定の問題がどれほど難しいかを直感的に教えてくれます。

特定のalgorithmについて話すときは、上限について話します。たとえば、バブルソートの上限がO(n ^ 2)で、マージソートの上限がO(n log n)であるとします。上限は、直感的に、特定のalgorithmが問題の解決にどれだけ優れているかを教えてくれます。

2