我知道从Voronoi镶嵌中计算k近邻的集合相对容易。反向问题怎么样? 我已经有了一组k近邻(在3D中),我想计算Voronoi单元的体积和中心。直觉上,应该有一个O(n)算法来做,对吗?
有人在某处看到过这样的事情吗?
提前致谢
PS:我假设没有Voronoi单元具有多于k个边缘(这些关于点位置的先验知识可能使得在O(n)中计算图表成为可能,而与维度无关)。
PPS:我进一步假设对于给定的点,Voronoi单元的顶点属于kNN集(参见下面的注释)。
答案 0 :(得分:1)
您可以按如下方式构建VD。点P和它的k个最近邻居Q之一定义了与P和Q等距的半平面H(P,Q),以及具有边界H并且包含P的半空间H +(P,Q)。然后Voronoi P的单元是P的k个最近邻居中所有Q的H +(P,Q)的交点。 构建此交集与顶点枚举问题密切相关:http://en.wikipedia.org/wiki/Vertex_enumeration_problem
您需要有足够的邻居才能确保构建正确的VD并且我不确定您的假设是否可以保证。唯一可靠的是,P点的真实Voronoi单元格包含在上述算法构造的单元格中。
答案 1 :(得分:0)
虽然应该有一个直观的算法,但我认为实际上没有。虽然我没有正式的证据(并且无法快速提高),但请考虑以下论点:
考虑点P的k个最近相邻点K全部到P的一侧的情况,即存在穿过P的平面,使得K中的所有点都在平面的一侧。然后,不能以任何方式从K中的点计算P的Voronoi单元的边界。该参数适用于任何k,并且我无法看到算法如何检测任何点的存在P的另一边是最近邻分析。因此,我认为Voronoi图包含的信息比k-最近邻域统计量更多,因此从Voronoi到kNN的转换是不可逆转的减少。
另一方面,Hugo Ledoux has developed用于Voronoization的n log n平均案例算法,您可以考虑使用该解决方案。
编辑:我的论点可能仍然太复杂了。关于kNN的简单思考:考虑一组k点,它们是彼此的kNN。这些点的kNN子图与所有其他点断开连接,使得构造Voronoi图不可能。或者,换句话说,Voronoi图包含任何 k的k-最近邻,因此不能从任何有限k重建。