短期差距与平均差距
Posted
技术标签:
【中文标题】短期差距与平均差距【英文标题】:Short Gap vs Average Gap 【发布时间】: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 【参考方案1】:鉴于A
已排序,具有恒定时间查找并且您知道n
,您可以通过取第一个和最后一个元素之间的差并除以@ 来计算恒定时间内的平均间隙大小987654324@.
一个。遍历A
并返回小于或等于平均值的first 间隙。无需找到最小的间隙。不过,您的运行时间仍将在 O(n)
中。
b.你能做得更好吗?考虑做类似于binary search 的事情:计算数组两半的平均间隙大小。平均值较低的必须包含至少一个短间隙,因此您只能在该一半内进行搜索。递归地在那一半做同样的事情,你最终可能会得到一个O(log n)
算法!
【讨论】:
以上是关于短期差距与平均差距的主要内容,如果未能解决你的问题,请参考以下文章