データ構造とアルゴリズム

親の値が子の値以上になる最大ヒープを、根を a[0] とする配列で表している。ヒープ 50, 30, 40, 10, 20, 35 に45を追加する。末尾に置いてから、親より大きい間は親と交換する操作を行った後の配列はどれか。

  1. A50, 30, 40, 10, 20, 35, 45
  2. B45, 30, 50, 10, 20, 35, 40
  3. C50, 30, 45, 10, 20, 35, 40
答えと解説を見る

正解:C. 50, 30, 45, 10, 20, 35, 40

45は a[6] に置かれ、親は a[(6−1)÷2] = a[2] = 40 です。45 > 40 なので交換して a[2] に移ります。次の親 a[0] = 50 は45より大きいので、ここで止まり、50, 30, 45, 10, 20, 35, 40 になります。交換は木の高さの分しか起こらないので追加は O(log n) で、最大値の取り出しも同じく O(log n) です。この性質から、二分ヒープは優先度付きキューの実装によく使われます。

  • A. 末尾に置いただけで、親の40より大きいのに交換していません。
  • B. 根の50より小さい45を、根まで上げてしまっています。
  • C. 正しい。40と交換した後、親の50の方が大きいので止まります。
この分野を解く 分野ページへ

関連する計算ツール

データ構造とアルゴリズムの参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

データ構造とアルゴリズムのほかの問題

  1. 二分探索木を中間順(通りがけ順。左の部分木、その節、右の部分木の順に訪れる)でたどったとき、訪れた節の値はどのように並ぶか。値はすべて異なるものとする。
  2. 空の二分探索木に、50, 30, 70, 20, 40, 60, 80 の順に値を挿入した。この木を後行順(帰りがけ順。左の部分木、右の部分木、その節の順に訪れる)でたどったときの順はどれか。
  3. 空の二分探索木に、1, 2, 3, …, 1000 の順に値を挿入した(つり合いをとる操作はしない)。この木で1000を探すとき、根から比べ始めて、見つかるまでに比べる節の数はいくつか。
  4. データベースやファイルシステムの索引に、二分探索木ではなくB木(B+木を含む)がよく使われる主な理由はどれか。
  5. 頂点が100万個、辺が300万本ほどの道路網のように、頂点の数に比べて辺の少ない(疎な)グラフをメモリに記憶する方法として適切なものはどれか。