提供:ORWiki
移動: 案内, 検索

【き (tree)】

概要

閉路を含まない連結なグラフを木という. 連結なグラフ G=(V,A) \,に対して, G \,の部分グラフであって点集合 V \,をもつ木を, グラフ G \,を張る木(spanning tree)といったり, グラフ G \,の全域木, 極大木, 全張木あるいは, 単にグラフ G \,の木などという. 根と呼ばれる1点が指定された木を根付き木(rooted tree)という. さらに, 根付き木は, (有向グラフとして)枝の向きに沿って根からすべての点に行くことができるとき, 有向木(directed tree)と呼ばれる.

詳説

 平面上 (空間内) の幾何的な問題を解く際に対象領域を分割しながら部分領域に対応する木のノードを考えて分割の階層構造を木 (構造のデータ構造) を用いて表現する. 分割のしかたにより様々な木が得られそれぞれ特別な名前がつけられている. 計算幾何の代表的な問題である点位置決定 (point location) 問題(与えられた平面上のn点からなる直線分の平面グラフS\, に対して, 質問点Q\, が与えられたとき, Q\, を含む面 (領域) を求める問題) および領域探索 (range search) 問題(与えられた平面上のn\, 点の集合S\, に対して, 質問多角形Q\, が与えられたとき, Q\, に含まれるS\, の点を列挙する問題)を例にとり説明する.

 これらの問題は, いずれも, 与えられた対象物の集合S\, (以下台集合と呼ぶ)に対して, 質問Q\, が与えられたとき, Q\, とある種の条件をみたすS\, の要素を列挙する問題であり, その意味で探索問題と呼ばれている. 同一の台集合S\, に対して, 質問(問い合わせ)が繰り返し行われることも多いので, 台集合に前処理を施して質問に高速に応答できるように工夫する. すなわち, 質問に高速に応答できるようにS\, を計算機内で違った形(データ構造)で表現する. 実際のデータベースでもこのような工夫がなされている.

 このような状況下では, S\, を表現するデータ構造D(S)\, のための記憶領域, D(S)\, を構成するための手間(および作業領域), および質問に応答している時間 (探索時間) の3\, つの基準に基づいて性能を総合的に評価しなければならない.

 点位置決定問題に対応する1次元の問題は, 一直線上に与えられたn\, 個の点の集合P\, で分割された区間の集合S\, に対して質問点Q\, が与えられたときQ\, を含むS\, の区間を求める問題となる. これは, P\, およびS\, を平衡探索木D(S)\, で表現しておけば, \mbox{O}(\log n)\, の手間で応答できる. D(S)\, を構成するための手間および記憶領域はいずれも\mbox{O}(n)\, である. さらに点集合に新しい点が付加されたり古い点が除去されたりして台集合P\, S\, が変化するのが普通である. このときにはそれに応じてD(S)\, も更新しなければならないが, この更新操作をダイナマイゼーション (dynamization) という. 1回の更新に要する手間が\mbox{O}(\log n)\, のダイナマイゼーション技術が多数知られている.

 領域探索問題に対応する1次元の問題は, 一直線上に与えられたn\, 個の点の集合S\, に対して質問区間Q\, が与えられたときQ\, に含まれるS\, の点をすべて列挙する問題となる. これもS\, を平衡探索木D(S)\, で表現しておけば, \mbox{O}(k+\log n)\, の手間で応答できる. ここでk\, は列挙される点の個数である. 更新の手間も\mbox{O}(\log n)\, である.

 2\, 次元の点位置決定問題や領域探索問題は1次元のこのような探索問題(の系列)に帰着して解かれている. たとえば, 点位置決定問題に対して有名な手法であるスラブ法 (slab method) では, グラフの頂点を通る (x\, 軸に) 垂直な直線を引いて平面を垂直な帯に分割する. この垂直な帯がスラブ (slab) と呼ばれる. 一つのスラブ内では, 横切るグラフの線分は上下関係で一列に並べることができるのでそれを平衡探索木で表現しておく. すると, 点位置決定問題は, 質問点Q\, に対して, Q\, を含むスラブを二分探索で見つける. 次にそのスラブ内で平衡探索木を利用してQ\, のすぐ上にある線分を求め, その線分を境界にもつ下の面をQ\, を含む領域として求めればよい. これは2次元の問題をn+1\, 個のスラブでの問題(1次元の問題)に帰着していると見なせる. 応答の手間は\mbox{O}(\log n)\, となるが, 必要とするデータ構造を構築するための手間と記憶領域は\mbox{O}(n^2)\, となる. これに対して, サーナクとタージャン (Sarnak-Tarjan) の残存化スラブ法 [2] では, x\, 座標の値を時刻と考えて, 連続する2つのスラブの構造の変化が定数であることに注目して, 過去に遡っても探索が可能になるようにデータ構造に工夫をしている. これは点位置決定問題に対して, 理論的に最適なアルゴリズム (前処理時間\mbox{O}(n\log n)\, , 記憶領域\mbox{O}(n)\, , 応答時間\mbox{O}(\log n)\, ) の一つである.

 領域探索に対しては多角形は軸に平行な辺からなる長方形の場合が多く, そのときにはk-d木 (k\, -d\, tree), 四分木 (quadtree), 領域木 (range tree) などのデータ構造が有効である.

 領域木は平面上の点集合の領域をx\, 座標の中央値に基づいて二分割を繰り返してできる分割に対応する二分木で, 各ノードには対応する対象領域内にある点をすべて記憶しておく. すなわち区間木 (interval tree) の各ノードに対応するx\, 区間に入る点を平衡探索木などで記憶しているものである. するとx,y\, 軸に平行な質問長方形Q\, が与えられたとき, Q\, x\, 区間が区間木の分割に対応して互いに共通部分をもたない区間の和集合として表現されるが, そのような区間に対応するノードで一次元の領域探索をすることでQ\, に含まれるSの点を効率的に列挙できる.

 k\, -d\, 木はk\, 次元の空間の領域分割を表現するデータ構造の一つであり, 2次元の場合では, 根に全体領域が対応し, その左右の子にはx\, 座標に注目して左右に二等分された点集合の領域が対応する. 次に分割された左(右)点集合領域をy\, 座標に基づいて上下に二等分しそれぞれ左(右)の子の左右の子に対応させる. 以下交互に繰り返して対応する領域に点が1個になったら分割を終了する. この分割法を表現したものが2-d\, 木である. k\, 次元のときは, x_1\, 座標, x_2\, 座標, \cdots\, , x_k\, 座標といってまた, x_1\, 座標に戻り循環しながら分割していったものを表現する. これに対して, 四分木は2\, 次元平面の領域分割を表現するデータ構造で, 根に全体領域が対応し, 根の4\, つの子にはx\, 座標の中央値およびy\, 座標の中央値を通る水平線および垂直線をひいて四分割された部分領域が対応する. さらにそれぞれの子v\, に対応する部分領域を同様に水平線および垂直線で四等分してv\, の4つの子に対応させる. このようにして得られる分割を表現するデータ構造が四分木である. 分割された領域に対象物がなくなると分割を停止する.

 k\, -d\, 木も四分木も探索は同様で, x,y\, 軸に平行な質問長方形Q\, が与えられたとき, Q\, と共通部分をもつ領域に対応するノードで1次元の領域探索をすることでQ\, に含まれるS\, の点を効率的に列挙できる.

 八分木 (octree)は3次元空間の点の集合の分割を表現するデータ構造で, 3次元の領域探索などに用いら, 2次元平面における四分木に対応する. 計算幾何の様々な探索問題に対するアルゴリズムとその詳細については文献 [1] を参照のこと.



参考文献

[1] 伊理正夫監修, 腰塚武志編集, 『計算幾何学と地理情報処理(第2版)』, 共立出版, 1993.

[2] N. Sarnak and R.E. Tarjan, "Planar Point Location Using Persistent-Search Trees," Communications of the ACM, 29 (1986), 669-679.

個人用ツール