
フェニック木は、1982年にDan HirschbergとJörg Rüdigerによって提唱されたデータ構造です。主に競技プログラミングで活用され、線形時間で部分和を効率的に取得できる特徴を持っています。
この記事の目次
- フェニック木の定義
- フェニック木の歴史と発展
- フェニック木の特徴と比較
- 実装と応用例
- まとめ
フェニック木の定義

フェニック木は、部分和を効率的に取り扱うための特殊な配列構造です。このアルゴリズムは、各要素の累積値を計算し、それらを通じて任意の範囲内の部分和を求めます。
例えば、数列 [1, 2, -3, 4] の累積和を作成すると得られます: [0, 1, 3, 0, 4] 。この配列から、各部分の和を高速に取得できます。
フェニック木の歴史と発展

1982年に、Dan HirschbergとJörg RüdigerはBIT (Binary Indexed Tree) としてフェニック木を初めて提案しました。その後、多くの研究者がこのアルゴリズムに改良や応用を行い、より高速で効率的なコードが生み出されました。
競技プログラミングでは特に人気が高く、近年では並行処理などの技術と組み合わせてさらなる性能向上を試みました。
フェニック木の特徴と比較

フェニック木は、整数の頻度分布を配列として保存し、その上に累積値を持つことで、線形時間で部分和の更新や取得が可能です。これに対し、平衡二分探索木は、各ノードでのキーとデータの保持により、それらの操作時間がオーダー1となる反面、配列よりも多くのメモリを使用します。
したがって、大量の連続データに対して部分和を頻繁に計算する必要がある場合、フェニック木の方がバランスの取れた選択と言えるでしょう。
実装と応用例

フェニック木を実装する際には、まず配列の初期化から始めます。各要素は累積値を持ち、更新操作では該当する位置とその親ノードまで累積値を加算します。
具体的な応用例としては、頻繁に変更される整数データセットに対する部分和計算が挙げられます。このアルゴリズムはまた、グラフ理論やネットワークフロー問題などにも広く利用されています。
まとめ
フェニック木は部分和を効率的に処理するための重要なデータ構造であり、その特性を理解し適切に使用することは現代のソフトウェア開発において必須です。
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント