最小皮带,已知距离

时间:2016-11-19 23:56:32

标签: algorithm

让我们假设我们有2条曲线,曲线P和曲线Q.曲线P由点p1,p2 ... pn组成,曲线Q由点q1,q2 ... qm组成。在访问了所有点p1,p2,... pn之后,一个人从p1开始并在pn结束。在访问了所有q1,q2 ...... qm之后,一只狗从q1开始并以qm结束。

附加限制:必须连续访问分数。举一个例子,如果该男子在p3,他可以在p3等待,直到狗移动,他可以移动到p4,但他永远不会回去到p2。这同样适用于狗。

我们将2点的距离定义为d(pi,qj)。我们假设d(pi,qj)是在O(1)处计算的。所有距离d(pi,qj)都是已知的。

我们的任务是找到人与狗之间发生的最小可能最大距离(最小皮带)d,同时它们向pn和qm移动。

举一个例子,如果d(p1,q1)= 1,d(p1,q2)= 2,d(p1,q3)= 3,d(q2,p1)= 2.5,d(p2,q2) )= 2.2和d(p2,q3)= 1.8,则最小最大距离为2.

第1步:人和狗在p1和q1。当前最大距离为1。

第二步:男子继续在p1,狗移动到q2。当前最大距离为2。

步骤3:人和狗分别同时移动到p2和q3。最大距离仍为2.

这个任务最合适的算法是什么?看起来像是一个frechet距离问题......

1 个答案:

答案 0 :(得分:2)

我建议动态编程。每个步骤最多有三个可能的先前位置。让f(i,j)成为从(p1,q1)(pi,pj)的最小最小牵引距离。

然后:

f(i,j) = max( d(pi,qj), min(f(i-1,j), f(i,j-1), f(i-1,j-1)) )

您可以考虑构建一个矩阵来保持自下而上的计算(实际上是从左上角发出的三角形),或者另一种选择可能是记忆递归函数。矩阵可以在O(m*n)时间内构建,并且实际上只需要两行空间。举个例子,我们有:

d(p1,q1) =1 , d(p1,q2)=2 , d(p1,q3)=3 ,d(q2,p1)=2.5 ,d(p2,q2)=2.2 and d(p2,q3)=1.8

f(2,3) = max(1.8, min(f(1,3),f(2,2),f(1,2)))

显然f(1,2)是最小评估中最低的,导致2作为解决方案。

dp构造的顺序看起来像这样,因为f(i-1,j-1)f(i-1,j)f(i,j-1)的父级,但f(i,j)需要这三个:

            1,1
         2,1   1,2
      3,1   2,2   1,3
   4,1   3,2   2,3   1,4
5,1   4,2   3,3   2,4   1,5

显然,有一些关于计算更有效解决方案的已发表的工作。例如:Agarwal et al. Computing the discrete Fréchet distance in subquadratic time

以下是一篇文章介绍了上述dp算法的正式处理方法:Eiter & Mannila. Computing Discrete Frechet Distance