web-dev-qa-db-ja.com

ヒープソートのアプリケーション

Heapsortは、O(nlogn)の時間複雑性を持つソートアルゴリズムであり、O(1)スペース複雑性を使用してソートを実行します。しかし、不安定であるため、多くのアプリケーション(他の並べ替えアルゴリズムと比較してfe)。

インターバルスケジューリングに使用されていることは知っています。

ヒープソートの実用的なアプリケーションは何ですか?

編集: @AProgrammerが指摘したように、クイックソートも安定していません。

4
syntagma

クイックソートは安定していません。クイックソートは、ヒープソートよりも定数係数が低くなりますが、最悪の場合の複雑さはO(N ^ 2)であるため、一部のバリアントはその動作を回避するためにヒープソートに戻ります(たとえば introsort ですが、私は90年代初頭にアイデアが適用されたのを見たことがあると思います)。

4
AProgrammer

ヒープソートは、アイテムのコレクションの「最小」(または「最大」)だけを知りたい場合に最適です。残りのアイテムをソートされた順序で保持するオーバーヘッドはありません。たとえば、PriorityQueue。

2
Peregrine

Quicksort は、ピボットが正しく選択されない可能性が高いため(すべてのソートされた要素の中央値ではない)、小さな入力ではうまく動作しません。したがって、通常、サイズ指定された配列には Heapsort または Insertion sort が使用されます。

ここから、ヒープソートの別のアプリケーション- Intosort が始まります。 Introsortは、クイックソートとヒープソートの両方の長所を組み合わせたソートアルゴリズムです。大きな配列はクイックソートを使用してソートされますが、予想される深さの制限に達すると(log2n)、アルゴリズムはヒープソートに切り替わります。

複雑さO(nlog2n)を保証する必要がない場合、クイックソートが(ほとんど)常に使用されるため、平均して高速であり、広く使用されているライブラリアルゴリズムであるため、 。 Quicksortの動作を改善したい場合は、Heapsortと組み合わせて使用​​します。そして、O(nlog2n)が保証される場合のみ、実装はプレーンヒープソートを使用します。

1
malejpavouk

ヒープソートは常にO(nlogn)であり、クイックソートの最悪のO(n2)。これは、最大処理時間に上限を設けるために重要です。

ヒープソートは、すべてのデータが利用可能になる前に処理を開始できるため、一部のアプリケーションでも役立ちます。データは、時間遅延のあるパケットで受信される可能性があります。ソートを開始する前にすべてのデータが到着するのを待つのではなく、Heapsortは最初の要素が到着するところから開始して、最後の要素が利用可能になるとほぼ完成するように段階的に進めることができます。

1
CWallach