Data structures 二元堆的摊销分析

Data structures 二元堆的摊销分析,data-structures,amortized-analysis,Data Structures,Amortized Analysis,因此,常规二进制堆有一个操作extract_min,它是O(log(n))最坏时间。假设提取的摊销成本为O(1)。设n为堆的大小 我们执行了n个extract_min操作,它最初包含n个元素。这是否意味着整个序列将在O(n)时间内处理,因为每个操作都是O(1) 让我们先解决这个问题:通过extract\u min操作删除堆中的所有元素需要O(N log N)时间 这是一个事实,所以当你问“常数摊销时间extract\u min是否意味着删除所有元素的线性时间?”时,你真正要问的是“即使提取所有元

因此,常规二进制堆有一个操作extract_min,它是O(log(n))最坏时间。假设提取的摊销成本为O(1)。设n为堆的大小


我们执行了n个extract_min操作,它最初包含n个元素。这是否意味着整个序列将在O(n)时间内处理,因为每个操作都是O(1)

让我们先解决这个问题:通过
extract\u min
操作删除堆中的所有元素需要O(N log N)时间

这是一个事实,所以当你问“常数摊销时间
extract\u min
是否意味着删除所有元素的线性时间?”时,你真正要问的是“即使提取所有元素需要O(N log N)时间,是否可以
extract\u min
使用常数摊销时间?”

这个问题的答案实际上取决于堆支持什么操作


如果堆仅支持
add
extract\u min
操作,则每个未失败的
extract\u min
操作(在恒定时间内)必须对应于之前的
add
。然后我们可以说,
add
需要摊销O(logn)时间,
extract\u min
需要摊销O(1)时间,因为我们可以将其所有非恒定成本分配给以前的
add


但是,如果堆支持O(N)time
make\u heap
操作(摊销或不摊销),则可以执行N
extract\u min
操作,而无需执行任何与O(N log N)时间相加的操作。然后必须将整个O(N log N)成本分配给N
extract\u min
操作,我们不能声称
extract\u min
需要摊销的固定时间。

让我们先解决这个问题:通过
extract\u min
操作删除堆中的所有元素需要O(N log N)时间

这是一个事实,所以当你问“常数摊销时间
extract\u min
是否意味着删除所有元素的线性时间?”时,你真正要问的是“即使提取所有元素需要O(N log N)时间,是否可以
extract\u min
使用常数摊销时间?”

这个问题的答案实际上取决于堆支持什么操作


如果堆仅支持
add
extract\u min
操作,则每个未失败的
extract\u min
操作(在恒定时间内)必须对应于之前的
add
。然后我们可以说,
add
需要摊销O(logn)时间,
extract\u min
需要摊销O(1)时间,因为我们可以将其所有非恒定成本分配给以前的
add


但是,如果堆支持O(N)time
make\u heap
操作(摊销或不摊销),则可以执行N
extract\u min
操作,而无需执行任何与O(N log N)时间相加的操作。整个O(N log N)成本必须分配给N提取min操作,我们不能声称提取min需要摊销的固定时间。

这对cs.stackexchange.com来说可能是一个更好的问题。无论哪种方式-如果运行no(1)操作,那么是的,这需要O(n)。如果你以某种方式结束了每一次提取,那么你会得到O(n logn)。谁说提取已经摊销了O(1)成本?这对cs.stackexchange.com来说可能是一个更好的问题。无论哪种方式-如果运行no(1)操作,那么是的,这需要O(n)。如果您以某种方式结束了每个提取时间取O(logn),那么您将得到O(n logn)。谁说提取时间已摊销O(1)成本?“如果堆只支持添加和提取时间操作,那么每个未失败的提取时间(在恒定时间内)必须对应于之前的添加。我们可以说添加时间取摊销O(logn)时间和提取时间取摊销O(1)时间,因为我们可以将其所有的非恒定成本分配给以前的加法。“如果是这样,插入时间取O(log(n)),那么n次操作是否需要O(n)时间?不。正如我所说的,N个extract_min操作需要O(logn)时间。“如果堆只支持add和extract_min操作,那么每个没有失败的extract_min(在固定时间内)都必须对应于之前的add。我们可以说add需要摊销O(logn)时间,extract_min需要摊销O(1)时间,因为我们可以将它的所有非常量成本分配给前一个add。“如果是这样的话,插入取O(log(n)),那么n次操作会花费O(n)时间吗?不。正如我所说,N extract_min操作需要O(N logn)时间。