Tuesday, 25 December 2012

Heap code....


#include <iostream>
#include <vector>
#include <iterator>
using namespace std;

class Heap{

public:
void insert(int val);
int getMin();
int getSize();
void print();

private:
void heapfyUp(int index);
void heapfyDown(int index);
int left(int index);
int right(int index);
int parent(int index);

vector<int> heap;
};

int Heap::getSize()
{
return heap.size();
}

int Heap::left(int parent)
{


int i = (parent >> 1 ) + 1;    // parent * 2 + 1

return i < getSize() ? i : -1;
}


int Heap::right(int parent)
{


int i = (parent >> 1 ) + 2; // parent * 2 + 2

return i < getSize() ? i : -1;
}

int Heap::parent(int child)
{
if(child != 0)
{
int i= child  >> 1 ;
return i;
}
return -1;
}

void Heap::insert(int val)
{
heap.push_back(val);
heapfyUp(getSize()-1);
}


//Get priority element
int Heap::getMin()
{
int tmp = heap[0];
heap[0]=heap[getSize()-1];
heapfyDown(0);
return tmp;
}



// Min Heap
void Heap::heapfyUp(int index)
{
while(index>0 && parent(index)>=0 &&
heap[index] < heap[parent(index)] )
{
int temp = heap[index];
heap[index] = heap[parent(index)];
heap[parent(index)] = temp;
index = parent(index);
}
}

//Heap down to move the top element to appropriate position.
void Heap::heapfyDown(int index)
{
int child = left(index);

if(child >=0 && right(index)> 0 &&
heap[child] > heap[right(index) ] )
{
child = right(index);
}

if(heap[index] > heap[child])
{
int temp = heap[index];
heap[index]=heap[child];
heap[child]=temp;
heapfyDown(child);
}
}


void Heap::print()
{
for(int i=0;i < heap.size();i++)
cout<<heap[i]<<" ";
cout<<endl;

}

int main()
{
    // Create the heap
    Heap* myheap = new Heap();
    myheap->insert(700);
    myheap->print();
    myheap->insert(500);
    myheap->print();
    myheap->insert(100);
    myheap->print();
    myheap->insert(800);
    myheap->print();
    myheap->insert(200);
    myheap->print();
    myheap->insert(400);
    myheap->print();
    myheap->insert(900);
    myheap->print();
    myheap->insert(1000);
    myheap->print();
    myheap->insert(300);
    myheap->print();
    myheap->insert(600);
    myheap->print();

    // Get priority element from the heap
    int heapSize = myheap->getSize();
    for ( int i = 0; i < heapSize; i++ )
        cout << "Get min element = " << myheap->getMin() << endl;

    // Cleanup
    delete myheap;
}

No comments:

Post a Comment

AWS Data Pipeline Services

https://www.youtube.com/watch?v=tykcCf-Zz1M