━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
データ構造・アルゴリズム論 確認問題6
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
●問 (ヒープの基本操作)

2分木で表した次のヒープについて考える.

           2
          /\
          4    6
         /
        8

このヒープに対して,次の基本操作を(授業で解説されたアルゴリズムで)順に実行する.

        0を挿入,削除,10を挿入,削除,削除.

基本操作ごとのヒープの変化を,2分木を使って図示せよ.

──────────────────────────────────────

●答 (ヒープの基本操作)

    2   →  0   →  2  →  2  →  4  →  6
   /\     /\     /\    /\    /\    /\
  4  6   2  6   4  6  4  6  8  6  8  10
 /       /\     /      /\    /
8       8  4   8      8  10  10

[解説]

ヒープとは,ヒープ条件 (どの親もその子以下) を満たす完全2分木である.
ヒープに値を挿入するには,最下段に左詰めで葉を追加し,葉から根へ向けて
ヒープ条件を満たさない (親>子 が成り立つ) 親子の値を交換する.
ヒープから値を削除するには,最下段の最右の値を根に移し,根から葉へ向けて
ヒープ条件を満たさない (親>子 が成り立つ) 親子の値を交換する.
ただし,親が左右両方の子より大きいなら,ヒープ条件を満たすようにするには,
子の小さい方と親の値を交換する.

値の交換は親子の間だけで起こり,子の間では起こらないことに注意する.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
授業のホームページ

山田 俊行
https://www.cs.info.mie-u.ac.jp/~toshi/