Algorithm 平均案例与摊销分析之间的差异

Algorithm 平均案例与摊销分析之间的差异,algorithm,analysis,Algorithm,Analysis,我正在读一篇关于算法摊销分析的文章。下面是一个文本片段 摊销分析与平均案例分析相似,因为它是 与一系列操作的平均成本有关。 然而,平均案例分析依赖于概率假设 关于数据结构和操作,以便计算 算法的预期运行时间。因此,其适用性是有限的 依赖于关于概率分布的某些假设 算法输入 一个平均案例范围并不排除一个人 遇到“不走运”的情况时,会遇到需要比预期更多的输入 即使输入的概率分布假设为 有效 关于上述文本片段,我的问题如下: 在第一段中,平均案例分析如何“依赖于数据结构和操作的概率假设?”我知道平均案例

我正在读一篇关于算法摊销分析的文章。下面是一个文本片段

摊销分析与平均案例分析相似,因为它是 与一系列操作的平均成本有关。 然而,平均案例分析依赖于概率假设 关于数据结构和操作,以便计算 算法的预期运行时间。因此,其适用性是有限的 依赖于关于概率分布的某些假设 算法输入

一个平均案例范围并不排除一个人 遇到“不走运”的情况时,会遇到需要比预期更多的输入 即使输入的概率分布假设为 有效

关于上述文本片段,我的问题如下:

  • 在第一段中,平均案例分析如何“依赖于数据结构和操作的概率假设?”我知道平均案例分析依赖于输入的概率,但上面的陈述是什么意思

  • 作者在第二段中的意思是,即使输入分布有效,平均案例也无效

  • 谢谢

  • 考虑计算未排序数组中的最小值。也许你知道它有
    O(n)
    运行时间,但如果我们想更精确,它在平均情况下会进行
    n/2
    比较。为什么会这样?因为我们是在做数据假设;我们假设最小值可以在每个位置以相同的概率出现。 如果我们改变这个假设,比如说,处于i位置的概率随着i的增加而增加,我们可以证明一个不同的比较数,甚至是一个不同的渐近界

  • 在第二段中,作者说,通过平均案例分析,我们可能非常不走运,测量的平均案例比理论案例大;回顾前面的例子,如果我们在大小为n的m个不同数组上运气不好,并且最小值每次都在最后一个位置,那么我们将测量
    n
    平均情况,而不是
    n/2
    。当摊销界限被证明时,这不会发生

  • 要获得平均案例时间复杂性,您需要假设“平均案例”是什么。如果输入是字符串,“平均字符串”是多少?只有长度重要吗?如果是这样,我将得到的字符串的平均长度是多少?如果不是,这些字符串中的平均字符数是多少?例如,如果字符串是姓氏,则很难确定地回答这些问题。平均姓氏是多少

  • 在最有趣的统计样本中,最大值大于平均值。这意味着您的一般案例分析有时会低估某些输入(有问题)所需的时间/资源。如果你仔细想想,对于一个对称的PDF,一般的案例分析应该低估和高估一样多。最坏情况分析,OTOH,只考虑最有问题的情况,因此肯定会高估


  • 平均案例分析对某些情况下可能无法满足的输入做出假设。因此,如果您的输入不是随机的,在最坏的情况下,算法的实际性能可能比平均情况慢得多

    摊销分析不作此类假设,但它考虑的是一系列操作的总体绩效,而不是一项操作


    动态数组插入提供了一个摊销分析的简单示例。一种算法是分配一个固定大小的数组,当插入新元素时,在必要时分配一个固定大小的数组,该数组的长度是原来的两倍。在最坏的情况下,插入可能需要与整个列表的长度成比例的时间,因此在最坏的情况下,插入是一个O(n)操作。但是,您可以保证这种最坏的情况很少发生,因此插入是使用摊销分析的O(1)操作。无论输入是什么,摊销分析都适用。

    请查看第二条评论,非常非常好!!lol@sorry\u我看不出注释被删除了,因为我没有看到任何注释。如何在一个只有n/2比较的未排序数组中计算最小值?我想你需要的正是n-1。不仅是平均水平,而且总是如此。我同意@StefanPochmann的观点。我只是想补充一点,我将用在数组中查找元素的例子来改变这个例子。在这种情况下,假设您的算法从左到右一直运行,直到找到元素为止,当它找到元素时就会停止,您可以支持您正在进行的分析。您很好地谈论了“平均案例”,但如果它也清楚地说明了“摊销案例”的作用,问题会更好。