木構造・ヒープとは?ヒープは『親が子より大きい(または小さい)完全二分木』

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

木構造・ヒープとは(全体像)

ヒープは、木構造(親と子の階層)に「親子の大小ルール」を加えたデータ構造のこと。土台は完全二分木(上の段からすき間なく詰まった木)で、そこに次のルールを足す。

ポイントは、全体を並べ替えなくても、根を見るだけで最大(最小)が分かること。だから「いちばん大きい(小さい)ものをすぐ取り出したい」場面で活躍する。なお、ヒープは配列でも実装できる(木の形をそのまま配列に並べる)。


詳しく:最大・最小ヒープとO(log n)だけ覚えれば戦える

ここが記事の心臓部。まずは2タイプの違い

最大ヒープと最小ヒープ

最大ヒープ最小ヒープ
親子のルール親 ≧ 子親 ≦ 子
根に来るもの最大値最小値

名前に注意。「最小ヒープ」は根が最小値(最大ではない)。名前と根に来るものが一致している、と覚えると取り違えない。

次に、よく問われる操作の速さ

ヒープの操作と計算量

操作速さ
根(最大/最小)を見るO(1)(一発)
要素を追加(挿入)O(log n)
根を取り出すO(log n)

根を見るだけなら一発(O(1))。追加や取り出しのあとは、ルール(親子の大小)を保つために少し並べ直すが、それでもO(log n)で速い。全部を並べ替えるO(n log n)より、必要なものだけ速く出せるのが強みだ。

なお、ヒープはふつうの木(ツリー)そのものではなく、完全二分木に大小ルールを足した特別な形。「木=ヒープ」ではない点に注意。用途は、次に学ぶ優先度キューや、ヒープソートなど。

わかりやすく言い換えると

要するに、ヒープは「トーナメント表のような、いちばん強いのが上に来る木」だ。

最大ヒープ … 各対戦で強いほうが上にいく。だから頂点(根)にいちばん強い(大きい)ものが来る

最小ヒープ … ルールを逆にすれば、頂点にいちばん小さいものが来る

全選手を順位づけしなくても、頂点を見れば優勝者(最大・最小)が一発で分かる。だから「最大(最小)をすぐ取り出す」のが得意、というわけだね。


試験のツボ

🔴 一番出る:最大ヒープと最小ヒープ

①最大ヒープ=親が子以上で、根が最大値

②最小ヒープ=親が子以下で、根が最小値(名前どおり)

🔴 次に出る:操作の速さ

①根(最大/最小)を見るのはO(1)

②挿入・取り出しはO(log n)で速い

🟡 押さえると安定:土台と用途

①土台は完全二分木(木そのものではなく特別な形)

②配列で実装でき、優先度キューやヒープソートに使う


よくある間違い

「最小ヒープは根に最大値が来る」→ ✗  最小ヒープは根が最小値。名前どおり。最大値が根なのは最大ヒープ。

「ヒープはふつうの木(ツリー)と同じものである」→ ✗  ヒープは完全二分木に親子の大小ルールを加えた特別な形。

「ヒープの挿入や取り出しはO(n)で遅い」→ ✗  挿入も取り出しもO(log n)で速い。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(最大・最小ヒープ)

📝 オリジナル問題 1 最大ヒープと最小ヒープ

ヒープに関する次の記述のうち、正しいものはどれか。

  1. 最大ヒープは根に最小値が来て、最小ヒープは根に最大値が来るものである
  2. 最大ヒープは根に最大値が来て、最小ヒープは根に最小値が来るものである
  3. 最大ヒープも最小ヒープも、根には必ず中くらいの値が来るものである
  4. 最大ヒープも最小ヒープも、根に来る値は毎回ランダムに変わるものだ
オーエスペン
オーエスペン 解答・解説

解答は 2 だよ。

最大ヒープは根に最大値、最小ヒープは根に最小値が来るんだ。名前と根に来るものが一致しているから、そこで覚えてね。

選択肢1は最大と最小が逆。選択肢3は「中くらいの値」が誤り。選択肢4は「ランダム」が誤りだよ。

選択肢判定理由
1最大と最小が逆
2最大ヒープ=根が最大・最小ヒープ=根が最小
3根は最大または最小
4ランダムではない

オリジナル問題2(操作の速さ)

📝 オリジナル問題 2 ヒープの計算量

ヒープの操作の速さに関する次の記述のうち、正しいものはどれか。

  1. ヒープの挿入や取り出しはO(n²)で、データが増えると急激に遅くなる
  2. ヒープでは根を見ることすらできず、毎回すべてを並べ替える必要がある
  3. ヒープの挿入や取り出しはO(n)で、配列の先頭から探すのと変わらない
  4. 根を見るのはO(1)、挿入や取り出しはO(log n)で速く行える
オーエスペン
オーエスペン 解答・解説

解答は 4 だよ。

ヒープは根を見るのはO(1)(一発)、挿入や取り出しはO(log n)で速いんだ。全部を並べ替えなくても、最大(最小)をすぐ出せるのが強みだよ。

選択肢1は「O(n²)」が誤り。選択肢2は「根を見られない」が誤り。選択肢3は「O(n)」が誤りだよ。

選択肢判定理由
1O(log n)で速い
2根はO(1)で見られる
3O(log n)で線形探索より速い
4根はO(1)・挿入取り出しはO(log n)

オリジナル問題3(土台と位置づけ)

📝 オリジナル問題 3 ヒープの土台

ヒープの土台や位置づけに関する次の記述のうち、正しいものはどれか。

  1. ヒープは完全二分木に親子の大小ルールを加えた特別な形のデータ構造だ
  2. ヒープはふつうの木とまったく同じもので、特別なルールは持たないものである
  3. ヒープは木とは無関係の、一列に並んだだけのデータ構造のことである
  4. ヒープは親子の大小ルールを持たず、値の並び方は自由なものとされている
オーエスペン
オーエスペン 解答・解説

解答は 1 だよ。

ヒープは完全二分木に親子の大小ルール(親が子より大きい/小さい)を加えた特別な形なんだ。「木=ヒープ」ではない、というところがポイントだよ。

選択肢2は「ふつうの木と同じ」が誤り。選択肢3は「木と無関係・一列」が誤り。選択肢4は「大小ルールを持たない」が誤りだよ。

選択肢判定理由
1完全二分木+親子の大小ルール
2特別なルールを持つ
3木構造の一種
4親子の大小ルールがある

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る