kd树

一种奇怪的数据结构:用来查询某点到该点集中的最小距离。

下面来自Tsinghua, IIIS的pdf:

把点按x坐标排序,设Am为中位数,左边的集合为L,右边的集合为R。

建一棵以m为根的树,根节点储存所有点的包围框(用来剪枝)。

递归地对L,R建树。下一层应该按y坐标排序,再下层按x坐标,以此类推(还有一种随机按x或y排序)。

查询:对于一个询问点Q,首先用Q与Am的距离更新答案,然后遍历两个子树。

  假如Am是x坐标的中位数。如果x(Q)<x(Am),则先遍历左子树,否则遍历右子树。

  在遍历一个子树的时候,先查询到Q到该子树包围框的最短距离,如果这个距离也无法更新答案,就剪枝。

posted @ 2017-07-31 17:22  GSHDYJZ  阅读(119)  评论(0编辑  收藏  举报