刚开始学习,介绍先搁着~等理解透彻了再来写~~~
我是学习的mzry1992(UESTC_Izayoi ~)------http://www.mzry1992.com/blog/miao/kd%E6%A0%91.html
先去看mzry1992大牛博客里的讲解吧。。。
再附两篇论文:(看英文看得好爽。。。~@.@)
《An intoductory tutorial on kd-trees》 ★(里面就介绍了kd-tree和nearest neighbour algorithm(最近邻算法)、Q nearest neighbour(Q近邻))
《Range Searching Using Kd-Tree.》
kd-tree入门题:
HDOJ 2966 In case of failure (最近邻,模板~)
查找平面点最近点的距离(此题中是距离的平方)
/*
HDOJ 2966
KD-Tree模板
*/
#include
#include
#include
#include
#include
#include
#include
#include
HDOJ 4347 The Closest M Points (Q近邻)
与上题不同的是,一是k维(这个好处理~),二是求最近的m个点而不单是最近点了。这个也好处理~递归查找时处理的时候采取如下策略:如果当前找到的点小于k个,那么两个区间都要处理。。否则根据当前找到的第k个点决定是否去另外一个区间,如果目标点到分界线的距离大于等于已经找到的第k远的点,那么就不用查找另一个分界了。。。更新答案可以用一个大小为k的堆去维护(一个最大堆,一旦超过k个点就把最大的扔掉)。。。
#include
#include
#include
#include
#include
#include
#include
#include
#include