【问题标题】:Average cost / algorithm平均成本/算法
【发布时间】:2021-02-11 22:01:36
【问题描述】:

我知道下面这个真假陈述是假的。因为 Θ(log n) 是摊销成本。但是我们能否以某种方式从这个问题中确定平均成本,如何?如果不是,我们需要什么来确定平均成本?

声明

对或错: 一个数据结构支持一个操作 f 使得一系列 n 操作 f 需要 Θ(n log n) 最坏情况下的时间。因此,f 操作的平均成本为 Θ(log n)。

【问题讨论】:

  • 我认为这是真的,您只需将序列成本除以该操作的调用次数即可。
  • 但这不是摊销成本吗?如果每个操作都花费 log n,那么我们有 n*log n / n = Θ(log n)。也许我也想念理解的摊销成本。
  • 无法回答这个问题,因为措辞含糊不清。具体来说,“平均情况”中的“平均”是多少?如果它是形成最坏情况的操作的平均值,那么该陈述是正确的。但这通常不是“平均情况”的含义,其中“平均”是指输入的某种分布(通常所有输入都假设每个输入的可能性相同),并且平均情况可能比 theta(log n) 更好。
  • @Busquets_90 我会这样读,你有一个带有操作f 的数据结构,你调用了f n 次,这些调用的总成本是O(n*log(n))。根据定义,摊销是平均值。如果您阅读 Cormen 的书,那么它就是这样定义的(除非您使用不同的参考)。
  • 感谢您对 Cormen 的书的建议。关于摊销分析是这样说的:“摊销分析与平均情况分析的不同之处在于不涉及概率;##摊销分析保证了在最坏情况下每个操作的平均性能##“这里不是这样吗?

标签: algorithm time-complexity average


【解决方案1】:

这个问题的预期答案可能是“正确的”。如果 n 次操作的总成本为 Θ(n log n),则可以除以 n 得到平均成本 Θ(log n)。

不过,这个问题有点令人困惑,因为它说的是“n 个操作 f 的序列”。数据结构可能支持其他操作,这些操作会改变操作 f 将花费多少时间,因此,如果允许其他操作,对一系列操作 f 进行计时并不一定会告诉您 f 的平均成本......但是发问者可能只是没有考虑到这一点。

操作f的摊销成本不同于平均水平,因为部分摊销成本可能由其他操作支付。因此,操作 f 所花费的时间可以提供其摊销成本的下限,但它不会告诉您任何上限。

【讨论】:

  • 所以摊销成本的上限可能是 n^3,例如,如果我们有一个在最坏情况下具有 O(n^3) 的操作?
  • 考虑一个通过排序实现的优先级队列: addItem() 以恒定时间追加到列表中,如果列表未排序,则 removeMinimum() 对列表进行排序,然后以恒定时间删除。你可以给 addItem 和 removeMinimum 的成本为 O(1) 和 O(n log n),或者你可以给他们的摊销成本为 O(n log n) 和 O(1),因为 removeMinimum 的序列都是 O (1) 如果没有添加。
  • 好吧,我想我现在明白了。如果我们有这种情况,那么:“如果对数据结构的每个操作的摊销成本是 O(1),那么在这种最初为空的数据结构上的任何 m 个操作序列的运行时间在最坏的情况下是 O(m2) case. " 我们能否保证 O(m^2) 的最坏情况,因为一系列 m 操作可能会使情况变得更糟?
猜你喜欢
  • 2021-01-24
  • 1970-01-01
  • 2019-08-25
  • 2015-05-31
  • 2021-09-19
  • 1970-01-01
  • 2017-05-18
相关资源
最近更新 更多