【发布时间】:2016-04-20 03:15:11
【问题描述】:
是否有一种算法可以针对给定的 2d 位置找到由 n - 1 个线段(n 个线顶点)组成的 2d 多段线上的最近点 在恒定时间内?天真的解决方案是遍历所有段,测试每个段到给定位置的最小距离,然后对于最近的段,计算到给定位置的确切最近点,其复杂度为 O(n)。不幸的是,硬件限制阻止我使用任何类型的循环或指针,这意味着也没有像四叉树这样的优化来分层查找 O(log n) 中最近的段。
理论上,我有无限的时间来预先计算任何可用于查找的数据结构,并且这种预先计算可以任意复杂,只有运行时的查找本身需要在 O(1) 中。然而,硬件的第二个限制是我只有非常有限的内存,这意味着为域的每个可能的数值位置找到线上的最近点并将其存储在一个巨大的数组中是不可行的。也就是说,内存消耗应该在O(n^x)之内。
因此,问题归结为如何在没有任何循环的情况下在 2d 位置找到折线的最近段或其索引。这可能吗?
编辑:关于给定的位置……它可以是相当随意的,但只考虑一条线的最近邻域中的位置是合理的,给定一个恒定的最大距离。
【问题讨论】:
-
您的“线”通常被称为折线,这样可以减少一些混淆。
-
你说内存消耗应该在O(n^x)。我知道
n是顶点数。x是什么?n和x的合理范围是多少?你世界的x和y的范围是多少?例如,我是否需要支持对职位[0,0]和[987654321,123456789]的查询?让我们得到所有定义的约束。
标签: algorithm data-structures 2d line computational-geometry