プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

データ構造入門:二項ヒープ(Binomial Heap)の基礎と性質を徹底解説

二項ヒープ(Binomial Heap)は、複数の「二項木(Binomial Tree)」を集めて構成されるデータ構造です。二項木 Bk は再帰的に定義される順序付き木であり、最も単純な二項木 B0 は、たった1つのノードから成ります。

二項木の定義

二項木 Bk は、2つの二項木 Bk-1 を連結することで構成されます。このとき、一方の木の根が、もう一方の木の根の最も左の子となります。この定義により、木の規模は段階的に倍々に増えていくという特徴的な構造を持っています。

データ構造入門:二項ヒープ(Binomial Heap)の基礎と性質を徹底解説

いくつかの二項ヒープの例を以下に示します。

データ構造入門:二項ヒープ(Binomial Heap)の基礎と性質を徹底解説

二項木の主な性質

  • 二項木 Bk は、ちょうど 2k 個のノードを持ちます。
  • 木の高さは k になります。
  • 深さ i(0 ≤ i ≤ k)には、正確に $$\left(\begin{array}{c}k\\ j\end{array}\right)$$ 個のノードが存在します。これは二項係数に一致することから、「二項木」という名前の由来にもなっています。

二項ヒープとは

二項ヒープ H は、二項木の集合として定義され、次の2つの重要な性質を満たします。

  • ヒープ順序の保持:H に含まれる各二項木はヒープ順序に従います。つまり、任意のノードのキー値は、その親ノードのキー値以上になります。
  • 次数の一意性:同じ次数を持つ根をもつ二項木は、H の中に高々1つしか存在しません。

二項ヒープの具体例

データ構造入門:二項ヒープ(Binomial Heap)の基礎と性質を徹底解説

上図の二項ヒープ H は、二項木 B0、B2、B3 から構成されています。それぞれのノード数は 1個、4個、8個であり、合計で n = 13 個のノードを持ちます。これらの二項木の根同士は、次数が小さい順に並んだ連結リストによってリンクされています。

このような構造を採用することで、二項ヒープは挿入・統合(マージ)・最小要素の削除などの操作を効率的に実行できます。特に、2つのヒープを高速に統合できる点が通常の二分ヒープに対する大きな強みであり、優先度付きキューの実装などに広く活用されています。

  1. BSPツリー(空間分割木)とは?データ構造の基本原理と生成アルゴリズムを徹底解説

    BSPツリーの概要 コンピュータサイエンスの分野では、バイナリ空間分割(Binary Space Partitioning:BSP)と呼ばれる手法が用いられています。これは、超平面(ハイパープレーン)を分割面として使用し、空間を再帰的に2つの凸集合へと分割していく方法です。この分割処理を繰り返すことで、領域内のオブジェクトを木構造(ツリー構造)として表現できるようになります。このデータ構造がBSPツリーです。 バイナリ空間分割は、1969年に3Dコンピュータグラフィックスの文脈で考案されました。BSPツリーの構造により、シーン内のオブジェクトに関する空間情報を高速に参照することが可能になりま

  2. データ構造:仮想木におけるスプレー操作のアルゴリズム

    仮想木(Virtual Tree)では、一部の辺は実線(solid)として扱われ、その他の辺は破線(dashed)として扱われます。通常のスプレー操作は、実線で構成される木(solid tree)の内部でのみ実行されます。仮想木内のノード y でスプレーを行うには、以下に示す手法が用いられます。 このアルゴリズムは、木を3回走査し(各パスで1回ずつ)、その都度木を書き換えていきます。第1パスでは、ノード y から開始して実線の木内でのみスプレーを行うことで、y から木全体の根までの経路が破線に変わります。続いて、スプライシング(splicing)によってこの経路を実線に変換します。最後にノード