web-dev-qa-db-ja.com

平均ケースと償却分析の違い

アルゴリズムの償却分析に関する記事を読んでいます。以下はテキストスニペットです。

償却分析は、一連の操作で平均化されたコストに関係するという点で、平均ケース分析に似ています。ただし、平均ケース分析は、アルゴリズムの予想実行時間を計算するために、データ構造と操作に関する確率的仮定に依存しています。したがって、その適用性は、アルゴリズム入力の確率分布に関する特定の仮定に依存します。

入力の確率分布の仮定が有効であっても、平均的なケースバウンドは、「不運」になり、予想以上の時間を必要とする入力に遭遇する可能性を排除しません。

上記のテキストスニペットに関する私の質問は次のとおりです。

  1. 最初の段落では、平均ケース分析はどのように「データ構造と操作に関する確率的仮定に依存していますか」。平均ケース分析は入力の確率に依存することはわかっていますが、上記のステートメントはどういう意味ですか?

  2. 入力分布が有効であっても、平均的なケースが有効ではないという2番目の段落の著者の意味は何ですか?

ありがとう!

42
venkysmarty
  1. 平均ケースの時間の複雑さを取得するには、「平均ケース」が何であるかについて仮定を行う必要があります。入力が文字列の場合、「平均文字列」とは何ですか?長さだけが重要ですか?もしそうなら、私が得る文字列の平均の長さは何ですか?そうでない場合、これらの文字列の平均的な文字は何ですか?文字列がたとえば姓の場合、これらの質問に決定的に答えることは困難になります。平均的な姓は何ですか?

  2. 最も興味深い統計サンプルでは、​​最大値は平均よりも大きくなっています。つまり、平均的なケース分析では、特定の入力に必要な時間/リソースが過小評価されることがあります(これには問題があります)。あなたがそれについて考えるならば、対称的なPDFのために、平均的なケース分析はそれが過大評価するのと同じくらい過小評価すべきです。最悪のケース分析であるOTOHは、最も問題のあるケースのみを考慮するため、過大評価されることが保証されています。

13
Patrick87

平均的なケース分析は、特定のケースでは満たされない可能性のある入力に関する仮定を行います。したがって、入力がランダムでない場合、最悪の場合、アルゴリズムの実際のパフォーマンスは平均的な場合よりもはるかに遅くなる可能性があります。

償却分析ではそのような仮定は行われませんが、1つの操作だけではなく、一連の操作の全体的なパフォーマンスが考慮されます。

動的配列挿入は、償却分析の簡単な例を提供します。 1つのアルゴリズムは、固定サイズの配列を割り当てることです。新しい要素が挿入されると、必要に応じて古い長さの2倍の固定サイズの配列を割り当てます。最悪の場合、挿入にはリスト全体の長さに比例した時間がかかる可能性があるため、最悪の場合、挿入はO(n)操作です。ただし、このような最悪の場合はケースはまれであるため、挿入はO(1)の操作で、償却分析を使用します。償却分析は、入力が何であっても保持されます。

47
RossFabricant
  1. ソートされていない配列の最小値の計算を考えてみましょう。多分あなたはそれがO(n)実行時間を持っていることを知っていますが、より正確にしたいのであれば、平均的なケースではn/2比較を行います。なんでこれ?データを仮定しているからです。最小値は同じ確率ですべての位置にあると想定しています。この仮定を変更し、たとえば、iの位置にある確率がたとえばiとともに増加しているとすると、別の漸近的境界であっても、別の比較数を証明できます。

  2. 2番目の段落で、著者は、平均ケース分析を使用すると、非常に不運になり、測定された平均ケースが理論ケースよりも大きくなる可能性があると述べています。前の例を思い出してください。サイズnのm個の異なる配列で不運で、最小値が毎回最後の位置にある場合、n平均ケースであり、n/2ではありません。これは、償却済みの上限が証明されたときに発生することはありません。

4
Simone