我正在尝试提出一种算法来执行以下操作:
如果给定一组点,则为查询点找到不包含该组任何点的最大圆(以查询点为中心)。
到目前为止,我一直在考虑使用 Voronoi 图来查找包含最接近集合中某个站点点的点的区域(单元格),然后使用 Voronoi 中的边列表来构造梯形分解。从分解中我将能够找到查询点位于哪个单元格,然后圆的半径将是查询点到该单元格的点(站点)的距离。我认为创建这样的东西所需的存储是线性的,因为 Voronoi 需要 O(n) 存储,并且从 Voronoi 创建梯形分解也可以使用 O(n) 存储来完成。
*编辑:查询时间必须是 O(logn),这意味着我不能一次遍历集合中的所有点。
这听起来对吗,还是我在这里遗漏了什么?
另外,如果有人有一些关于这个算法的参考资料,请告诉我。谢谢 :)