Python 3.x 使用heapq.heappop(Python 3)弹出所有元素所需的时间复杂性

Python 3.x 使用heapq.heappop(Python 3)弹出所有元素所需的时间复杂性,python-3.x,time-complexity,heap,Python 3.x,Time Complexity,Heap,现在一开始看起来应该是O(Nlog(N)),其中N是堆中的元素数,但假设最坏的情况,筛选每个元素需要log(N)时间,直到弹出N/2个节点(因为这意味着堆的高度降低了一个),然后需要log(N)-1次筛选每个元素,直到弹出N/4个节点 因此它变成了一个类似 N/2*(对数(N))+N/4*(对数(N)-1)+N/8*(对数(N)-1)+。。。N/(2^(log(N))*(log(N)-堆的高度) 其中最后一项基本上是N/N*0-0 我无法计算出这个系列的总和,我尝试将其积分为标准形式的N*(lo

现在一开始看起来应该是O(Nlog(N)),其中N是堆中的元素数,但假设最坏的情况,筛选每个元素需要log(N)时间,直到弹出N/2个节点(因为这意味着堆的高度降低了一个),然后需要log(N)-1次筛选每个元素,直到弹出N/4个节点
因此它变成了一个类似

N/2*(对数(N))+N/4*(对数(N)-1)+N/8*(对数(N)-1)+。。。N/(2^(log(N))*(log(N)-堆的高度)


其中最后一项基本上是N/N*0-0


我无法计算出这个系列的总和,我尝试将其积分为标准形式的N*(log(N)-x)/2^(x+1)dx积分,将0限制为log(N)
但是wolfram给了我一个复杂的答案,如果堆中有
N
项,那么弹出根项的最坏情况复杂性为
log(N)
。然后堆上有
n-1
项,弹出根项的复杂性是
log(n-1)
。因此,要求和的序列是:

log(n) + log(n-1) + log(n-2) + log(n-3) + ... + log(n-n+1)
或者,更容易理解:

log(1) + log(2) + log(3) + ... + log(n)
解释了O(n logn)和Θ(n logn)的含义

或者,
log(a)+log(b)
等于
log(a*b)
。因此从1到n的日志总和等于
log(n!)
。请参阅

另见