Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 2 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.

Ähnliche Präsentationen


Präsentation zum Thema: "Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 2 Prof. Dr. Reiner Güttler Fachbereich GIS HTW."—  Präsentation transkript:

1

2 Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 2 Prof. Dr. Reiner Güttler Fachbereich GIS HTW

3 -2- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Red-Black-Trees  andere Form von höhenbalancierten Bäumen  rot/schwarz hat keine wirkliche Bedeutung, leicht/schwer, yin/yang oder positiv/negativ ginge auch.  In der Anwendung zur Veranschaulichung spiegelt jeweils der Rand! die Farbe wieder bzgl. red/black, nicht die Füllfarbe.  Wichtiger Unterschied zu AVL-Trees:  hier wird schon während des Einfügens bzw. Löschens eines Knotens rebalanciert

4 -3- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Definition der red/black-Regeln: 1.Jeder Knoten ist rot oder schwarz. 2.Die Wurzel ist immer schwarz. 3.Ist ein Knoten rot, so sind seine Söhne schwarz (Achtung: gilt nicht umgekehrt). 4.Jeder Pfad von der Wurzel zu einem Blatt enthält die gleiche Anzahl von schwarzen Knoten. 5.Alternativ zu 4: jeder Pfad von einem Knoten zu einem der Blätter seiner Unterbäume enthält die gleiche Anzahl an schwarzen Knoten. Bem. 5. Sagt aus, dass 4. für jeden Unterbaum gilt.

5 -4- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Definition:  Die Höhe eines Baums wird definiert durch das maximale Level eines Knotens.  Die Anzahl der schwarzen Knoten auf einem Pfad von Wurzel zu Blatt heisst „black-Höhe“. Beobachtung:  Für die Höhe h eines red-black trees mit n internen Knoten gilt h <= 2 log (n+1). (kann mathematisch bewiesen werden!). Was bedeutet das?

6 -5- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Folge:  Die Funktionen insert() und delete() laufen in O(log n), d.h. der Baum ist „einigermassen“ balanciert.  Wie bei AVL-trees können aber insert()- und delete()-Operationen die Balanceregeln verletzen, d.h. es müssen Operationen ausgeführt werden, um die Balance aufrecht zu erhalten.

7 -6- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Zur Verfügung stehende Operationen:  rb() ändert die Farbe eines Knotens, d.h. macht einen roten schwarz und einen schwarzen rot.  flip() findet nur Anwendung auf einen schwarzen Knoten mit 2 roten Söhnen. Der Knoten wird rot, die Söhne schwarz. (Dies sind 3 changeColor() in einem, die Funktion kann prinzipiell auch wegfallen).  ror() angewandt auf einen Knoten führt eine Rechtsrotation durch.  rol() angewandt auf einen Knoten führt eine Linksrotation durch.

8 -7- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Experimente jeweils mit Verfolgung der red/black-Regeln: 1.Folge 50, 25, 75. Dann insert(irgendwas)=> flip() notwendig. 2.50,25,75, bzw. 50,25,35: Rotationen, Doppelrotation, inside child, outside child 3.50,25,75,12,6 4.Wie „unbalanciert“ kann ein red/black-tree werden? Dazu 50,60,70,80,90,65,75,85,95 5.insert(): 50,25,75,12,6, rb(Vater), rb(Grossvater), dann Rotation 6.insert(): 50,25,75,12,18, rb(Knoten selbst), rb(Grossvater), dann Doppelrotation

9 -8- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Genauere Betrachtung: Wie wirken sich die Operationen aus? 1. flip():  flip() lässt die black-Höhe unverändert  macht eine Verletzung von Regel 3 durch insert() am Blatt unwahrscheinlicher (wird noch genauer definiert)  führt evtl. zu Verletzung von Regel von Regel 3 oberhalb: kann aber mit einer Rotation bzw. Doppelrotation verbunden mit rb() korrigiert werden (siehe bei 3.)

