二维空间点索引数据结构

一、

四叉树(quad tree)是在数据库中放置和定位文件(称作记录或键)的方法。这一算法通过不停的把要查找的记录分成4部分来进行匹配查找直到仅剩下一条记录为止。
   
  在树中,记录被存储在叶子的位置上。这一名字的由来是因为记录被存储在端点上,它们上面再没有节点了。分支被称作节点。数的顺序是每节点的分支(也称孩子)数。在四叉树中,每个节点通常有4个孩子,因此顺序是4。四叉树的叶子数也是4。为达到想要的记录所进行的查找操作次数成为树的深度。下图给出了深度为3的四叉树。

                                   二维空间点索引数据结构_第1张图片
    
  在实际的树中,可能有成千、成万或数十亿条记录。不是所有的叶子必须有一条记录,但只少要有一半包含记录。不包含记录的叶子成为空。在上面例子中,第8、第12、第16个叶子是空的,用空白圆来指示。
   
  四叉树(quad tree)是在二维图片中定位像素的唯一适合的算法。因为二维空间(图经常被描述的方式)中,平面像素可以重复的被分为四部分,树的深度由图片、计算机内存和图形的复杂度决定。

二维空间点索引数据结构_第2张图片




二、

KD-Tree 在二维中 2D-Tree

 KD-Tree是一种由二叉搜索树推广而来的用于多维检索的树的结构形式(K即为空间的维数)。它与二叉搜索树不同的是它的每个结点表示k维空间的一个点,并且每一层都根据该层的分辨器(discriminator)对相应对象做出分枝决策。顶层结点按由分辨器决定的一个维度进行划分,第二层则按照该层的分辨器决定的一个维进行划分···,以此类推在余下各维之间不断地划分。直至一个结点中的点数少于给定的最大点数时,结束划分。

  KD-Tree的分辨器根据不同的用途会有不同的分辨器,最普通的分辨器为:n mod k(树的根节点所在层为第0层,根结点孩子所在层为第1层,以此类推)
  即:若它的左子树非空,则其左子树上所有结点的第i维值均小于其根结点的第i维值;
  若它的右子树非空,则其右子树上所有结点的第i维值均大于其根结点的第i维值;并且它的左右子树也分别为KD-Tree。

二维空间点索引数据结构_第3张图片


二维空间点索引数据结构_第4张图片



你可能感兴趣的:(数据结构,数据库,算法,tree,存储,图形)