【ひーぷ】

ヒープ とは?

💡 「一番大きい(小さい)もの」を常にトップに置く
📌 このページのポイント
ヒープ:親が子より大きい(小さい)木構造 最大ヒープ(Max Heap) 親 ≧ 子 90 70 50 30 60 20 10 最小ヒープ(Min Heap) 親 ≦ 子 10 30 20 70 50 60 90 用途:優先度付きキュー、ヒープソートなど
ヒープのイメージ
ひよこ ひよこ

普通のソートと何が違うの?

ペンギン先生 ペンギン先生

ソートは全データを順番に並べるけど、ヒープは「一番大きい(小さい)ものだけ素早く取り出す」ことに特化しているよ。全部並べる必要がないなら、ヒープの方が効率的。タスクスケジューラで「一番優先度が高いタスクを次に実行する」のような場面で威力を発揮するんだ

ひよこ ひよこ

優先度付きキューって何?

ペンギン先生 ペンギン先生

普通のキューFIFO(先入れ先出し)だけど、優先度付きキューは「優先度が最も高い要素」を最初に取り出す。ダイクストラのアルゴリズム(最短経路探索)、A*アルゴリズム(ゲームのパスファインディング)、OSのプロセススケジューリングなど、あらゆるところで使われているよ

ひよこ ひよこ

ヒープソートって速いの?

ペンギン先生 ペンギン先生

計算量はO(n log n)でクイックソートと同じオーダーだよ。最悪の場合でもO(n log n)が保証されるのがメリット。ただし実測ではクイックソートの方が速いことが多い(キャッシュ効率の差)。追加メモリがO(1)で済むのがヒープソートの強みだね

ひよこ ひよこ

メモリ管理の「ヒープ領域」とは別物?

ペンギン先生 ペンギン先生

名前は同じだけど全くの別物だよ。データ構造のヒープは上で説明した木構造メモリ管理のヒープ領域はプログラム実行時に動的メモリ確保(mallocやnew)で使われるメモリ領域。紛らわしいから文脈で判断してね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ヒープ」って出てきたら「最大値や最小値を効率よく取り出せるデータ構造」と思えればだいたいOK!
📖 おまけ:英語の意味
「Heap」 = ヒープ(山)
💬 Heap(山積み)の名前の通り、一番大きいもの(or小さいもの)が山のてっぺんにある構造だよ
← 用語集にもどる