"KDTree" (データ構造)
"KDTree"
実数座標集合についてのkd木の二分空間細分割を表す.
詳細
- kd木は,次元 での n 座標の集合を細分して,最近傍探索等の探索が素早く行えるようにするので便利である.各ノードには0と1の指標が付けられた2つのデータ要素が含まれる.データ要素は,別のkd木のノードでも,0<ik<=n である点指標のリスト {i1,i2,…}でもよい.各データ要素は固有の機械整数IDを持つ.
-
CreateDataStructure["KDTree",coordinates] すべて実数で表せる coordinates から新しい"KDTree"を作成する. CreateDataStructure["KDTree",coordinates, n] 新しい"KDTree"を coordinates から作成し,各下位区分に最高で n 項目を含ませる. Typed[x,"KDTree"] x に"KDTree"型を与える. - "KDTree"型のデータ構造 ds には,以下の演算が使える.
-
ds["DataBounds"] 座標の全体的な境界を返す time: O(1) ds["DataCoordinates"] 座標を返す time: O(1) ds["Graphics"] 2D座標について空間分割を示す time: O(n) ds["ID"] ds のIDを返す time: O(1) ds["ID", b] ds の b(0または1)のデータ要素についてのIDを返す time: O(1) ds["Indexes",b] ds の b(0または1)の葉データ要素で表されるボックスに囲まれた座標について指標を返す time: O(1) ds["LeafQ", b] ds の b(0または1)のデータ要素が葉である場合はTrueを返す time: O(1) ds["Node",b] ds の b(0または1)のノードデータ要素について"KDTree"を返す time: O(1) ds["SplitDimension"] ds の空間分割の次元を返す time: O(1) ds["SplitPosition"] ds の空間分割の位置を返す time: O(1) ds["SubtreeIndexes",sd] ds が表す部分木内の座標の指標をすべて返す time: O(n) ds["SubtreeLength"] ds が表す部分木で囲まれた座標の数を求める time: O(n) ds["TreeSize"] データ要素数を返す time: O(1) ds["Visualization"] ds の可視化を返す time: O(n)
例題
すべて開くすべて閉じる例 (1)
新しい"KDTree"オブジェクトは,CreateDataStructureを使って作成できる:
1データ要素の葉に含まれる点を得て,それらをグラフィックス内で赤色でハイライトする:
このグラフィックスでは,部分木に含まれない座標部分はピンクに色付けられる:
スコープ (3)
情報 (1)
新しい"KDTree"は,CreateDataStructureを使って作成できる:
葉のサイズ (1)
CreateDataStructureの追加の引数として指定できる,最高で指定数の座標が各ボックスに含まれるまで,分割が行われる.
任意精度 (1)
座標にMachinePrecisionの数値よりも高い精度の座標を与えると,適切な精度で計算が行われる: