www.wikidata.de-de.nina.az
In der Informatik ist ein Binomial Heap eine Datenstruktur genauer ein Heap der sich ahnlich wie binare Heaps als Vorrangwarteschlange einsetzen lasst Das heisst dass in beliebiger Reihenfolge effizient Elemente mit festgelegter Prioritat in den Heap hineingelegt werden konnen und stets das Element mit hochster Prioritat entnommen werden kann Im Unterschied zu binaren Heaps konnen Binomial Heaps auch effizient vereinigt werden Dies ermoglicht es beispielsweise effizient in einem Mehrprozessor Multitasking System die Aufgaben eines uberlasteten Prozessors einem anderen zu ubertragen Die Prioritat der Elemente wird diesen durch Schlussel aufgepragt Uber der Menge der Schlussel muss daher eine totale Ordnung bestehen wie sie zum Beispiel die Kleiner Gleich Relation uber den ganzen Zahlen darstellt Binomial Heaps wurden erstmals 1978 von Jean Vuillemin beschrieben 1987 wurde von Michael L Fredman und Robert Tarjan daraus eine neue Datenstruktur abgeleitet die sogenannten Fibonacci Heaps Diese besitzen amortisiert teilweise bessere Laufzeiten und finden unter anderem Anwendung im Algorithmus von Dijkstra und im Algorithmus von Prim Ihre Worst Case Laufzeit ist teilweise aber deutlich schlechter weshalb sie sich nicht fur Online Algorithmen eignen Inhaltsverzeichnis 1 Operationen 2 Binomial Baume 3 Struktur eines Binomial Heaps 4 Implementierung der Operationen 4 1 Verschmelzen zweier Heaps merge 4 2 Entfernen eines Elementes remove 4 3 Weitere Operationen 5 Bemerkungen 6 Literatur 7 WeblinksOperationen BearbeitenBinomial Heaps unterstutzen effizient die Operationen insert zum Einfugen eines Elementes remove zum Entfernen eines Elementes extractMin zur Ruckgabe und zum Entfernen eines Elementes mit minimalem Schlussel hochster Prioritat changeKey zum Andern des Schlussels eines Elementes und merge zum Verschmelzen zweier Heaps Alle Operationen lassen sich mit einer Worst Case Laufzeit von O log n implementieren wobei n die Zahl der aktuell im Heap befindlichen Elemente ist Binomial Baume Bearbeiten nbsp Binomial Baum der Ordnung 3Binomial Heaps bestehen aus einer Liste von Binomial Baumen verschiedener Ordnung Binomial Baume und ihre Ordnung sind dabei wie folgt rekursiv definiert Ein Binomial Baum der Ordnung 0 besteht aus einem einzelnen Knoten Ein Binomial Baum der Ordnung k besitzt eine Wurzel mit Grad k deren Kinder genau die Ordnung k 1 k 2 0 in dieser Reihenfolge besitzen Ein Binomial Baum der Ordnung k lasst sich also auch leicht aus zwei Binomial Baumen der Ordnung k 1 erstellen indem einer der beiden Baume zum am weitesten links stehenden Kind des anderen gemacht wird Aus dieser Konstruktion lasst sich leicht per vollstandiger Induktion die Eigenschaft ableiten dass ein Binomial Baum der Ordnung k genau 2k Knoten und die Hohe k besitzt Struktur eines Binomial Heaps BearbeitenEin Binomial Heap speichert seine Elemente und die zugehorigen Schlussel in den Knoten seiner Binomial Baume Dabei erfullt er folgende Eigenschaften Jeder Binomial Baum im Heap erfullt die Heap Bedingung das heisst mit Ausnahme der Wurzel die keinen Elternknoten besitzt gilt fur jeden seiner Knoten dass der zugehorige Schlussel grosser oder gleich dem Schlussel seines Elternknotens ist Fur jede naturliche Zahl k existiert hochstens ein Binomial Baum der Ordnung k nbsp Beispiel eines Binomial Heaps mit 13 Elementen Die Schlussel der Vater sind hochstens so gross wie die Schlussel ihrer Kinder Die erste Eigenschaft gewahrleistet dass die Wurzel jedes Baumes ein Element mit kleinstem Schlussel im Baum tragt Zusammen mit der Eigenschaft dass ein Binomial Baum der Ordnung k genau 2k Knoten besitzt stellt die zweite Eigenschaft sicher dass fur einen Binomial Heap mit n Elementen exakt festgelegt ist wie viele Baume der Heap besitzt und welche Ordnung diese besitzen Dies ist durch die Binardarstellung von n festgelegt Werden die Ziffern von rechts nach links mit 0 beginnend durchnummeriert so existiert ein Baum der Ordnung k genau dann wenn in der Binardarstellung an der Stelle k eine 1 steht Dies bedeutet auch dass ein Heap mit n Elementen hochstens log2 n 1 Binomial Baume enthalt Ein Binomial Heap mit 13 11012 Elementen besitzt beispielsweise genau einen Baum der Ordnung 3 einen Baum der Ordnung 2 und einen Baum der Ordnung 0 Die Menge der Binomial Baume wird als nach der Ordnung der Baume sortierte Liste der Wurzeln dieser Baume implementiert Ein Binomial Heap besitzt im Gegensatz zum Binar Heap nicht eine einzige Wurzel sondern mehrere Diese werden als Wurzelliste bezeichnet Dadurch erhoht sich die Laufzeit fur das Finden des Minimums auf O log n da alle Elemente der Wurzelliste durchsucht werden mussen Implementierung der Operationen BearbeitenVerschmelzen zweier Heaps merge Bearbeiten nbsp Verschmelzen zweier Binomialbaume von Grad 2 Vergleiche die Wurzeln und fuge dem Baum mit kleinerer Wurzel grau den anderen Baum schwarz als linken Teilbaum hinzu Am Ende erhalt man so den unteren Baum mit Grad 3 Die zentrale Operation ist das Verschmelzen zweier Heaps merge da diese als Unterprogramm aller anderen Operationen verwendet wird Die Operation erfolgt ahnlich der bitweisen Addition von Dualzahlen In diesem Fall entspricht dies der Addition der Anzahl der Elemente n1 und n2 der zu verschmelzenden Heaps Dazu werden simultan die Listen der beiden Heaps beginnend bei den Baumen niedrigster Ordnung durchlaufen In einer speziellen Variablen wird ahnlich der bitweisen Addition ggf ein Ubertrag in Form eines Baumes festgehalten Anfangs ist dieser Ubertrag leer Sei nun x die hochste Binarstelle von n 1 n 2 displaystyle n 1 n 2 nbsp verschieden von 0 das heisst x log 2 n 1 n 2 1 1 displaystyle x log 2 n 1 n 2 1 1 nbsp Zu jeder naturlichen Zahl k mit 0 k x displaystyle 0 leq k leq x nbsp wird nun in aufsteigender Reihenfolge die Anzahl der Baume mit Ordnung k in beiden Heaps und in der Ubertragsvariablen betrachtet Ist diese 0 so passiert nichts 1 so wird der entsprechende Baum in den neuen Heap ubernommen und der Ubertrag ggf geleert 2 so wird der Baum dessen Schlussel an der Wurzel grosser ist zum am weitesten links stehenden Kind des anderen Baumes gemacht und der so entstehende Baum der Ordnung k 1 als Ubertrag behalten 3 so wird der Baum aus dem Ubertrag in den neuen Heap ubernommen und von den beiden Baumen in den Heaps wird der Baum dessen Schlussel an der Wurzel grosser ist zum am weitesten links stehenden Kind des anderen Baumes gemacht und der so entstehende Baum der Ordnung k 1 als Ubertrag behalten Jeder dieser Schritte lasst sich in konstanter Zeit durchfuhren Da maximal log 2 n 1 n 2 1 displaystyle log 2 n 1 n 2 1 nbsp derartige Schritte getatigt werden benotigt die Operation im schlimmsten Fall nur logarithmisch viel Zeit Entfernen eines Elementes remove Bearbeiten nbsp Aufspalten eines Binomial Baumes mittels split Dreiecke symbolisieren die neuen Teilbaume Die Beschriftung der Knoten bezeichnet deren Ordnung vor beziehungsweise nach dem Aufspalten Es gilt k gt a1 gt a2 gt gt ai x wobei i 1 die Tiefe von Knoten X im Baum ist Neben merge ist das Entfernen eines Elementes remove die anspruchsvollste Operation Sei X das zu entfernende Element seine Ordnung x und T der Binomial Baum der dieses Element enthalt und dessen Ordnung k betragt Ausgehend von X muss der Binomial Baum der das Element enthalt geeignet in kleinere Binomial Baume aufgespalten werden Dieses Aufspalten des Baumes geschieht am einfachsten mit einer rekursiven Funktion split der als Argument ein Knoten im Baum ubergeben wird Anfangs ist X selbst das Argument Sofern das ubergebene Argument einen Elternknoten besitzt ruft sich die Funktion zuerst selbst mit diesem als Argument auf und entfernt anschliessend solange das am weitesten links stehende Kind des Vaters also das Kind mit hochster Ordnung bis das Argument selbst aus dem Baum entfernt wurde Da das Entfernen des am weitesten links stehenden Elementes gerade die umgekehrte Operation zum oben dargestellten rekursiven Aufbau der Binomial Baume darstellt sind die so abgespaltenen Baume und der Rest weiterhin Binomial Baume Ferner ist X nun Wurzel eines Baumes und es lasst sich zeigen dass der ursprungliche Baum nun in genau 2 Binomial Baume der Ordnung x sowie in jeweils einen Binomial Baum der Ordnung x 1 x 2 k 1 zerfallen ist Werden nun noch in gleicher Weise alle Kinder von X entfernt so ist X vollstandig isoliert und kann problemlos geloscht werden Dabei entsteht aus den Kindern fur jedes j in 0 x 1 jeweils genau ein Binomial Baum der Ordnung j Insgesamt bleibt also fur jedes j aus 0 k 1 ein Binomial Baum der Ordnung j ubrig Diese Baume bilden zusammen wieder einen Binomial Heap der mittels merge mit dem Rest des Heaps verschmolzen werden kann Das Abspalten des am weitesten links stehenden Elementes ist in konstanter Zeit moglich Da der ursprungliche Baum genau k mal aufgespalten wird der Binomial Heap aber mindestens 2k Elemente enthalt benotigt diese Operation im Worst Case nur logarithmisch viel Zeit Da das anschliessende merge selbst auch nur logarithmisch viel Zeit benotigt ist auch die Gesamtlaufzeit im schlimmsten Fall logarithmisch zur Anzahl der Elemente im Heap Weitere Operationen Bearbeiten Die ubrigen Operationen gestalten sich nun sehr einfach Um ein neues Element einzufugen insert wird einfach ein neuer Heap erzeugt der nur dieses eine Element enthalt und dieser mittels merge mit dem eigentlichen Heap verschmolzen Um ein Element mit minimalem Schlussel zu entnehmen extractMin braucht lediglich das Minimum der Wurzeln gefunden zu werden indem die Liste der Wurzeln einmal durchlaufen wird und das gefundene Element mit remove entfernt und zuruckgegeben wird Um den Schlussel eines Elementes zu verandern changeKey wird dieses mit remove zunachst entfernt dann dessen Schlussel geandert und anschliessend mit insert wieder eingefugt Bemerkungen BearbeitenDie Operationen remove und changeKey setzen voraus dass die Position der entsprechenden Elemente im Heap bekannt ist Im Allgemeinen ist es namlich nicht moglich effizient ein Element im Heap zu suchen Daher muss die Operation insert einen Zeiger auf den Behalter fur das eingefugte Element zuruckliefern den sich das aufrufende Programm im Bedarfsfall an geeigneter Stelle merkt Zu der hier dargestellten Implementierung gibt es noch eine Alternative Diese gestattet aber nur das Verringern des Schlussels eines Elementes Entsprechend heisst die Operation dann nicht changeKey sondern decreaseKey Dabei wird statt remove die Operation decreaseKey direkt implementiert Diese tauscht den Schlussel einfach aus und stellt die Heap Bedingung dadurch wieder her dass Element und Schlussel in den tragenden Behaltern solange mit denen des Vaters getauscht werden bis die Heap Bedingung wieder erfullt ist Die Operation remove wird dann so implementiert dass mit decreaseKey der Schlussel des Elementes quasi unendlich klein gemacht wird so dass das Element an die Wurzel seines Binomial Baumes wandert Anschliessend konnen die Kinder der neuen Wurzel entfernt und mit merge wieder in den Baum eingefugt werden Problematisch an diesem Verfahren ist dass nach einem decreaseKey die Zuordnung der Elemente zu ihren Behaltern nicht mehr stimmt Die Anderungen mussen dem aufrufenden Programm also noch irgendwie mitgeteilt werden Literatur BearbeitenThomas H Cormen Charles E Leiserson Ronald L Rivest Clifford Stein Algorithmen eine Einfuhrung Oldenbourg Munchen Wien 2004 ISBN 3 486 27515 1 englisch Introduction to algorithms Ubersetzt von Karen Lippert Micaela Krieger Hauwede Jean Vuillemin A data structure for manipulating priority queues Communications of the ACM 21 1978 S 309 314 Weblinks BearbeitenSimulation eines Binomial Heaps Abgerufen am 30 Juli 2022 Java Applet englisch Der Binomial Heap Algorithmus Lernprogramm zum Binomial Heap mit Animationen und interaktiven Aufgaben Archiviert vom Original am 13 Marz 2016 abgerufen am 30 Juli 2022 Universitat Oldenburg nbsp Dieser Artikel wurde am 18 August 2005 in dieser Version in die Liste der lesenswerten Artikel aufgenommen Abgerufen von https de wikipedia org w index php title Binomial Heap amp oldid 224922224 Binomial Baume