10 -9- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen 2. Rotationen nach erfolgtem insert(): Sei x der eingefügte Knoten, P sein Vater, G sein „Grossvater“ Es gibt 4 Möglichkeiten: Wie die Situation bzgl. der red/black-Regeln ist, hängt von den jeweiligen Farben ab. x P G x P G x P G x P G a)b)c)d)

11 -10- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Erstaunlicherweise gibt es nur 3 grundsätzliche Fälle (wg. Symmetrie und da x immer! rot ist): 1.P ist schwarz. 2.P ist rot und x ist ein „Aussenenkel“, a) und c). 3.P ist rot und x ist ein „Innenenkel“, b) und d). Fall 1: P ist schwarz.  Hier ist nichts zu tun, einfach insert() durchführen. Die evtl. erfolgten Operationen auf dem Weg von der Wurzel bis zu P haben dafür gesorgt, dass oberhalb alles „in Ordnung ist“.

12 -11- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Fall 2: P ist rot, x ist Aussenenkel. (G muss schwarz sein!)  rb(P), rb(G) und eine Rechtsrotation (Fall a)) bzw. Linksrotation (Fall b)) um G. Fall 3: P ist rot, x ist Innenenkel. (G muss schwarz sein!)  rb(x), rb(G) und  eine Linksrotation um P sowie Rechtsrotation um G (Fall b)) bzw. Rechtsrotation um P und Linksrotation um G (Fall d)). Andere Möglichkeiten?

13 -12- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen  x hat einen Bruder y.  Ist P schwarz, kein Problem.  Ist P rot, dann müsste y schwarz sein. Dann wäre aber Regel 4 verletzt. P kann also nicht rot sein und ein schwarzes Kind haben.  P hat einen Bruder u.  Ist P schwarz, kein Problem, nichts zu tun.  Ist P rot, dann muss u auch rot sein. Dann hätte aber bei G ein flip() stattgefunden, der Fall kann also nicht auftreten.

14 -13- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen 3. Rotationen auf dem Weg zu P  können auf Grund von flip()-Operationen auftreten (siehe Betrachtung von flip()).  2 Möglichkeiten wie in den Fällen 2 und 3, je nachdem, ob der Verursacher Aussenenkel oder Innenenkel ist. 3a) Betrachte die Folge: 50,25,75,12,37,6,18. Dabei flip()- Operationen bei 12 und 6. Jetzt: insert(3).  erfordert flip(12)  Führt zu Verletzung von Regel 3. Lösung: exakt wie bei Fall 2.

15 -14- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen 3b) Betrachte die Folge 50,25,75,12,37,31,43. Dabei flip()- Operationen bei 12 und 31. Jetzt: insert(28).  erfordert flip(37)  Führt zu Verletzung von Regel 3. Lösung: exakt wie bei Fall 3. Bem. Die notwendigen Operationen bei delete() sind etwas komplexer. Sie werden hier nicht betrachtet, da sie keine grundsätzlich neuen Erkenntnisse bringen.

16 -15- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Fazit für red/black-Trees:  Alle Grundoperationen (insert(), find(), delete()) laufen in O(log n).  Dies gilt auch für „vorsortierte“ Folgen.  Im Vergleich zu AVL-Trees sind weniger Operationen nach insert() notwendig. Auch insgesamt, d,h, inkl. der Operationen vor insert() sind red/black-Trees effizienter. Grund sind die vorbereitenden flip()- Operationen (kann mathematisch bewiesen werden!).  Red/black-Trees funktionieren auch ohne flip()-Operationen. Die Einbussen an Effizienz wirken sich nicht! auf die Grössenordnung (O()- Schreibweise) aus.  Bei Implementierungen genügt es, die Operationen zu implementieren. Die black-Höhe muss nicht mit implementiert werden, da die Operationen die Korrektheit von Regel 4 automatisch mit erfüllen.


Herunterladen ppt "Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 2 Prof. Dr. Reiner Güttler Fachbereich GIS HTW."

Ähnliche Präsentationen


Google-Anzeigen