【发布时间】:2017-09-07 17:32:24
【问题描述】:
给定一个由任意实数组成的有序数组 A[1...n] 对于每个 i ∈ [1 ... n-1]; A[i+1] - A[i] 是 A 的第 i 个间隙。
a) 计算 A 的 n-1 个间隙的平均间隙。 --Try 1: 在 O(n) 时间内,迭代 A 并将每个间隙添加到“GapSum”中。 GapSum/n-1 = 平均差距
b) 根据平均定律,一定有一些 i ∈ [1 ... n-1] 使得 A 的第 i 个间隙不超过 A 的平均间隙。任何这样的第 i 个间隙称为短间隙。找到 A 的一个短间隙。 --Try 1:明显的 O(n) -- 检查每个间隙,返回最小的。 是否有一种渐近更快的分治算法来找到 A 的短间隙?
我有点不知道如何才能更快地做到这一点?是否存在我可能忽略的平均值属性。任何方向都会有所帮助。
--编辑-- Nico 评论说,可以在恒定时间内计算平均差距。 这是否算作常数时间: 我必须能够在恒定时间内计算平均间隙的唯一想法是在计算之前准备一个辅助数组,它将间隙的总和存储到 B[i] 中的 i 中。然后计算平均差距将是 B[n-1]/n-1
【问题讨论】:
-
你试过什么?在 SO 上不鼓励在没有任何研究工作的情况下放弃你的作业。顺便说一句,可以在恒定时间内计算平均间隙。
-
到目前为止,我能想出的唯一 2 个解决方案是我描述的 2 O(n) 时间方法。我一直在尝试想出一种更快的方法,但失败了。
-
我需要一个提示/方向才能进入。如果我们需要所有的间隙值来计算平均值,如何在恒定时间内计算平均值?
-
我必须能够在恒定时间内计算平均间隙的唯一想法是在计算之前准备一个辅助数组,它将间隙总和存储到 B[i] 中的 i。然后计算平均差距将是 B[n-1]/n-1
标签: algorithm asymptotic-complexity divide-and-conquer