【发布时间】:2019-06-06 19:05:57
【问题描述】:
我正在寻找一种算法或数据结构来解决以下问题: 给定一组点 S。 并且以另一点的形式向您提供 Q 查询。 对于每个查询,找到集合中距给定点最远的点。
集合中最多有 10^5 个点和 10^5 个查询。所有点的坐标都在 0 到 10^5 的范围内。
我想知道是否有一种方法可以存储点集,以便我们可以在必要时回答 O(log n) 或 O(log^2 n) 中的查询。
【问题讨论】:
-
如果让我实现它,我会亲自尝试找到平面的中心([所有点的平均X,所有点的平均Y])并尝试将平面分成N具有已知最大距离(直径)的径向截面,以便您至少知道从哪里开始寻找答案以及期待什么。它可以提供一些改进,但仍在
O(n*n)渐近时间内,所以我不会将其发布为答案。可能有某种更快的算法,分治法或找到凸多边形的外点。确实很有趣的问题! :) -
欧几里得平面?
-
另外,查询是在线还是离线?
-
@גלעדברקן 三元搜索答案不起作用。最远点 Voronoi 是一个合理的答案,但我想知道如何在不编写大量代码的情况下在图中构建和执行点定位。
标签: algorithm data-structures computational-geometry euclidean-distance