Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 查找O(1)时间内的最远点_Algorithm_Computational Geometry - Fatal编程技术网

Algorithm 查找O(1)时间内的最远点

Algorithm 查找O(1)时间内的最远点,algorithm,computational-geometry,Algorithm,Computational Geometry,考虑平面上n个点的集合,使得最远的一对点的距离最多为1。我想在O(1)时间内找到给定查询点q(不是S)的最远点。如何预处理S中的点以达到所需的查询时限 这可能吗?假设这些点之间没有关系,没有一个操作可以给出最远的点。所以,唯一的方法就是提前计算,所以你需要在每个点和离它最远的点之间建立一个简单的映射。这是平面直线图中的点定位问题,已知需要O(log(N))查询时间 无论如何,它可以通过网格化近似地解决 在最远的点Voronoi图上覆盖一个正方形网格,并为每个单元格记录它覆盖的区域。确保覆盖区域的

考虑平面上n个点的集合,使得最远的一对点的距离最多为1。我想在O(1)时间内找到给定查询点q(不是S)的最远点。如何预处理S中的点以达到所需的查询时限


这可能吗?

假设这些点之间没有关系,没有一个操作可以给出最远的点。所以,唯一的方法就是提前计算,所以你需要在每个点和离它最远的点之间建立一个简单的映射。这是平面直线图中的点定位问题,已知需要O(log(N))查询时间

无论如何,它可以通过网格化近似地解决

在最远的点Voronoi图上覆盖一个正方形网格,并为每个单元格记录它覆盖的区域。确保覆盖区域的数量是有界的。这可以通过采用小于图中两个最近顶点距离的栅格间距来近似实现


对于查询像素,查找包含的单元格是在固定时间内完成的。然后,在一个有界数字中找到区域也需要恒定的时间。

您的意思是这些点存储在“集合”类型的数据结构中吗?因为我很确定这将是“不”。我只是想知道,
q
s
中吗?如果不是,我下面的答案就不合适了。我怎么看,
q
取自
E^2
。也就是说,如果查询点集是无限制的,那么O(1)查找是不可能的。当您获得动态输入时,您要求预处理结果,我认为这是不可能的。我建议您查看
凸面外壳
。这可能会解决您的问题。“因此,您需要在每个点和离它最远的点之间进行简单的映射。”-查询点集是不受限制的。你建议如何存储映射?刚刚被同样的问题绊倒了,
q
是否在
S
(使其受限)中+1,但我猜O(logn)下界是针对一般直线图的——难道所有最远点Voronoi图都不可能是特殊类型的直线图吗,哪种更快的算法可能存在?(我认为一个明确的“否”答案需要证明每个直线图都是某个点集的最远点Voronoi图……我对这些图没有直觉,但我的第一个想法是这似乎不太可能。)@j_random_hacker:最远点Voronoi图只有H区域(凸包上的点数),导致查询复杂度O(log(H)),这可能比O(log(N))好。另一方面,我猜凸包的2H自由度被图所保留,我不相信亚对数复杂性是可能的。