Python 3.x 使用heapq.heappop(Python 3)弹出所有元素所需的时间复杂性
现在一开始看起来应该是O(Nlog(N)),其中N是堆中的元素数,但假设最坏的情况,筛选每个元素需要log(N)时间,直到弹出N/2个节点(因为这意味着堆的高度降低了一个),然后需要log(N)-1次筛选每个元素,直到弹出N/4个节点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
因此它变成了一个类似 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!)
。请参阅
另见