是否有一种算法,可以在常数时间内找到二维位置上距离由n-1条线段(n个顶点)构成的二维折线中最近的点?朴素的解决方案是遍历所有线段,测试每个线段与给定位置的最小距离,然后对于最近的线段,计算到给定位置的确切最近点,这样的复杂度为O(n)。不幸的是,硬件限制阻止我使用任何类型的循环或指针,这也意味着不能使用诸如四叉树之类的优化来进行层次查找以在O(log n)内查找最近的线段。
我在理论上有无限的预计算时间来准备任何数据结构以供查找使用,这个预先计算可以是任意复杂的,只需在运行时进行的查找本身需要处于O(1)。然而,硬件的第二个限制是我只有非常有限的内存,这意味着为定义域中的每个可能的位置找到线路上的最近点并将其存储在一个巨大的数组中是不可行的。换句话说,内存消耗应该是O(n^x)。
因此,问题就变成了如何在没有循环的情况下找到二维位置上的折线的最近线段或其索引。这是可能的吗?
编辑:关于给定的位置...它可以是相当任意的,但合理的做法是仅考虑由常数最大距离给出的线附近的位置。
我在理论上有无限的预计算时间来准备任何数据结构以供查找使用,这个预先计算可以是任意复杂的,只需在运行时进行的查找本身需要处于O(1)。然而,硬件的第二个限制是我只有非常有限的内存,这意味着为定义域中的每个可能的位置找到线路上的最近点并将其存储在一个巨大的数组中是不可行的。换句话说,内存消耗应该是O(n^x)。
因此,问题就变成了如何在没有循环的情况下找到二维位置上的折线的最近线段或其索引。这是可能的吗?
编辑:关于给定的位置...它可以是相当任意的,但合理的做法是仅考虑由常数最大距离给出的线附近的位置。
n
是顶点数。那么x
是什么?n
和x
的合理范围是多少?你们的世界中x
和y
的范围是多少?例如,我需要支持查询位置[0,0]
和[987654321,123456789]
吗?让我们定义所有约束条件。 - Jim Mischel