kd tree怎么样从最近邻推广到k近邻

begeekmyfriend/kdtree: Absolute balanced kdtree for fast kNN search.
■网友
【kd tree怎么样从最近邻推广到k近邻】 为了避免混乱,先改一下题目的符号:如何用kd-tree求最近m个点(不然两个都是k容易混乱)。
注意到,用kd-tree查找最近邻的算法,其实质是先选择一棵子树查找对应超矩形区域中的最近点,然后和根节点对比,最后判断是否有必要去另一个子树里查找,如有必要则递归到另一棵子树去查找。
要查找最近m个点,我们可以对上述想法稍作修改,维护一个最大长度为m的优先队列(按照距离从小到大的顺序入队),查找的时候还是先选一棵更可能的子树,得到这颗子树对应的超矩形里的最近m个点,存储在优先队列里。然后看看根结点和查询点的距离是否比队尾结点和查询点的距离更小,如果是的话,就把队尾pop出来,把根节点push进优先队列。然后判断是否要进入另一棵子树查询,这里的标准很简单,看队尾结点(也就是距离最大的点)与查询点构成的超球体是否和另一棵子树对应的超矩形相交,如果相交就递归进入另一棵子树查询。
建议题主在网上搜索一下hdu4347的解题报告,对着竞赛选手们的代码理解。


    推荐阅读