2009-07-11 1 views
-1

바이너리 힙 코드의 Big O 시간을 알고 싶습니다. 어떻게 개선 할 수 있습니까?바이너리 힙 코드의 Big O 시간을 알고 싶습니다. 개선 사항이 있다면

public static void CreateMaxHeap(int[] a) 
{ 
    for (int heapsize = 0; heapsize < a.Length; heapsize++) 
    { 
     int n, p; 
     n = heapsize; 
     while (n > 0) 
     { 
      p = (n - 1)/2; 
      if(a[n]>a[p]) 
       Swap(a,n,p); 
      n = p; 
     } 
    } 
} // end of create heap 
+1

시도해 보셨습니까? 아이디어가 있습니까? 우리는 단지 당신을 위해 숙제를하러가는 것이 아닙니다. – rlbond

+2

12 밀리 초 – Dario

+0

스왑은 정확히 무엇을합니까? – Victor

답변

5

그것의 O (nlgn)는 O (n)를 취 전체 배열을 반복

:

여기서 코드이다. 그러나 반복 할 때마다 반복하여 2로 나누어 배열을 통해 되돌아갑니다. 그래서 반복 할 때마다 lgn에 로그베이스 2 n이 추가됩니다.

내가 더 먼저 만드는 것은 heapsize가 인 경우 아무 것도 발생하지 않는다는 것입니다. 자원 낭비가 너무 많아서 1시에 시작할 수 있습니다. 그게 전부입니다.

+0

쿨 ... 알았어 .... 어떻게하면 좋을까? 이 이야기는 http://en.wikipedia.org/wiki/Heapsort....here에서 O (n) 시간에 실행된다고 말하는 상향식 접근 방식입니다. 그러나 이해할 수는 없습니다. 방법? – Learner

+0

당신은 그것이 어떻게 O (n)인지 이해하지 못하거나 그것을 구현하는 방법을 이해하지 못합니까? – Victor

+0

@Learner - 그것이 O (n)라고 어디에 있습니까? 이 기사에서는 여전히 O (nlgn) 인 smoothsort를 언급하지만 입력이 다소 정렬되어 있으면 O (n)에 가깝습니다. – Cypher2100

관련 문제