マルチメディアデータベースの インデックス

Slides:



Advertisements
Similar presentations
A Simple Constant Time Enumeration Algorithm for Free Trees 中野 眞一 宇野 毅明 群馬大学 情報学研究所 2003 年 9 月 19 日 アルゴリズム研究会.
Advertisements

【事例演習5】  字句解析     解 説  “ハッシュを用いた字句解析の方法”.
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
2 分探索木 Binary Search Tree 実行可能な操作 計算量 木の高さは,最悪 O(n) n = |A| : 要素の個数
アルゴリズムとデータ構造 第8回 ソート(3).
2分探索.
第11回 整列 ~ シェルソート,クイックソート ~
アルゴリズムとデータ構造 2013年6月18日
On the Enumeration of Colored Trees
Problem G : Entangled Tree
データ構造とプログラミング技法 (第8回) ーデータの探索ー.
データ構造とアルゴリズム 第7回 木 ~ データ構造(3)~.
オペレーティングシステムJ/K 2004年11月4日
情報工学概論 (アルゴリズムとデータ構造)
整数計画法を用いた ペグソリティアの解法 ver. 2.1
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
システム開発実験No.7        解 説       “論理式の簡略化方法”.
非線形方程式の近似解 (2分法,はさみうち法,Newton-Raphson法)
高山建志 五十嵐健夫 テクスチャ合成の新たな応用と展開 k 情報処理 vol.53 No.6 June 2012 pp
階層的境界ボリュームを用いた 陰関数曲面の高速なレイトレーシング法
データ構造と アルゴリズム 第十一回 理工学部 情報システム工学科 新田直也.
第11回 整列 ~ シェルソート,クイックソート ~
二分探索木によるサーチ.
7-3.高度な木 (平衡木) AVL木 平衡2分木。回転操作に基づくバランス回復機構により平衡を保つ。 B木
決定木とランダムフォレスト 和田 俊和.
グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29.
アルゴリズムとデータ構造1 2006年6月16日
第14章 モデルの結合 修士2年 山川佳洋.
前回の練習問題.
アルゴリズムとデータ構造 第3章 ヒープ 6月10日分
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムとデータ構造1 2005年7月1日
Cプログラミング演習 第10回 二分探索木.
アルゴリズムとプログラミング (Algorithms and Programming)
変換されても変換されない頑固ベクトル どうしたら頑固になれるか 頑固なベクトルは何に使える?
先進的計算基盤システムシンポジウム SACSIS2007併設企画 マルチコアプログラミングコンテスト 「Cellスピードチャレンジ2007」
プログラミング 4 整列アルゴリズム.
階層的境界ボリュームを用いた 陰関数曲面の高速なレイトレーシング法
画像データベース.
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
プログラミング 4 木構造とヒープ.
生物情報ソフトウェア特論 (2)たたみ込みとハッシュに 基づくマッチング
ナップサック問題 クマさん人形をめぐる熱いドラマの結末.
15.cons と種々のデータ構造.
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
情報数理Ⅱ 第11章 データ構造 平成29年1月18日.
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
地理情報システム論(総)/ 国民経済計算論(商)
第16章 動的計画法 アルゴリズムイントロダクション.
第9回 優先度つき待ち行列,ヒープ,二分探索木
ハフマン符号長の効率的な求め方.
アルゴリズムとデータ構造 2012年7月2日
アルゴリズムとデータ構造 2011年6月28日
アルゴリズムとデータ構造 2011年6月16日
オペレーティングシステムJ/K (管理のためのデータ構造)
情報工学概論 (アルゴリズムとデータ構造)
Advanced Data Structure 第3回
第11回放送授業.
アルゴリズムとデータ構造 2013年7月2日
アルゴリズムとデータ構造 第2章 リスト構造 5月24日分
平面走査法を使った 一般線分の 交点列挙アルゴリズム
ヒープソート.
2008年6月5日 非線形方程式の近似解 2分法,はさみうち法,Newton-Raphson法)
アルゴリズムとデータ構造 2013年6月20日
Cプログラミング演習 ニュートン法による方程式の求解.
参考:大きい要素の処理.
情報生命科学特別講義III (3)たたみ込みとハッシュに 基づくマッチング
グラフの列挙 中野 眞一    (群馬大学) 2019/9/14 列挙学校.
7.木構造 7-1.データ構造としての木 7-2.2分探索木 7-3.高度な木.
プログラミング論 バイナリーサーチ 1.
Presentation transcript:

マルチメディアデータベースの インデックス

空間データ 多次元の属性を持ったデータ (x, y), (x, y, z) など しばしば,位相,幾何の情報も扱わねばならない

