【问题标题】:Runtime explanation运行时解释
【发布时间】: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,主要步骤是:

  1. 如果 n ≤ 3 通过蛮力找到最近的点并停止。
  2. 找到一条垂直线 V,将输入集分成两个不相交的子集 PL 和 PR,大小为 尽可能平等。指向左侧或线上 属于 PL 并且指向右边或线上属于 PR。没有一点属于两者,因为 集合是不相交的。
  3. 递归地找到 PL 中最近的一对点的距离 δL 和最近的一对点的距离 δR 在 PR 中配对。
  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. 返回 δ。 提前谢谢你。

【问题讨论】:

  • 在进入算法的运行时之前,您了解它应该做什么吗?你知道它是如何工作的吗?
  • @Justin Good(起点)。 :-)
  • 它使用概念扫描线和递归来找到欧几里得空间中的最近点?

标签: algorithm runtime complexity-theory


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多