Implementieren Sie eine Priorityqueue ein BinarySearchTree mit: Java

stimmen
4

Ich muss für meine Algorithmen II-Klasse „eine Prioritätswarteschlange durch einen binären Suchbaum (BST) implementiert schaffen“. Allerdings bin ich mir nicht sicher, wie Sie einen binären Suchbaum als Prioritätswarteschlange verwenden würden. Könnte jemand erklären, was es ist, dass die Zuordnung mich bittet, zu tun?

Als Referenz sind hier die Methoden müssen die Priorityqueue implementieren:

add – adds a new item to the queue
peek – returns the head of the queue
remove – removes the head of the queue and returns it
search – returns the position of an element in the queue, or -1 if it is not found.
size – returns the total number of elements in the queue
inorder – returns an in-order, comma-separated string of every element in the queue
preorder – returns an pre-order, comma-separated string of every element in the queue
height – returns the height of the underlying BST

Vielen Dank im Voraus für jede Beratung !!

Veröffentlicht am 21/05/2011 um 22:50
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
0

Ein binärer Suchbaum wird verwendet , um Elemente in sortierter Reihenfolge , um effizient zu halten. Wenn die Sortierreihenfolge auf Priorität basiert, dann binären Baum wird eine Prioritätswarteschlange. Sie knallen die höchste Priorität Element aus, und neue Elemente einfügen entsprechend ihrer Priorität.

Bearbeitet hinzufügen:

Es kann helfen, die Alternativen zu prüfen - wenn Sie eine verknüpfte Liste als Warteschlange verwendet, wie würden Sie wissen, wo ein neues Element einzufügen, das nicht von der ganzen Weg hinunter die Liste gehen, die O (N) mit einer Worst-Case ist von N. einen binären Baum Verwendung löst dieses Problem.

Beantwortet am 21/05/2011 um 22:57
quelle vom benutzer

stimmen
4

Ein binärer Suchbaum wird immer bestellt und wird es immer bleiben , um , wenn neue Elemente eingeführt werden.

Der große Vorteil der binären Suchbäume über andere Datenstrukturen ist, dass die entsprechenden Sortieralgorithmen und Suchalgorithmen wie in Ordnung Traversal sehr effizient sein können.

Und das ist Ihre Priority Queue. In einer möglichen Implementierung, Gegenstände mit mindestens Priorität die höchste Zahl und Elemente mit der höchsten Priorität erhalten die niedrigste Zahl erhalten. Wenn diese Elemente in die BST eingesetzt sind und Sie es lesen inorder, dann haben Sie die Reihenfolge , in der die Warteschlange verarbeitet werden sollen.

Um die Warteschlange zu verarbeiten, Sie „Pop“ aus dem ersten Elemente in dem Baum und der Rest wird automatisch durch die BST bestellt werden.

Das einzige, was Sie kümmern müssen, ist die richtige Einfügen neuer Elemente in den Baum und was passiert, wenn die erste entfernt wird.

Ihre Methoden würde den Baum Operationen abgebildet werden, addfügt ein neues Element an der richtigen Stelle und ändern Sie den Baum , wenn nötig, sizezum Beispiel die Größe des Baumes zurückgibt, inorderwird der Baum durchlaufen.

Hoffnung, dass es etwas klarer gemacht.

Beantwortet am 21/05/2011 um 22:58
quelle vom benutzer

stimmen
0

hinzufügen Peek entfernen sind Standardmethoden für eine BST

für die Suche kann die Größe in jedem Knoten Cache, der die aktuelle Anzahl von Elementen in dem Unterbaum davon sein wird , der Knoten die Wurzel (oder mit anderen Worten ist node.size = 1+ (node.right==null?0:node.right.size) + (node.left==null?0:node.left.size))

dann wird Suche

int search(E el,Node n){
    if(n==null)return -1;//stop recursion && nullpointer
    int comp = el.compareTo(n.value);
    if(comp==0)return n.left==null?0:node.left.size;
    else if(comp<0){
        return search(el,node.left);
    }else{
        int res = search(el,node.right)
        return res<0?res:res+(n.left==null?0:node.left.size)+1;//pass through -1 unmodified
    }
}
Beantwortet am 21/05/2011 um 23:08
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more