给定两个集合和每个集合在平面中包含不相交的点,请计算的点和的点之间的最短距离,即。
我不确定我是否正确,但是这个问题与计算几何中的线性编程可以解决的问题非常相似。但是,降低为LP并不容易。我的问题还与找到两组点之间的最薄规定有关,显然可以通过二维空间中中的LP来解决。
给定两个集合和每个集合在平面中包含不相交的点,请计算的点和的点之间的最短距离,即。
我不确定我是否正确,但是这个问题与计算几何中的线性编程可以解决的问题非常相似。但是,降低为LP并不容易。我的问题还与找到两组点之间的最薄规定有关,显然可以通过二维空间中中的LP来解决。
Answers:
我有一个解决方案,似乎有些令人费解,但是应该比朴素的蛮力搜索更有效:
其余部分使用伪代码使其更加清晰:
d = infinity.
for j from 1 to n
if (b_1 - a_j) along v > d then break endif
for k from 1 to n
if (b_k - a_j) along v > d then
break
else
d = min( d , ||b_k - a_j|| )
endif
enddo
enddo
也就是说,通过预先分拣沿点,就可以过滤掉对,绝不会内彼此因为沿着总是会。
在更坏的情况下,它仍然是,但是如果和很好地分开,它应该比这快得多,但不比,这是必需的用于排序。A B O(n log n )
更新资料
这种解决方案绝不是从帽子里掏出来的。这是我在粒子模拟中用于查找具有空间装仓的所有相互作用粒子对的特例。我自己的作品在这里解释了更普遍的问题。
至于使用修改后的行扫描算法的建议,尽管直观上很简单,但当考虑不相交集时,我不认为这在中。Rabin的随机算法也是如此。
似乎没有很多文献讨论不相交集中最接近的对问题,但是我发现了这一点,这并没有声称在,并且这似乎没有对任何事情提出任何要求。
可以将以上算法视为第一篇论文(Shan,Zhang和Salzberg)中提出的平面扫描的一种变体,但是代替使用轴且不进行排序,而是使用集合之间的轴并遍历集合以降序/升序排列。
出现此类问题的想法是从一组集合中创建一个有序结构,以实现对最近邻居的有效查询。提出用于任意维的O(log n)查询结构的经典论文是:
从那时起,基于Delauney细分的思想创建了许多其他空间分区,这些分区也转换为各种子空间扫描描述。请注意,Voronoi方法也将归入一般的“分而治之”描述,因为它的平面划分使构造步骤O(n log n)成为可能。
因此,此问题的基本解决方案是:
可以看出,查看每个步骤的复杂度,总复杂度为O(n log n)。对于那些不看经典论文的现代读者来说,这在许多算法书籍中都有介绍,例如Skiena的“算法设计手册”。
我不确定我是否正确,但是这个问题与计算几何中的线性编程可以解决的问题非常相似。但是,降低为LP并不容易。我的问题还与寻找两组点之间最薄的规定有关,显然可以通过二维空间中的LP来解决。
在代数决策树模型下,此问题的下界为。在这里,我将对其证明进行粗略的概述。
我们将元素唯一性问题E简化为C。
我们知道确定元素唯一性问题的运行时下限是。因此,通过简化,下限也适用于我们的问题。