IT用語
(
ひよぺん
)
Home
コラム
用語集
About
検索
Ctrl K
Esc
見つかりませんでした
調べたいIT用語を入力してね
ヒープ(データ構造)
ひーぷ
プログラミング
用語集
› 💻 プログラミング › ヒープ(データ構造)
【ひーぷ】
ヒープ(データ構造) とは?
最終更新:
2026年3月27日
💡 「最大値・最小値」を常に一番上にキープする木構造
📌 このページのポイント
最大
ヒープ
(親≧子)と最小
ヒープ
(親≦子)の2種類
挿入と削除がO(log n)、最大/最小値の取得がO(1)
優先度付き
キュー
、
ダイクストラ法
、
ヒープソート
で活用
配列
で効率的に実装できる(左の子=2i+1、右の子=2i+2)
最大ヒープ(Max-Heap)
100
80
70
50
60
30
20
← ルート = 最大値
親 ≧ 子
配列表現:
100
80
70
50
60
30
20
[0]
[1]
[2]
[3]
[4]
[5]
[6]
最大ヒープの二分木構造と配列表現
ひよこ
ソート済み
配列
で最大値を取るのと何が違う?
ペンギン先生
ソート済み
配列
は最大値の取得がO(1)だけど、挿入がO(n)かかる。
ヒープ
は挿入も削除もO(log n)で、最大/最小値の取得がO(1)。データが動的に追加・削除される場面では
ヒープ
の方が効率的。毎回ソートし直すよりずっと速いんだよ
ひよこ
優先度付き
キュー
って何?
ペンギン先生
通常の
キュー
は
FIFO
(先入れ先出し)だけど、優先度付き
キュー
は「優先度が高いものから出てくる」。ER(救急外来)の患者対応みたいなもので、到着順ではなく重症度順。内部実装に
ヒープ
を使うと、追加O(log n)・取り出しO(log n)・最高優先度の確認O(1)で効率的なんだよ
ひよこ
配列
でどうやって木を表現するの?
ペンギン先生
完全
二分木
は
配列
の
インデックス
で親子関係を表現できる。
インデックス
iのノードの左の子は2i+1、右の子は2i+2、親は(i-1)/2(切り捨て)。ポインタが不要で
キャッシュ
効率も良い。挿入は
配列
末尾に追加してから親と比較しながら上に移動(swim up)、削除はルートと末尾を入れ替えてから下に沈める(sink down)んだよ
ひよこ
実務で
ヒープ
を直接使う場面は?
ペンギン先生
Python
のheapq、
Java
のPriorityQueue、
C++
のpriority_queueが
ヒープ
の標準実装。①
ダイクストラ法
(最短経路)の「次に処理するノード」の管理、②ストリームデータからTop-K(上位K件)の取得、③タスクスケジューラの実装、④
マージソート
の外部ソート。競技
プログラミング
では頻出だし、実務でも
ライブラリ
経由でよく使っているんだよ
まとめ:ざっくりこれだけ覚えればOK!
「
ヒープ
」って出てきたら「最大値か最小値を効率よく取り出せる木の
データ構造
」と思えればだいたいOK!
📖 おまけ:英語の意味
「Heap」
= 山積み
💬 Heap(積み上げたもの)。一番上に最大/最小の要素が積まれているイメージだよ
🔗 あわせて読みたい
二分木(バイナリツリー) とは?
動的プログラミング(DP) とは?
貪欲法(グリーディアルゴリズム) とは?
シェアする
X
URLコピー
← 用語集にもどる