有人可以向我解释为什么这个算法的递归部分有运行时
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,主要步骤为:
设δ= min(δL,δR)。输入集P中的一对最近点的距离是其中的距离 在递归步骤中找到的点(即δ)或由PL中的点之间的距离组成 和公关中的一点。
(a)PL中唯一一个候选点和PR中的一个必须在一个垂直条带中 在线V的左边的距离δ处的线和在V的右边的距离δ处的线
(b)设YV是条带内的点的数组,按非递减y坐标排序 (即,如果i≤j则YV [i]≤YV[j])。
(c)从YV的第一个点开始,除了最后一个之外都是踩踏槽,检查距离 这一点与接下来的7个点(或者如果没有多达7个那么剩下的那个点)。如果一个 找到距离严格小于δ的对,然后将该距离指定为δ。
返回δ。 提前谢谢你。
答案 0 :(得分:2)
T(c(n/2))
和T(f(n/2))
分别描述了在左右组上递归调用算法需要多长时间,因为已经有一半的点被放置在每个组中。
O(n)
来自算法的棘手部分:在递归调用之后,我们找到了δ,即左侧组或右侧组中最近点对之间的距离。现在我们想要寻找由左组中的一个点和右组中的一个点组成的对。当然,从中线观察距离比δ更远的点几乎没有用处。但是,它仍然可能是所有点都在中间线的δ之内,所以看起来我们有必要比较n^2
点对。现在重要的观察是,正是因为我们知道在每一组中,没有一对点比δ更接近,我们知道对于我们需要看到的正确组中有多少点,存在一个小的,恒定的最坏情况限制。对于左侧组中的每对。因此,如果我们只能在y坐标上对点进行排序,我们可以在线性时间内找到最接近的对。由于列表在递归调用之间传递的方式,可以在线性时间内获得这个排序列表,但细节让我感到厌烦(随意填写,任何人)。