空間データの種類 点/ベクトルデータ 位置情報のみ(「領域」がない) 図形データ 位置,領域がある

特徴量 静止画像 → 1つの「多次元ベクトル」 動画像 → 複数個の「多次元ベクトル」の並び 特徴量は「ベクトル」のデータ

図形データの種類 図形データは,2次元,3次元 点 線 面

近似表現 ー 図形データの場合 - 図形データは,近似表現(矩形など)し, インデックスで管理 点 線 面

空間データ用のインデックスの種類 ハッシュ B-tree の利用 ある規則で,データを分割 Grid Files : メッシュ構造によるインデックス Multidimensional Trie : Trie の拡張 Multikey hashing : ハッシュの拡張 B-tree の利用 データを,「1次元空間」上にマッピング 各種の空間充填曲線(Z曲線など)を利用

空間データ用のインデックスの種類 木構造 データを階層的にクラスタ化 古典的な多次元データ構造 2n tree, k-d Tree, MX-Quadtree R-Tree ファミリ R-tree, R*-tree 最近接点探索用 SS-tree, SR-tree, VAM Split R-tree 多次元データ構造(ユークリッド空間) X-tree, LSD –tree, Hybrid tree VA-File ファミリ(ベクトルの近似表現) IQ-tree, A-tree 本来のVA-File は木構造でない metric tree ファミリ metric tree, M-tree, MVP-tree

空間問い合わせの研究課題 - 最近接点探索 - 空間問い合わせの研究課題 - 最近接点探索 - 最も近い k 個を求めよ (k と質問点はユーザが指定)

空間問い合わせの研究課題 - 次元ののろい - 空間問い合わせの研究課題 - 次元ののろい - 高次元のベクトルデータの「奇妙」な振る舞い 点がランダム分布しているとすると, k番目に近い点と k+1番目に近い点の比は 1 + 1/(kn) (nは次元) n が大きいと,この比は1に近づく 半径 0.99 と 半径 1の超級 の体積の比:  高次元では,体積の比が  大きくなる 0.99 1 2 3

空間重点曲線による方法

空間充填曲線の例 1 4 5 2 3 6 7 8 9 12 13 10 11 14 15 各領域の番号

空間充填曲線と B-tree B-tree ページ (ページ  数は4)

B tree 木構造のインデックス 木の深さがバランスするよう、挿入、削除時に処理が行われる 各ノードは多数の分岐を持ち、結果として深さは少なくなる 各ノードは、K+1個から2K+1個までの分岐を持つ (Kはページサイズから決まる)

G-Tree

G-Tree データ構造 1/4 1.0 G-tree は,多次元空間中の点の集まりのためのデータ構造 0.5 0.5 1.0

G-Tree データ構造 2/4 1つの区画内の点の数がある制限(ここでは2)を越えないように,空間分割が行われる 1.0 0.5 この例では:  点データ: 3個  分割数: 2 0.5 1.0

G-Tree データ構造 3/4 空間分割は,区画を半分に分割することを繰り返す 1.0 0.5 この例では: 点データ: 5個  点データ: 5個  分割数: 4 0.5 1.0

G-Tree データ構造 4/4 点の数が増えたからといって,必ずしも区画が分割されるわけではない. 0.5 1.0 この例では: 0.5 1.0 点の数が増えたからといって,必ずしも区画が分割されるわけではない. この例では:  点データ: 7個  分割数: 4

G-Tree の考え方 データ格納の単位は「区画」 ツリー構造 ある「区画」に含まれる点データの数は,ある「最大値」を超えない. 「最大値」は,1区画分のデータが1ページに収まるように決める ツリー構造 「区画を,半分の面積に分割」することを繰り返す 分割軸は x → y → x → y … のように交互に交代する

G-tree 今までの説明では,次のことを仮定していた しかし,本来の G-Tree は,次元数,データの範囲に制限は無い 次元数: 2次元 次元数:    2次元 データの範囲: 0 から 1 しかし,本来の G-Tree は,次元数,データの範囲に制限は無い 次元数:    2次元以上 データの範囲: 広い

区画のビット列表現例 1/3 1.0 “” (空) 0.5 1.0 “0” “1”

区画のビット列表現例 2/3 1.0 010 011 “” (空) 00 0.5 1.0 “0” “1”

区画のビット列表現例 3/3 0.5 1.0 010 011 “” (空) 00 “0” “1”

区画のビット列表現 区画を 0,1 のビット列で表現 全空間は「空文字列」とする 区画が分割されると,ビット列の長さが1つ増える 区画を 0,1 のビット列で表現 全空間は「空文字列」とする 区画が分割されると,ビット列の長さが1つ増える 最大ビット列長(前ページの例では3)は,区画の分割回数で決まる

