运行时解释

时间:2011-02-24 20:18:26

标签: algorithm runtime complexity-theory

有人可以向我解释为什么这个算法的递归部分有运行时

T(n)= {O(1),如果n≤3;        {Tf(n / 2)+ Tc(n / 2)+ O(n),如果n> 3。

- >其中Tf(n / 2)代表T(n / 2)的底函数,Tc(n / 2)代表ceilling函数????

该算法称为Shamos,主要步骤为:

  1. 如果n≤3通过蛮力找到最近的点并停止。
  2. 找到一条垂直线V,将输入集分成两个不相交的子集PL和PR 尽可能相等。指向左侧或线上 属于PL并指向右侧或线上属于PR。从那以后,没有一点属于两者 集合是不相交的。
  3. 递归地求出PL中最近点对的距离δL和最近点的距离δR 在公关中配对。
  4. 设δ= min(δL,δR)。输入集P中的一对最近点的距离是其中的距离 在递归步骤中找到的点(即δ)或由PL中的点之间的距离组成 和公关中的一点。

    (a)PL中唯一一个候选点和PR中的一个必须在一个垂直条带中 在线V的左边的距离δ处的线和在V的右边的距离δ处的线

    (b)设YV是条带内的点的数组,按非递减y坐标排序 (即,如果i≤j则YV [i]≤YV[j])。

    (c)从YV的第一个点开始,除了最后一个之外都是踩踏槽,检查距离 这一点与接下来的7个点(或者如果没有多达7个那么剩下的那个点)。如果一个 找到距离严格小于δ的对,然后将该距离指定为δ。

  5. 返回δ。 提前谢谢你。

1 个答案:

答案 0 :(得分:2)

T(c(n/2))T(f(n/2))分别描述了在左右组上递归调用算法需要多长时间,因为已经有一半的点被放置在每个组中。

O(n)来自算法的棘手部分:在递归调用之后,我们找到了δ,即左侧组或右侧组中最近点对之间的距离。现在我们想要寻找由左组中的一个点和右组中的一个点组成的对。当然,从中线观察距离比δ更远的点几乎没有用处。但是,它仍然可能是所有点都在中间线的δ之内,所以看起来我们有必要比较n^2点对。现在重要的观察是,正是因为我们知道在每一组中,没有一对点比δ更接近,我们知道对于我们需要看到的正确组中有多少点,存在一个小的,恒定的最坏情况限制。对于左侧组中的每对。因此,如果我们只能在y坐标上对点进行排序,我们可以在线性时间内找到最接近的对。由于列表在递归调用之间传递的方式,可以在线性时间内获得这个排序列表,但细节让我感到厌烦(随意填写,任何人)。