Amortized analysis 在摊销分析的汇总法中,O(n)/n=1是怎样的

Amortized analysis 在摊销分析的汇总法中,O(n)/n=1是怎样的,amortized-analysis,Amortized Analysis,在第5课“摊销分析:聚合方法”中的数据结构课程中,摊销分析的聚合方法中O(n)/n=1是如何给出的?简短回答 O(n)/n=cn/n=c=O(1) 长话短说 我们使用摊销分析来分析一系列操作的成本,而不是单个操作的成本。在最后一种情况下,我们使用渐近分析(一些渐近符号是:θ、大O、大ω、小O和小ω),但当我们遇到一个操作序列并想要了解该序列的代价时,它就不能很好地工作 原因是,如果我们应用“常规”渐近分析,例如,我们在最坏情况分析中的渐近上界可能过于悲观。经典的例子是插入到动态数组中。将元素插入

在第5课“摊销分析:聚合方法”中的数据结构课程中,摊销分析的聚合方法中O(n)/n=1是如何给出的?

简短回答 O(n)/n=cn/n=c=O(1)

长话短说 我们使用摊销分析来分析一系列操作的成本,而不是单个操作的成本。在最后一种情况下,我们使用渐近分析(一些渐近符号是:θ、大O、大ω、小O和小ω),但当我们遇到一个操作序列并想要了解该序列的代价时,它就不能很好地工作

原因是,如果我们应用“常规”渐近分析,例如,我们在最坏情况分析中的渐近上界可能过于悲观。经典的例子是插入到动态数组中。将元素插入到动态分配的数组中,当数组已满时,定义新数组(例如,两倍大)并复制所有元素。问题是大多数插入都是在固定时间内(或O(1))工作的,但是当您需要重新定义数组时,将需要线性时间(O(n)),因为您需要复制所有元素

因此,假设插入n个元素,只需重新定义数组一次,就有n个操作,在最坏的情况下,每个操作都是O(n),因此在最坏的情况下,操作序列的成本是O(n^2),考虑到大多数操作都是O(1),这似乎太悲观了在最坏的情况下,它们中只有一个是O(n)

我们将一系列操作的摊余成本定义为(n个操作的成本)/n。在你的例子中,n次运算的代价是O(n),它等于cn(其中c是一个常数),根据大O符号的定义,除以n,你就得到了c,它等于O(1),因为c也是一个常数。

O(n)/n=cn/n=c=O(1)

长话短说 我们使用摊销分析来分析一系列操作的成本,而不是单个操作的成本。在最后一种情况下,我们使用渐近分析(一些渐近符号是:θ、大O、大ω、小O和小ω),但当我们遇到一个操作序列并想要了解该序列的代价时,它就不能很好地工作

原因是,如果我们应用“常规”渐近分析,例如,我们在最坏情况分析中的渐近上界可能过于悲观。经典的例子是插入到动态数组中。将元素插入到动态分配的数组中,当数组已满时,定义新数组(例如,两倍大)并复制所有元素。问题是大多数插入都是在固定时间内(或O(1))工作的,但是当您需要重新定义数组时,将需要线性时间(O(n)),因为您需要复制所有元素

因此,假设插入n个元素,只需重新定义数组一次,就有n个操作,在最坏的情况下,每个操作都是O(n),因此在最坏的情况下,操作序列的成本是O(n^2),考虑到大多数操作都是O(1),这似乎太悲观了在最坏的情况下,它们中只有一个是O(n)

我们将一系列操作的摊余成本定义为(n个操作的成本)/n。在你的例子中,n次运算的代价是O(n),它等于cn(其中c是某个常数),根据大O符号的定义,除以n,你就得到了c,它等于O(1),因为c也是某个常数