ビット列表現の性質 0.5 1.0 010 011 00 “0” “1” ある区画Rが別の区画Xを含むなら, 0.5 1.0 010 011 00 “0” “1” ある区画Rが別の区画Xを含むなら, Xのビット列表現は S”0” 以上で,S”1”以下

ビット列表現による区画の順序付け 0.5 1.0 010 011 00 “1” 上の例では,順序は, 00 → 010 → 011 → 1

区画を順序付けることの意味 区画を,あらかじめ「ソート」でき,点データの各種の操作を高速化できる 区画の「ビット列」は,点データを検索するための「検索キー」と見立てることができる

G-tree の格納構造 1/2 ・1つの区画で1ページ ・各ページは順序付けられている 0.5 1.0 ページ2 ページ3 ページ1 0.5 1.0 ページ2 ページ3 ページ1 ページ4 ・1つの区画で1ページ ・各ページは順序付けられている

G-tree の格納構造 2/2 1 内部ノード 00 010 011 1 葉ノード 点データ が入って いるページ

G-tree のノード 葉ノード 内部ノード データページへのポインタを持つ 「次」の葉ノードへのポインタを持つ 下位レベルのノードへのポインタを持つ

G-Treeのオペレーション Searching for a Point Searching for All Points In a Region (Range Query) Inserting a Point Deleting a Point

Searching for a Point 探したい点の座標値(x,y)は分かっている もし,インデックスが無ければ,データの全件を調べねばならない

Searching for a Pointの手順 1/2 最大ビット列長は,前もってどこかに覚えておく   例えば: 3 与えられた座標値と,最大ビット列長とから,ビット列を求める.  例えば: (0.8, 0.9) のビット列は,“111”  1.0 010 011 110 111 0.5 000 001 100 101 0.5 1.0

Searching for a Pointの手順 2/2 2で求めたビット列を使って,G-tree をたどり,探したい点を含むページ番号を求めたい    (例) “111” を使って,下の G-tree をたどる        G-tree に“111” は無いが,“1” はある 1 00 010 011 1 点データ が入って いるページ

Searching for a Point について G-tree を,ルートノードからたどり,与えられた「点」が入っているであろうページを得ることができた 1 00 010 011 1 点データ が入って いるページ

Range Query 矩形[x1,y1,x2,y2] による検索 矩形内のすべての点を求める 1.0 (x2,y2) 0.5 0.5 1.0

Range Query の手順 1/2 (x1,y1)から,3ビット表現“001”を得る (x2,y2)から,3ビット表現“011”を得る → 解は 001,010,011の範囲内だと分かる 1.0 (x2,y2) 0.5 (x1,y1) 0.5 1.0

Region Query の手順 2/2 G-tree の葉ノードをたどり,それぞれ矩形[x1,y1,x2,y2] の範囲と重なるかを調べる    (例) 00, 010, 011 を辿る.00 と 011 は重なる. 1 00 010 011 1 点データ が入って いるページ

Inserting a Point 挿入したい点(x,y) について 1.(x,y) を使って, Searching for a Point を実行.   ページ番号を得る 2.1の結果,すでに,点(x,y)が存在していることが分かれば,何もしない 3.点を挿入した結果,ある区画内の点の数が「制限」を超えそうなら,区画を分割する   (1) データページを1つ増やす   (2) 必要なら,葉ノード,内部ノードを調整する

Deleting a Point 削除したい点(x,y) について 1.(x,y) を使って, Searching for a Point を実行.   ページ番号を得る 2.すでに,点(x,y)が存在しているはず(無ければエラー) 3.点を削除した結果,ある区画内の点の数が0になるなら,区画を結合する.   (1) データページを1つ減らす   (2) 必要なら,葉ノード,内部ノードを調整する

G-tree と B-tree の違い B-tree は,数値,文字など「順序付け」可能なデータのためのデータ構造 点データは,(基本的には)順序付けできない G-tree では,「区画」をビット列表現し,順序を付ける ある区画Rが別の区画Xを含むなら,Xのビット列表現は S”0” 以上で,S”1”以下 点データに特徴的な検索として, Searching for All Points In a Region がある

k-d Tree

k-d Tree 各座標値についてデータをソートし,その中央値で,データを2つに分割 分割する軸の選択法 巡回: x → y → z → x → y → z → その他 2-d Tree は2次元の点の集まりを、   3-d Tree は3次元の点の集まりを扱う

k-d Tree

k-d Tree

k-d Tree

