ヒープを使ったソートだからヒープソート。まんまである。計算機科学ではヒープという言葉にいくつか意味があるが、この場合いわゆるデータ構造のバイナリヒープにあたる。
平均O(n log n)、最悪O(n log n)、内部ソートでメモリも食わないという優秀なアルゴリズム・・・であるが、凝った構造が災いして時代に合わない部分もあったり。
ちなみに、ヒープソートはヒープ構造を利用したソートと言われるし実際そうだが、実はヒープという構造自体がこのソートのために考案されたものらしい。
安定ソートではない。
ヒープソートは検索能力を高めた選択ソートということができる。
選択ソートではループ毎に一番小さな値が何かという情報のみを記憶し、比較途上の情報をほとんど全て捨ててしまう。これでは効率が悪いので、ヒープソートでは今一番小さい値をできるだけ素早く見つけられる構造(配列上のバイナリヒープ)を最初に作ってしまい、そこから選択ソートをしていくという二段構えの処理を行う。
前処理の段階では値の大小関係についての交通整理を行っており、データ全体としてソート済みでないものの、最小値(最大値) 決定に余計な選択肢が入らない大まかに整った状態ができる。英単語heapという言葉は、雑然とではあるが全体として積み上がって山になったものの集まりを指すが、このような「完全に整ってはいないがバラバラというわけでもない」状態から連想されたものであろう。
ヒープそのものについてはかなり細かい話になるので省略。構築の速さに定評があり、先にヒープを作る一手間を入れても元が取れるというのが面白いところ。大部分はソートというよりツリーの再構築処理である。
理論上はクイックソートに匹敵する速度と外れのない性能、省スペースを兼ね備えた優秀なソートである。しかし一方で現代コンピュータ設計に適合しない弱点も抱えてしまっている。
メモリを食わず性能安定という特性から組み込み用には有力な選択肢の一つ。この場合キャッシュ性能を気にするような環境でない可能性もあり、弱点は問題にならないかもしれない。
掲示板
掲示板に書き込みがありません。
急上昇ワード改
最終更新:2025/01/09(木) 08:00
最終更新:2025/01/09(木) 07:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。