【发布时间】:2011-02-24 20:18:26
【问题描述】:
谁能解释一下为什么这个算法的递归部分有运行时
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)表示顶函数????
该算法称为Shamos,主要步骤是:
- 如果 n ≤ 3 通过蛮力找到最近的点并停止。
- 找到一条垂直线 V,将输入集分成两个不相交的子集 PL 和 PR,大小为 尽可能平等。指向左侧或线上 属于 PL 并且指向右边或线上属于 PR。没有一点属于两者,因为 集合是不相交的。
- 递归地找到 PL 中最近的一对点的距离 δL 和最近的一对点的距离 δR 在 PR 中配对。
-
令 δ = min(δL, δR)。输入集 P 中一对最近点的距离是 在递归步骤中找到的点(即 δ)或由 PL 中的点之间的距离组成 和公关中的一点。
(a) 一个来自 PL 和一个来自 PR 的唯一候选点必须在一个垂直条中,包括 直线 V 左侧距离 δ 的直线和 V 右侧距离 δ 的直线
(b) 设 YV 是条带内按非递减 y 坐标排序的点的数组 (即,如果 i ≤ j 则 YV [i] ≤ YV [j])。
(c) 从 YV 中的第一个点开始,除了最后一个点之外的所有点,检查距离 此点与接下来的 7 个点(或任何剩余的点,如果没有多达 7 个点)。如果一个 找到距离严格小于 δ 的对,然后将此距离分配给 δ。
返回 δ。 提前谢谢你。
【问题讨论】:
-
在进入算法的运行时之前,您了解它应该做什么吗?你知道它是如何工作的吗?
-
@Justin Good(起点)。 :-)
-
它使用概念扫描线和递归来找到欧几里得空间中的最近点?
标签: algorithm runtime complexity-theory