2-d Tree x 軸で分割すると y 軸で分割すると N.LLINK が指すノードMは、 M.XVAL < N.XVAL x 軸で分割すると N.LLINK が指すノードMは、 M.XVAL < N.XVAL N.RLINK が指すノードPは、 P.XVAL ≧ N.XVAL y 軸で分割すると M.YVAL < N.YVAL P.YVAL ≧ N.YVAL

k-d tree の特徴 データの集まりから,k-d tree の一括生成 データを逐次,追加,削除する場合

k-D Tree のデータ構造 INFO: 利用者が好きなデータを格納 XVAL, YVAL: 「点」の座標値 LLINK, RLINK: 2つの子ノードへのポインタ 1ノードが1つの点に対応する nodetype = record INFO: infotype; XVAL: real; YVAL: real; LLINL: pointer to nodetype; RLINK: pointer to nodetype; end INFO XVAL YVAL LLINK RLINK

2-d Tree を使った挿入 挿入したいノードをN, 2-d Tree の根ノードをT とする N と T のXVAL, YVAL が同じなら、Tを上書きして終了 さもなくば,次の手順で子ノードを探す 例えば x軸で分割しているとき N.XVAL < T.XVAL なら左へ分岐 N.XVAL≧T.XVAL なら右へ分岐 以上の手順を繰り返す

2-d Tree を使った削除 削除したい点を (x,y) とする 2-d Tree から点 (x,y) を探す(Nとする) Nの親ノードの、RLINK, LLINK のうち N を指している方を NIL に設定 Nが根ノードでなければ: 1.「候補」Rとして Nのサブツリーの中から適当なノードを選ぶ 2.Rの INFO, XVAL, YVAL の値で、Nを書き換える 3.Rについて、「ノードRの削除」を行う(再帰処理になる)

候補Rの選び方 ノードNの削除では、「候補」Rは、次の条件を満たさねばならない T の左側のサブツリー内の任意のノードMについて: M.XVAL < R.XVAL (x軸で分割のとき) M.YVAL < R.YVAL (y軸で分割のとき) T の右側のサブツリー内の任意のノードMについて: M.XVAL ≧ R.XVAL (x軸で分割のとき) M.YVAL ≧ R.YVAL (y軸で分割のとき)

k-D Tree を使った範囲検索 範囲検索とは 範囲を指定して、その範囲内の点の集まりを求めること k-D Tree の各ノードN Nと、そのサブツリー内の点の範囲が決まっている( RN とする) 指定された範囲と、あるノードNの範囲 RNが重なっていなければ、Nとそのサブツリー内には、範囲検索の解はない

範囲検索について 「範囲」の例 (1)矩形 右上の点の座標値と、左下の点の座標値 (2)円 中心の座標値を、半径

k-D Tree について k-D Treeでは、木の形は、データの挿入順で決まる k-D Treeでは、領域を2つあるいは4つに分割する 分割された領域の大きさは、おのずと不均等になる (XVAL, YVAL値で決まる)

R-Tree / R*-tree 「領域」情報を扱うための手法

R-tree, R*-tree の構造 9個のベクトルデータ 3 矩形1,2, 3のデータ 1 9個の 点データ 2

SS-tree の構造 9個のベクトルデータ 3 1,2, 3のデータ 1 9個の 点データ 2

MX QuadTree

MX QuadTree MX QuadTree は、点の座標値にかかわらず、ノードを均等に分割 木の形は、データの挿入順に依存しない データの挿入、削除の操作が簡単になる

MX QuadTree 根ノード [(XLB,YLB), (XUB ,YUB)]の子ノード 領域 [(0,0), (2 ,2 )] [(XLB,YLB), (XUB ,YUB)]の子ノード NW: [(XLB,YLB+w/2), (XLB+w/2, YLB+w)] SW: [(XLB,YLB), (XLB, YLB+w/2)] NE: [(XLB+w/2,YLB+w/2), (XLB+w/2, YLB+w)] SE: [(XLB+w/2,YLB), (XLB, YLB+w/2)] k k

MX QuadTree の性質 データは、すべて、根ノードにある 根でないノードのサブツリーは、必ず、データの入った根ノードを含む 挿入、削除は、根ノードについて行う

MX QuadTree を使った削除 削除したい点を (x,y) とする MX QuadTree から点 (x,y) を探す(Nとする). Nの親ノードをMとする. MのエントリのうちNを指している方をNILとする M のNW,SW,NE,WEが全てNILならば、Mを削除する(削除は再帰的に繰り返す)

空間インデックス研究課題 検索効率 領域検索 最近接点探索 データの追加,削除,更新の効率 空間使用量 大規模なデータセット 高次元のデータ