二进制堆上的摊销分析

时间:2019-03-20 01:30:50

标签: data-structures amortized-analysis

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

所以一个序列,我们执行了n次extract_min操作,并且最初包含n个元素。这是否意味着由于每个操作都是O(1),所以整个序列将在O(n)时间内处理?

1 个答案:

答案 0 :(得分:0)

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

这是事实,因此当您问“固定的摊销时间extract_min是否暗示着删除所有元素的线性时间?”时,您真正要问的是“ extract_min是否可以采用固定的摊销时间?即使提取所有元素需要 O(N log N)时间?”

答案实际上取决于堆支持的操作。

如果堆仅支持addextract_min操作,则每个(恒定时间)未失败的extract_min必须对应于先前的add。然后我们可以说add需摊销 O(log N)时间,而extract_min需摊销 O(1)时间,因为我们可以将其所有非恒定成本分配给先前的add

但是,如果堆支持 O(N)make_heap操作(是否摊销),则可以执行 N {{1 }}的操作,而无需执行其他任何操作,这些操作总计会花费 O(N log N)个时间。然后必须将整个 O(N log N)成本分配给 N extract_min个操作,而我们声称extract_min需要摊销固定时间。