algo — C++23 日本語リファレンス GitHub

fibonacci_heap

クラス · フィボナッチヒープ(decrease-key 対応)

template <class Key, class Value, class Comp = std::less<>>
struct fibonacci_heap;

概要

フィボナッチヒープ(decrease-key 対応)

順序基準の Key と付随データ Value を保持し、Comp で Key を比較する。 Comp = std::greater<> で Key 最小をルートにする最小ヒープになる (binary_heap / dary_heap と同じ規約)。 ノードを std::vector のプールに置き int インデックスで連結する index-pool 実装で、new/delete を一切行わない(コピー・ムーブも自動で正しい)。 push は安定なハンドルを返し、update で decrease-key できる。

備考

構築・破棄

名前 説明 計算量
(constructor) 空のフィボナッチヒープを構築する $O(1)$

メンバ関数

名前 説明 計算量
empty 空か返す $O(1)$
size 要素数を返す $O(1)$
top 最上位のkeyとvalueを返す $O(1)$
push 要素を追加して安定ハンドルを返す 償却 $O(1)$
emplace 要素を追加して安定ハンドルを返す 償却 $O(1)$
pop 最上位の要素を削除する 償却 $O(\log n)$
update ハンドルの順序基準 key を更新する(ルート側へ近づく更新のみ反映)。 償却 $O(1)$

メンバ型

名前 説明 計算量
handle push が返す安定ハンドル。update に渡してその要素を decrease-key する。 構築・比較は $O(1)$

メンバの詳細

update

void update(handle h, Key key);

ハンドルの順序基準 key を更新する(ルート側へ近づく更新のみ反映)。

最小ヒープ(greater<>)では「より小さい key」への更新、つまり decrease-key に対応する。逆向きの更新は無視する。

handle

struct handle;

push が返す安定ハンドル。update に渡してその要素を decrease-key する。

既定構築(handle{})は無効値で bool 文脈で false。

メンバ 説明
handle 無効なハンドルを作る
operator bool 有効なハンドルなら true を返す
operator== 2 つのハンドルが同じ要素を指すか比較する