ウィキペディアはヒープソートを超えるsmoothsortの利点があることであると述べている時期に、それは近いO(n)の時間に来ます。
今、私はヒープソートがスムースソートよりも優れている点を考えていましたか?
または、この質問を言い換えると、smoothsortは常にheapsortよりも良い選択です(たとえ入力がまだある程度ソートされていなくても)。
実装を比較しましたか?おそらく違いは、smoothsortは実行時間と使用メモリの両方の点でオーバーヘッドが大きいことです。
—
Dave Clarke
ヒープソートでは、時間O(n)でヒープを構築できますが、スムースソートでは、ヒープの構築に時間O(n log n)かかります。これは、ランダム入力をソートする時間が、スムーズソートの場合は長くなる可能性があることを示唆しています(ただし、それを意味するわけではありません)。
—
Peter Shor、
@DaveClarke実装ではありません(変化する可能性があります)ではなく、アルゴリズム自体
—
Pacerier
@PeterShorスムーズソートでヒープを構築するには、O(n log n)が必要ですか?入力がすでにソートされている場合、smoothsortはO(n)であるという主張に直面して、それは飛行するように見えるでしょうか?
—
ポールワグランド
@PeterShor:ヒープのフォレストをO(n)時間でヒープ化できるため、スキューバイナリリストを使用するsmoothsortのバリアント。これを行うには、入力の長さをスキューバイナリ(O(log(n))に変換します。この数値のビットは、フォレスト内のヒープサイズを示します。このようなフォレストは、ヒーププロパティをまだ持たないものとして存在していると仮定します。これは、ヒーププロパティのないヒープが既に存在するふりをしているヒープソートと似ています。ただし、この変更を行っても、スムースソート(スキューバイナリを使用)は、ソートよりも10%以下(ソートを反転することで)のヒープソートよりも高速です。
—
ScootyPuff、2015