木構造のデータを扱ういつもと違うアプローチ
アイデア自体はかなり昔にどこかのコラムで見たことがあり、頭の隅に置いていたのだが、上記リンクではかなり詳しく説明されていたのでまじめに読んでみた。
今まで、ここでいう「隣接リストモデル」でしか木構造データを扱う術を知らなかったのだが、
-
- データに対し多様なクエリーを発行する必要がある
- データに対する更新操作があまり発生しない
のような特性を持つシステムでは、ここで紹介された方法を使うメリットがあるのではないかと思った。
要約すると以下のような感じ。
データの表現
- 広く使われている「親項目へのポインタを保持する」方法で木構造を表す方式を「隣接リストモデル」と呼ぶ。
- ここで紹介する方法は「入れ子集合モデル」と呼び、要素の包含関係で木構造を表す。
- 各要素は left, right の項目を持ち、right > left の関係を持つ。
- ある要素に着目したとき、left, right の範囲を包含する要素が親に相当する。
→ 親.left < 子.left < 子.right < 親.right の関係が成立する