二分ヒープとは

にぶんひーぷ

親の値が子の値以上(最大ヒープ)または以下(最小ヒープ)になるように値を置いた完全二分木。配列で表せ、根を a[0] とすると a[i] の子は a[2i+1] と a[2i+2]。最大値(最小値)の参照が O(1)、追加と取り出しが O(log n) で、優先度付きキューやヒープソートに使われる。

「二分ヒープ」は、1分野の3問の練習問題に出てきます(データ構造とアルゴリズムなど)。

この用語の分野: データ構造とアルゴリズム

二分ヒープの練習問題に挑戦

二分ヒープを、根を a[0] とする配列 a[0], a[1], a[2], … に、上の段から順に左から詰めて格納する。a[4] の子と親はどれか。

  1. A子は a[9] と a[10]、親は a[1]
  2. B子は a[8] と a[9]、親は a[2]
  3. C子は a[9] と a[10]、親は a[2]
答えと解説を見る

正解:A. 子は a[9] と a[10]、親は a[1]

根を a[0] とする場合、a[i] の子は a[2i+1] と a[2i+2]、親は a[(i−1)÷2 の切り捨て] です。i = 4 なら子は a[9] と a[10]、親は a[(4−1)÷2] = a[1] です。根を a[1] とする場合は子が a[2i] と a[2i+1]、親が a[i÷2] になるので、どちらの決め方かを確かめることが大切です。このように、ヒープは完全二分木なのでポインタを使わずに配列で表せ、添字の計算だけで親子をたどれます。

解説の中の「二分ヒープ」

「二分ヒープ」が出てくる問題(3問)

  1. 二分ヒープを、根を a[0] とする配列 a[0], a[1], a[2], … に、上の段から順に左から詰めて格納する。a[4] の子と親はどれか。
  2. 最悪の場合でも計算量が O(n log n) で、作業用の配列などの追加の記憶領域をほとんど使わずに並べ替えられるソートはどれか。
  3. 親の値が子の値以上になる最大ヒープを、根を a[0] とする配列で表している。ヒープ 50, 30, 40, 10, 20, 35 に45を追加する。末尾に置いてから、親より大きい間は親と交換する操作を行った後の配列はどれか。

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

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

半導体・電子回路・情報の計算ツール

関連する用語

配列 ポインタ 計算量 キュー 安定ソート 再帰 スタック ダイクストラ法 動的計画法 貪欲法

用語集の一覧へ