コンテンツにスキップ

kd木

出典: フリー百科事典『ウィキペディア(Wikipedia)』
3次元のkd木。根セル(白)をまず2つの部分セルに分割(赤)し、それぞれをさらに2つに分割(緑)している。最後に4つのセルそれぞれを2つに分割(青)している。それ以上の分割はされていないので、最終的にできた8つのセルを葉セルと呼ぶ。黄色の球は木の頂点を表している。

kd: kd-tree, k-dimensional treekkd使使kdBSP

kd1使BSPkd1[1]BSPBSPkd1kdkd1[2]

kd[]

kd[]


kdkd

xyz

kd

kd



nkd
function kdtree (list of points pointList, int depth)
{
    if pointList is empty
        return nil;
    else
    {
        // 深さに応じて軸を選択し、軸が順次選択されるようにする
        var int axis := depth mod k;

        // 点のリストをソートし、中央値の点を選択する
        select median from pointList;

        // ノードを作成し、部分木を構築する
        var tree_node node;
        node.location := median;
        node.leftChild := kdtree(points in pointList before median, depth+1);
        node.rightChild := kdtree(points in pointList after median, depth+1);
        return node;
    }
}

after(superkey)

Python
class Node:pass

def kdtree(pointList, depth=0):
    if not pointList:
        return

    # 深さに応じて軸を選択し、軸が順次選択されるようにする
    k = len(pointList[0]) # 全ての点が同じ次元を持つと仮定
    axis = depth % k

    # 点のリストをソートし、中央値の点を選択する
    pointList.sort(key=lambda x:x[axis])
    median = len(pointList)/2 # 中央値を選択

    # ノードを作成し、部分木を構築する
    node = Node()
    node.location = pointList[median]
    node.leftChild = kdtree(pointList[0:median], depth+1)
    node.rightChild = kdtree(pointList[median+1:], depth+1)
    return node

 node.location 

kd[]


kd

kd[]


kd1kd

kd[]


kdkd (tree rotation) 

kd[]


kdkd

調3調3調調 O(logN) 



調0

使

[]


kd D N N >>2D kd調NP[3]使

[]


nkd
O(n log n) 使 O(n log 2n) 

 Cormen et al[4]使 O(n log n) 

kdO(log n) 

kdO(log n) 

kd O(n1-1/d +k) kd kd

[]


kd24 (xlow, xhigh, ylow, yhigh) xhigh 沿xlow xlow 1

関連項目[編集]

脚注[編集]

  1. ^ Preparata, Franco P., Shamos, Michael Ian. Computational Geometry: An Introduction. Springer-Verlag, 1985: ISBN 3-540-96131-3
  2. ^ de Berg, M., van Kreveld, M., Overmars, M., and Schwarzkopf, O. Computational Geometry: Algorithms and Applications. Springer-Verlag, 1997: ISBN 3-540-65620-0
  3. ^ Piotr Indyk. Nearest neighbors in high-dimensional spaces. Handbook of Discrete and Computational Geometry, chapter 39. Editors: Jacob E. Goodman and Joseph O'Rourke, CRC Press, 2nd edition, 2004.
  4. ^ Cormen, T. H., Leiserson, C. E., Rivest, R. L., Introduction to Algorithms. 第10章 中央値と順序統計量. McGraw-Hill, 1996: ISBN 0-07-013143-0

参考文献[編集]

外部リンク[編集]