2012-09-04 4 views
1

내 목표는 이항 힙을 생성하는 것입니다. 여기에 내가 지금 쓴 내 코드입니다 :이항 힙 구현

#include<iostream> 
using namespace std; 
void maxheapify(int a[],int length,int i) 
{ 
    int left=2*i; 
    int right=2*i+1; 
    int largest=i; 
    if(left<length && a[left]>a[largest]) 
    { 
     largest=left; 

    } 
    if (right<length && a[right]>a[largest]) 
    { 
     largest=right; 
    } 

    if(largest!=i) 
    { 
int temp=a[i]; 
a[i]=a[largest]; 
a[largest]=temp; 
maxheapify(a,length,largest); 

    } 

} 
void buildmax(int a[],int length) 
{ 
    for(int i=(length-1)/2;i>=0;i--) 
    { 
     maxheapify(a,length,i); 

    } 


} 
/*void heapsort(int a[],int length) 
{ 
    buildmax(a,length); 
    for(int i=length-1;i>0;i--) 
    { 
     int temp=a[i]; 
     a[i]=a[0]; 
     a[0]=temp; 
     maxheapify(a,i,0); 


    } 


} 
*/ 
void combine_heap(int a[],int n,int b[],int m,int c[]) 
{ 

} 
int main() 
{ 
    int a[100]; 
    int n=sizeof(a)/sizeof(a[0]); 

    int b[100]; 
    int m=sizeof(b)/sizeof(b[0]); 
    int c[200]; 
    int length=sizeof(a)/sizeof(a[0]); 
    for(int i=0;i<length;i++){ 
     a[i]=34+rand()%(length-33); 
     b[i]=rand()%(i+1); 
      } 
    /*heapsort(a,length);*/ 
    /*for(int i=0;i<length;i++) 
     cout<<a[i]<<" ";*/ 


    return 0; 
} 

내가 사소한 솔루션은 세 번째로 두 개의 배열을 결합하고 buildmax 프로 시저를 호출하는 것입니다 생각,하지만 난 그것을 효율적이지 않습니다 생각, 내가 구현하기 위해 노력했다 위키 피 디아

내가 일반적으로 하위 트리에 액세스하는 방법을 때문에, 그것을 구현하는 방법을 잘 모릅니다
function merge(p, q) 
    while not(p.end() and q.end()) 
     tree = mergeTree(p.currentTree(), q.currentTree()) 
     if not heap.currentTree().empty() 
      tree = mergeTree(tree, heap.currentTree()) 
      heap.addTree(tree) 
     else 
      heap.addTree(tree) 
     heap.next() p.next() q.next() 

있지만에서이 의사 코드는? 다른 변형은 우선 순위 큐를 구성하고 다른 배열에서 첫 번째 배열에서 다음 삽입 기능 삽입을 사용하는 것입니다 ,하지만이 최적의? 두 최대 힙을 효율적으로 하나로 결합하는 코드를 작성하는 데 도움이됩니다.

+1

문제를 디버그하는 데 도움을 줄 수 있지만 대신 코드를 작성하지는 않습니다. 우리는 코드 작성 회사가 아닙니다. –

+0

나를 위해 코드를 작성하지 말고, 쓰는 방법을 도와주세요. –

+0

글쎄, 글을 쓰고 시험해 보셨습니까? –

답변

0

이것은 Binomial Heap의 좋은 예이지만 c. 당신은 이항 힙을 구현하는 기본 논리를 얻을 것이다. 예를 참조하십시오 here

알고리즘을 이해하려면 here 비디오 자습서를 참조하십시오.