ヒープソートがスムースソートよりも優れている点は何ですか?


8

ウィキペディアはヒープソートを超えるsmoothsortの利点があることであると述べている時期に、それは近いO(n)の時間に来ます。

今、私はヒープソートがスムースソートよりも優れている点を考えていましたか?

または、この質問を言い換えると、smoothsortは常にheapsortよりも良い選択です(たとえ入力がまだある程度ソートされていなくても)。


実装を比較しましたか?おそらく違いは、smoothsortは実行時間と使用メモリの両方の点でオーバーヘッドが大きいことです。
Dave Clarke

8
ヒープソートでは、時間O(n)でヒープを構築できますが、スムースソートでは、ヒープの構築に時間O(n log n)かかります。これは、ランダム入力をソートする時間が、スムーズソートの場合は長くなる可能性があることを示唆しています(ただし、それを意味するわけではありません)。
Peter Shor、

@DaveClarke実装ではありません(変化する可能性があります)ではなく、アルゴリズム自体
Pacerier

@PeterShorスムーズソートでヒープを構築するには、O(n log n)が必要ですか?入力がすでにソートされている場合、smoothsortはO(n)であるという主張に直面して、それは飛行するように見えるでしょうか?
ポールワグランド

1
@PeterShor:ヒープのフォレストをO(n)時間でヒープ化できるため、スキューバイナリリストを使用するsmoothsortのバリアント。これを行うには、入力の長さをスキューバイナリ(O(log(n))に変換します。この数値のビットは、フォレスト内のヒープサイズを示します。このようなフォレストは、ヒーププロパティをまだ持たないものとして存在していると仮定します。これは、ヒーププロパティのないヒープが既に存在するふりをしているヒープソートと似ています。ただし、この変更を行っても、スムースソート(スキューバイナリを使用)は、ソートよりも10%以下(ソートを反転することで)のヒープソートよりも高速です。
ScootyPuff、2015

回答:


10

2つのアルゴリズムを少し読んだだけでは、ヒープソートにはスムースソートよりも暗黙のOの利点がないように見えます。この種類は、smoothsortが特別な種類のヒープを使用する、特別な種類のヒープソートであると考える場合に意味があります。

ヒープソートに利点があるのは、理解しやすく、ドキュメントがはるかに優れていることです。公開されているスムースソートの実装はほとんどなく、それらに関する文献はほとんどありませんが、ヒープソートに関する文献はたくさんあります。

確かに、唯一の実際にアクセス可能な文献は、キース・シュワルツによるこの記事です。また、ウィキペディアの記事の基礎にもなっています。

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