なぜイントロソートはマージソートではなくヒープソートを使用するのですか?


9

イントロソートの実装をカバーする宿題の一環として、なぜマージソート(または他のアルゴリズムではなく)の代わりにヒープソートが使用されるのかを尋ねられます。 O(nlog⁡(n))

Introsortは、高速な平均パフォーマンスと(漸近的に)最適な最悪のケースのパフォーマンスの両方を提供するハイブリッドソートアルゴリズムです。クイックソートで始まり、再帰の深さがソートされる要素の数(の対数)に基づくレベルを超えると、ヒープソートに切り替わります。(ウィキペディア、2014年5月6日取得。)

私が考えることができる唯一の理由は、ヒープソートが「適所に」あるということです...しかし、これがなぜここで重要になるのかは本当にわかりません。


3
イントロソートが質問の一部である場合、私たちが何かを言う前にそれが何であるかを私たちに言わなければなりません。
— ルイ

1
コンピュータサイエンスへようこそ!ここでLaTeXを使用すると、より読みやすい方法で数学をタイプセットできます。簡単な紹介はこちらをご覧ください。
— FrankW 2014年

単純にイントロソート用の疑似コードを作成するように求められ、後でマージソートではなくヒープソートを使用する理由が尋ねられます。
— user672009

@ user672009その場合、どちらかのコードを書き留めて、見つけたものを確認してください。理由は、パフォーマンスに関連する場合とそうでない場合があります。
— ラファエル

2
私は、クイックソートが適切にソートされているため、別のインプレイスソートアルゴリズムを使用する必要があると結論付けました。しかし、私は入力のために開いています。
— user672009 2014年

回答:


9

クイックソートの2つの欠点は、(ソートされていない間隔を維持するために)余分なスペースが必要であり、ピボットの選択が悪い(または、ピボットを選択するように設計された不自然なシーケンス)により、O (n 2)時間とO (n )余分な空間アルゴリズム。O(ログ⁡ん)O(ん2)O(ん)

再帰の深さが(付近で)大きくなりすぎたときにヒープソートに切り替えると、O (n log n )時間とO (log n )余分なスペースである上限が保証されます。ログ⁡んO(んログ⁡ん)O(ログ⁡ん)

O(1)O(ん)ん

ヒープソートがフルソートに使用されない理由は、クイックソートよりも遅いためです(一部はビッグO式の非表示の定数と一部はキャッシュの動作による)。


しかし、ヒープソートが使用されています...それはクイックソートのように配置されているためだと思います。
— user672009 2014年

@ user672009はあなたの最後の文と混同されているようです。遅いのでイントロソートはヒープソートから始めないことを明確にすることをお勧めします。
— ワンダリングロジック

O(1)O(lg⁡ん)

さらに、ヒープソートには、イントロソートよりもはるかに多くのキャッシュミスがあります。
— noɥʇʎԀʎzɐɹƆ

スタックの大きい部分間隔を記憶し、小さい部分をすぐに処理する限り、良いQuicksort実装は最悪の場合O(n)スペースを必要としません。
— gnasher729 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.