【问题标题】:Amortized and Average runtime complexity [closed]摊销和平均运行时复杂度[关闭]
【发布时间】:2014-02-20 14:55:47
【问题描述】:

这不是作业,我正在研究摊销分析。有些事情让我感到困惑。我无法完全理解摊销和平均复杂性之间的含义。不确定这是否正确。这里有一个问题:

--

我们知道程序的运行时复杂度取决于程序输入的组合---假设程序运行时复杂度为O(n)的概率为p,其中p

--

第一个问题是:我在这里读过问题:Difference between average case and amortized analysis

所以,我认为对于平均运行时复杂度没有答案。因为我们不知道平均输入是多少。但它似乎是 p*O(n)+(1-p)*O(logn)。哪个是正确的,为什么?

第二,摊销部分。我读过Constant Amortized Time,我们已经知道摊销分析与平均情况分析不同,因为不涉及概率;摊销分析保证了在最坏情况下每个操作的平均性能。

我可以说摊销运行时间是 O(n)。但答案是 O(pn)。我对为什么涉及概率有点困惑。虽然 O(n)=O(pn),但我真的不知道为什么 p 会出现在那里?我改变思维方式。假设我们确实损失了时间,那么 K 变得非常大,因此摊销运行时间为 (KpO(n)+K*(1-p)O(logn))/k = O (pn)。与Average case似乎是一样的想法。

抱歉给我造成了困扰,请帮助我,先谢谢!

【问题讨论】:

  • “摊销分析保证了每个操作在最坏情况下的平均性能。”不,它没有。它保证了大量操作的最坏情况性能。从您的第一个链接重新阅读 RossFabricant 的 +10 答案。
  • @MooingDuck:实际上它保证了执行一系列操作的最坏情况复杂性
  • @NiklasB.: 是的,你可能就在那儿
  • 你为什么说“但答案是 O(p*n)”?在你的第四段中,你列出了一个想法,然后问“哪个是正确的”,这是没有意义的。
  • "如果我们用 K 个不同的输入组合运行程序,其中 K 是一个非常大的数字,我们可以说这个程序的摊销和平均运行时复杂度是"不,这两种方法都不是通过随机选择输入并检查运行时间来凭经验工作。摊销分析实际上与概率无关。

标签: algorithm time-complexity average amortized-analysis


【解决方案1】:

对于“平均”或“预期”复杂性,您正在对问题的概率分布做出假设。如果您不走运,(或者如果您的问题生成器恶意未能匹配您的假设 8^),所有您的操作将非常昂贵,并且您的程序可能需要比您预期的更长的时间。

摊销复杂度是任何操作序列总成本的保证。这意味着,无论您的问题生成器有多恶意,您都不必担心一系列操作花费的时间比您预期的要长。

(根据算法的不同,不难发现最坏的情况。经典的例子是简单的快速排序,尽管“平均”情况很快,但它在大多数排序的输入上表现非常糟糕)

【讨论】:

    猜你喜欢
    • 2011-06-25
    • 2013-03-02
    • 2018-02-13
    • 2013-02-11
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多