3

CLRS 第 3 版のセクション 9.3「最悪の場合の線形時間での選択」では、O のリストの中央値を見つけるための「選択」アルゴリズム (Blum、Floyd、Pratt、Rivest、および Tarjan のために BFPRT アルゴリズムと呼ばれることもあります) について説明しています。 (n) 最悪の場合の時間。ホワイトボードでサンプルを実行しようとしたとき、少し混乱しました。「Select」の呼び出しごとに特定の数の要素を削除できることを理解しています(30%が削除され、70%が再度チェックされる必要があると読んだことがあります)、私が混乱したのは、配列のどの部分を削除できるかでしたつまり、配列が高さ 5、幅 n/5 の行列として視覚化されている場合、では、排除された要素はどの象限にあるのでしょうか? 元々は対角線上に隣接する 2 つの象限だと思っていましたが、中央値の中央値によっては 1 つの象限にすぎないと考えています (手順 5、6、および 7 を参照)。ここで)。

そこで、ウィキペディアに行って、CLRS よりも分析が少ない簡単な説明があるかどうかを確認しました (分析のために CLRS に戻る前にアルゴリズムを理解するため)。私はこれに行き着きました、特に「最終的に、「中央値の中央値」がピボットとして選択されました。」ウィキペディアの説明の音から、「選択」は、クイックソートのピボットを選択する目的で十分な中央値である要素ではなく、真の中央値を見つけません。

では、真の中央値に関して「選択」は何をし、どのように行うのでしょうか? その中で思いつくのが「部分階層」という言葉で、それが理由で「選択」が機能するのだと理解していますが、この部分階層を元にリストから要素を中央値から除外するにはどのような論理が必要なのでしょうか。

4

1 に答える 1

3

絶対中央値を見つけます。

あなたが言ったように、「選択」は、クイックソートのピボットを選択する目的で十分な中央値である要素ではなく、真の中央値を見つけません。 特に、すべての反復でデータセットの少なくとも 30% を削除することが保証されるのに十分な中央値です。残念ながら、それは高価な操作でもあります。

重要な考え方は、中央値の中央値は、中央値がそれ以下である 5 つの要素ごとに 3 つ以下であるということです。したがって、5 個のグループの半分では、5 個の要素ごとに 3 個以下であり、セットの少なくとも 30% はそれ以下です。つまり、データ セットの最大 70% に含まれています。

同様に、データ セットの最小 70% に含まれています。

これにより、極端な値を持つピボット ポイントを選択するクイック選択の潜在的な落とし穴を回避することが保証されます。

効率と良い最悪のケースを組み合わせたい場合は、これをクイック選択と組み合わせることができます。たとえば、4 ラウンドの quickselect に続いて 1 ラウンド、その後 4 ラウンドの quickselect などです。BFPRT の高価なラウンドは保証O(n)しますが、quickselect は平均して高速になります。BFPRT の最初のラウンドを数回のクイック選択を実行するまで延期することで、余分な実行時間を平均してクイック選択より数パーセントだけ長くすることができます。(最悪の場合のコストはかなり高くなりますが、それが発生することはないと予想しています。)

于 2012-01-25T15:09:34.063 に答える