120 likes | 268 Views
The SR-tree: An Index Structure for High-Dimensional Nearest Neighbor Queries. N. Katayama, and S. Satoh, Proceedings of the 1997 International Conference on Management of Data, ACM SIGMOD, pp. 369-380, 1997. K-D-B-Tree. B+-tree に似た構造の平衡木 空間を再帰的に平面で分割 木の同じ高さにある部分木が表わす空間同士は交差しない ノードの分割が問題
E N D
The SR-tree: An Index Structure for High-Dimensional Nearest Neighbor Queries N. Katayama, and S. Satoh, Proceedings of the 1997 International Conference on Management of Data, ACM SIGMOD, pp. 369-380, 1997
K-D-B-Tree • B+-treeに似た構造の平衡木 • 空間を再帰的に平面で分割 • 木の同じ高さにある部分木が表わす空間同士は交差しない • ノードの分割が問題 • 部分木の表わす空間が交差しないように分割を行なう • 分割時に空に近いノードができることがある • このため充填率が高くない
VAMsplit R-Tree • R-Treeを最適化したもの • 木の構築法はk-d treeを基にしている • 座標軸と平行な線で空間を再帰的に分割 • R*-tree、SS-Treeよりも検索性能が良いと報告されている • あらかじめデータの特徴を調べておいてからtreeを作成 • dynamicなindexではない
TV-Tree • R*-treeを改良したもの • 多次元の特徴ベクトルを主な対象としている • 一部の次元を重要視することで、空間全体の次元数を減らす • 最も重要視された軸で同じ座標値を持つ点が複数存在した場合、最も重要視する軸が変更される • 以下の2つの条件を満さなければ、TV-Treeの優位性は保たれない • 次元を重要度順に並べることができる • 軸を変更するような特徴ベクトルが存在する
SS-Tree • nearest neighbor queryの性能向上のための木 • 図形の近似形状は球(2次元ならば円) • 球の中心は、球に含まれる点の重心 • 球を格納するための記憶量は、MBRのより小さい • 球 : 中心の座標値と半径 • MBR: 対角の2点 • SS-Treeのreinsertは同じノードにエントリが挿入されない限り、reinsertを繰り返す • R*-Treeでは同じ高さでは一度だけしかreinsertを行なわない • 挿入するノードの重心と最も近くに重心があるノードに挿入する
SS-Treeのノードの構造 struct SSElem { SSElemPtr child_array_ptr; // Child pointer int immed_children; // Children in array int total_children // Children in subtree int height; // Height above leaf int update_count; // w/out refresh values(論文ではノードが // 5回変わる毎にradius,varianceを再計算) float radius; // of enclosing sphere(重心から最も離れた // feature vectorまでの距離以上) float variance; // Sum squared dist. float centroid[DIM]; // FVect or mean value char data[DATA_SIZE]; // Data repr. elem };
SR-Tree(Sphere/Rectangle-Tree) • 最近傍点探索のためのインデックス • 対象とするデータは点データ • データをsphereとrectangleで階層的に管理
Bounding Sphere vs. Rectangle • bounding sphereとbounding rectangleの体積と直径の平均の比較 • 体積 • Sphereの方が大きい • 直径(rectangleでは、rectangleの対角線の長さ) • Rectangleの方が大きい • nearest neighborでは、直径が小さい(sphere)の方が良い性能を示す • このため、SS-TreeはR*-Treeよりnearest neighborの性能が良い
SR-tree ノードの構造 • leaf node • L : (E1, ... ,En) (mL<n<ML) • Ei : (p, data) • p : point • data : pのattribute • leaf以外のnode • N : (C1, ... , Cn) (mN<n<MN) • Ci : (S, R, w, child_pointer) • S : bounding sphere • R : bounding rectangle • w : Ciの子ノード以下の部分木に含まれるpointの総数 • child_pointer : 子ノードへのポインタ
n xi = ∑ Ck.xi× Ck.w k=1 n ∑Ck.w k=1 insert • sphereの重心が最も近いノードに挿入 • SS-treeと同じreinsert algorithmを採用 • 挿入後のbounding sphereの中心の更新 • sphereの中心X=(x1,x2,...,xn) • Ckはk番目の子ノードを指す • Ck.wはk番目の子ノードに含まれるpointの数 子ノードに含まれるpointの数 を重みとした、子ノードの中心の平均
dsの候補 drの候補 r = min(ds,dr) ds = max( ||x-Ck.x|| + Ck.r ) dr = max( MAXDIST(x,Ck.R) ) 1<k<n 1<k<n insert • 挿入後のbounding sphereの半径の更新 • Ck.Rはk番目の子ノードのbounding rectangle • Ck.rはk番目の子ノードのbounding sphereの半径 • MAXDIST(p,R)はpからR中の最も離れた位置にある点までの距離 bounding sphereは全てのpointを含む最小の円であることが望ましい
ds query point dr nearest neighbor search • query pointからbounding rectangleまでの最短距離とquery pointからbounding sphereまでの最短距離の大きい方の距離を使用する • ソート、pruning strategyなどで使用 d = max(ds,dr) ds = max( 0, ||p - Ck.x|| - Ck.r ) dr = MINDIST(p, Ck.R)