ディープ(Deap)入門:最小ヒープと最大ヒープを兼ね備えたデータ構造の仕組み
ディープ(Deap)は、ルートノードに要素やキー値を持たない特殊なデータ構造として定義されます。別名「双端ヒープ(double-ended heap)」とも呼ばれ、最小値と最大値の両方を効率的に扱えることが大きな特徴です。ディープは、以下のルールに従って構成されます。
- ルートノードには要素が存在せず、常に空であることを示します。
- ディープの左部分木は最小ヒープ(min-heap)を表します。
- ディープの右部分木は最大ヒープ(max-heap)を表します。
この構造により、次の命題の正しさを数学的に保証することができます。
あるノードの左部分木と右部分木がいずれも空ではなく、それぞれに対応するノードを「a」「b」と表すとき、次の関係が必ず成り立ちます。
a.KeyValue <= b.KeyValue
ディープの構造的特徴
この不等式が意味するのは、左部分木(最小ヒープ)内の任意のキー値が、右部分木(最大ヒープ)内の対応するノードのキー値以下になるということです。つまり、小さい値は左側に、大きい値は右側に配置されるため、全体を走査することなく最小値・最大値へ即座にアクセスできます。
主な利点
- 最小値の取得:左部分木のルートを参照するだけでO(1)で取得可能
- 最大値の取得:右部分木のルートを参照するだけでO(1)で取得可能
- 挿入・削除もヒープと同様に対数時間O(log n)で処理できる
このようにディープは、優先度付きキューにおいて「最小と最大の両方を頻繁に取り出したい」という要件に適した、シンプルかつ強力なデータ構造です。
-
データ構造のB+ツリーとは?仕組みとB木との違い、メリットを解説
B+ツリー(B+木)は、B木(Bツリー)を拡張したデータ構造です。B木よりも効率的な挿入・削除・検索を実現できるよう設計されており、データベースやファイルシステムのインデックス構造として広く活用されています。 B+ツリーの基本構造 通常のB木では、キーとレコード(実データ)が内部ノードと葉ノードの両方に格納されます。一方、B+ツリーでは、実際のレコードはすべて葉ノードにのみ格納され、内部ノードには検索用のキー値だけが保持されます。 さらに大きな特徴として、B+ツリーの葉ノード同士は連結リストのようにリンクされています。この構造により、範囲検索や順次アクセス(シーケンシャルスキャン)が非常に容易
-
ハーフエッジデータ構造(HalfedgeDS)とは?基本概念とCGAL実装例をわかりやすく解説
はじめにテンプレートパラメータとして用いられるハーフエッジデータ構造(Halfedge Data Structure、略称 HalfedgeDS)は、頂点・辺・面の接続情報(インシデンス情報)を管理できる、辺を中心としたデータ構造として定義されています。平面地図(planar map)や多面体など、任意の次元空間に埋め込まれた向き付け可能な2次元曲面の表現に適した構造です。このデータ構造では、各辺が逆向きの向きを持つ2つのハーフエッジ(半辺)に分割されます。各ハーフエッジは、隣接する1つの面と1つの頂点への参照を保持し、逆に各面および各頂点にも、それぞれ1つの接続ハーフエッジが格納されます。さ