アルゴリズムの実行時間を分析したいとしましょう。入力サイズがnの場合にアルゴリズムの実行時間を検索したい場合がありますが、最悪の場合はO(n)で示されます。ときどき、アルゴリズムのexpected timeを見つける必要があると言っている本/論文を見ます。 平均実行時間が使用されることもあります。
「予定時間」とは?最悪の場合の時間の代わりに予想される時間を見つけることはどの場合に役立ちますか?
編集:予想走行時間と平均走行の間には微妙な違いがあると思いますtimeがよくわかりません。この投稿を通して、もしあれば正確な違いを知りたいです。
予想時間は、平均値予想であり、アルゴリズムの実行時間は対象入力を使用しています。
数百万のユーザーレコードがあり、それらを並べ替える必要がある場合、your入力に最も適したアルゴリズムを使用すると、最適なexpected実行時間。これは、最悪の場合の実行時間よりも悪いが悪いアルゴリズム予想実行時間とは対照的です。
たとえば、アルゴリズムの時間複雑度の定数係数が非常に高いため、時間複雑度は低いが定数係数が小さいアルゴリズムを使用する方が理にかなっている場合がありますexpected大きい入力でひどくアウトパフォームされても、小さい入力。
おそらく、より良い例は、最悪の場合の実行時間はO(n²)ですが、予想される平均実行時間はO(n log n)、入力に関係なくである古典的なクイックソートアルゴリズムでしょう。これは、アルゴリズムがランダム化を使用する(または実装によっては使用する場合があります)ためです。つまり、いわゆるランダム化アルゴリズムです。呼び出しごとに少し異なります同じ入力でも。そのため、最悪の場合の入力は、アルゴリズムが指定された入力を分割するためのピボットを選択する方法に依存するため、実装には普遍的な最悪の場合の入力はありません。そのため、事前定義された入力を提供するだけでは最悪のケースの実行時間を引き起こすことはできません。これは、ランダム化されたアルゴリズムの場合によく見られます。ランダム化されたアルゴリズムは、入力に関係なく、期待される平均実行時間の向上を目指しています。
手元の入力に適切なアルゴリズムを使用することがすべてです。
ランダム化アルゴリズムの予想実行時間は、最悪の場合の実行時間と同様に、明確に定義された概念です。アルゴリズムがランダム化されている場合、その実行時間もランダムです。つまり、実行時間の期待値を定義できます。
よく知られている例はクイックソートです。ピボットをランダムに選択すると、ワーストケースの実行時間がO(n ^ 2)のままであっても、予想される実行時間がO(n log n)になることを証明できます。ランダム化が非常に強力な例は、最小の囲み問題です。最悪の場合の実行時間がO(n ^ 3)である単純なアルゴリズムがありますが、予想では、実行時間はO(n)のみです。
通常、平均実行時間は、「ほとんどの入力に対する」アルゴリズムの動作について話すときに使用されます。入力をランダムに生成するいくつかの方法を定義します。たとえば、配列に乱数を入力するか、1からnまでの数をランダムに並べ替えます(重複しないようにする)。または、コインを裏返して、降順または昇順のセットを取得します。番号。入力のランダムな分布に対するアルゴリズムの平均実行時間は、アルゴリズムの予想実行時間になります(この場合、アルゴリズムはランダム化されない場合がありますが、入力はランダム化されます)。
たとえば、入力ラインを分配する非常に奇妙な方法を発見するまで、一見するとうまくいくように見えるアルゴリズムが存在する幾何学的問題があります。行がランダムに分布していると想定すると、これらの奇妙なシナリオが発生する可能性が非常に低くなる可能性があるため、アルゴリズムは良好です。
対照的:予想される実行時間は、アルゴリズムが「不運でない限り」どのように実行されるかについてです。同じ入力で同じアルゴリズムを再試行しますが、ランダムに異なる選択肢を指定すると、アルゴリズムの解決が速くなる可能性があります。平均実行時間は、アルゴリズムが「ほとんどの入力」に対してどの程度適切に機能するかを示します。同じアルゴリズムを同じ入力で再試行しても、役に立ちません(おそらく、アルゴリズムもランダム化されている場合を除きます)。