クイックソートの分析時に使用する障害の測定


9

Lomutoパーティションと固定ピボットを使用したクイックソートが、ランダムに生成された入力に対して不規則に、しかし全体としては不十分に実行されている理由を理解しようとしています。入力がランダムに生成されたとしても、シーケンスには多くの順序があるかもしれないと思いますが、シーケンスの無秩序のレベルを測定する方法がわかりません。反転の数を使用することを考えましたが、この別の質問から、この場合はあまり良い方法ではないことを尋ねました。

私のランダムシーケンスに「順序」がたくさんあると思う理由は、ピボットをランダム化するとパフォーマンスの問題が修正されるためです。ただし、理論的には、これらの「ランダム」な入力シーケンスでパフォーマンス上の問題が発生することはありません。


この種の障害の良い指標の1つは、コルモゴロフの複雑さです。基本的には、最も乱れたストリングは非圧縮性のストリングであると述べています。これは、非圧縮性メソッドにつながります。これは、ソートアルゴリズムの平均ケース分析などの処理に使用され、平均分析と最悪ケース分析の間の関係を見つけるために使用されています。
ピーター

私は学部生なので注意してください...このペーパーの対策の1つ(私はどちらかわかりません)のようなもう少し簡単なものを探していました:citeseerx.ist.psu。 edu / viewdoc / summary?doi = 10.1.1.45.8017
Robert S. Barnes


敵対的なピボットケースではなく、プログラミングエラーを疑う必要があります。1からNまでの整数のスクランブルシーケンスを並べ替えて、アルゴリズムが並べ替えられるかどうかを確認します
Yves Daoust、2015

log

回答:


1

LomutoとHoare
Lomutoパーティションは、等しいキーをソートするときに問題がありますが、Hoareパーティションはそうではありません。
中央値から離れたピボットを使用する場合、両方のパーティション構成は等しく影響を受けます。

障害
の測定クイックソートの目的で選択する障害の測定は簡単です。
A:固定データは、ランダムデータと比較して、中央値からどのくらい離れていますか?
Lomutoパーティションの使用を主張し、重複する値が許可されていると想定する場合は、ランダム性に対する次のテストを追加する必要があります
。B:ランダムと比較した場合の重複要素の数。

もちろん、データセットで重複する値が許可されていると仮定してLomutoパーティションを評価することはかなりばかげています。したがって、おそらく事前に重複を排除するか、Hoareパーティションに切り替えるか、重複がまれであると想定する必要があります。

どちらの指標も、統計を使用して数量化するのは簡単です。

病理データを除外することができます。
ランダム性からのその他の逸脱は、クイックソートの分析の目的には関係ありません。ピボットが中央値に近い限り、病的ではないすべてのデータで正常に機能します。
ランダムからの距離は、クイックソート-病理学的であるには確かに大きくなければならないので、それを除外することができます。

実際のコードでは固定ピボットを使用しないでください固定ピボットを使用して実際のコード
を作成する場合は注意してください*)(そのピボットが何であっても)攻撃者がサービス拒否攻撃を仕掛ける可能性があるためです。その時点での病理学的値、したがって常にピボットとしてランダムな要素を選択する必要があります。

*)x個のピボットから最適なものを選択した場合は、複数のピボット。

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