Mein Problem ist eher semantisch als funktional, da der Code die Funktionen deQueue und enQueue korrekt zu implementieren scheint.Korrekte Heap-Implementierung in einer Prioritätswarteschlange
Die reheapDown und reheapUp Funktionen falsch verwendet werden, und ich glaube, das Problem in meinem Haufen Funktion eine einfache Prioritätswarteschlange System neu zu ordnen, um, wenn ein Patient Objekt entfernt wird,
package priqueue;
public class Hosheap{
private Patient[] elements;
private int numElements;
public Hosheap(int maxSize)
{
elements= new Patient[maxSize];
numElements=maxSize;
}
public void ReheapDown(int root,int bottom)
{
int maxChild;
int rightChild;
int leftChild;
leftChild=root*2+1;
rightChild=root*2+2;
if (leftChild<=bottom)
{
if(leftChild==bottom)
maxChild=leftChild;
else
{
if(elements[leftChild].getPriority() <= elements[rightChild].getPriority())
maxChild=rightChild;
else
maxChild=leftChild;
}
if(elements[root].getPriority()<elements[maxChild].getPriority())
{
Swap(root,maxChild);
ReheapDown(maxChild,bottom);
}
}
}
public void ReheapUp(int root,int bottom)
{
int parent;
if(bottom>root)
{
parent=(bottom-1)/2;
if(elements[parent].getPriority()<elements[bottom].getPriority())
{
Swap(parent,bottom);
ReheapUp(root,parent);
}
}
}
public void Swap(int Pos1, int Pos2)
{
Patient temp;
temp = elements[Pos1];
elements[Pos1]=elements[Pos2];
elements[Pos2]=temp;
}
public Patient getElement(int e)
{
return elements[e];
}
public void setElement(Patient p, int n)
{
elements[n]=p;
}
}
Die Idee ist, liegt ReheapUp oder Runter neu geordnet die Warteschlange, die der Code nicht erreicht. Sollte ich auch den Priority Queue-Code angeben, oder ist das schon zu lang?
Ich benutze NetBeans IDE 6.0.1, wenn das hilft.
Sie können hier http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=standardTemplateLibrary2#priority diese einfache, aber effiziente Umsetzung überprüfen. – Dimitris