[英]Why isn't heapsort lg(n!)?
I'm reading CLRS and it says heapsort is 我正在阅读CLRS,它说的是heapsort
HEAPSORT(A):
BUILD-MAX-HEAP(A);
for (i = A.length; i >= 1; i++)
{
exchange A[1] with A[i];
A.heap-size = A.heap-size - 1;
MAX-HEAPIFY(A,1);
}
MAX_HEAPIFY is O(lg n)
. MAX_HEAPIFY是
O(lg n)
。 The book says it runs MAX-HEAPIFY n
times thus it is O(n lg n)
time. 该书说它运行MAX-HEAPIFY
n
次,因此它是O(n lg n)
时间。
But if the heap is shrinking in size by 1 each iteration shouldn't it be O(lg n!)
? 但是如果堆的大小缩小了1,那么每次迭代都不应该是
O(lg n!)
?
It would be lg 1 + lg 2 ... + lg(n-1) + lg (n) = lg(n!)
, right ? 它将是
lg 1 + lg 2 ... + lg(n-1) + lg (n) = lg(n!)
,对吗?
Actually it's Stirling's Approximation : 实际上这是斯特林的近似值 :
O( log(n!) )
= O(nlogn)
O( log(n!) )
= O(nlogn)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.