2014-04-07 3 views
4

나는 CLRS을 읽고 있어요 그리고 힙 정렬이 MAX_HEAPIFY이 O(lg n)입니다왜 heapsort lg (n!)가 아닌가요?

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가 n 번 실행되므로 O(n lg n) 시간이라고합니다.

그러나 힙 크기가 1 씩 줄어들면 각 반복은 O(lg n!)이 아니어야합니까?

lg 1 + lg 2 ... + lg(n-1) + lg (n) = lg(n!)이 맞습니까?

+6

대수의 인수 함께 – user3504876

+2

O (N 로그 n) 및 O (로그 승산 할 수 있도록 n!)은 동일합니다 ... –

+1

'n! = n * (n-1) * (n-2) ... * 1' =>'n! 'n! = O (n^n)'=>'O (lg (n!) = O (nlogn) ' – arunmoezhi

답변

10

실제로는 Stirling's Approximation있다 : I 함께베이스 (2)의 대수를 첨가하고있어이 경우

O(log(n!)) = O(nlogn)

+0

나는 단지 교과서를 이해하지 못한다고 생각하기 시작했습니다. – user3504876

+0

예, 진술이 정확합니다. – chrk