Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


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

1

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

3 -2- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen 3.1 Balancierte Bäume Beobachtungen:  Offensichtlich hängt die genaue Laufzeit der Operationen (im Mittel und im schlechtesten Fall) davon ab, wie lang die Suchwege sind, d.h. wie viele Levels der Baum hat.  Offensichtlich ist es am besten, wenn der Baum balanciert ist, d.h. wenn alle Wege von der Wurzel (fast) gleich lang sind (genau gleich lang geht nur, wenn der Baum ?? Knoten enthält).  Höhenbalancierte Bäume (AVL-trees, red-black-trees)  Die Feststellung, dass dies optimal ist, macht eine nicht immer zutreffende "Vorannahme": dass nämlich alle Knoten mit gleicher Wahrscheinlichkeit zugegriffen werden.  Dies ist nicht immer der Fall. Sind die Zugriffswahrscheinlichkeiten (man kann z.B. auch Häufigkeiten nehmen) stark unterschiedlich, so kann ein nicht höhenbalancierter Baum evtl. „besser“ sein als ein höhenbalancierter.

4 -3- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen  Lösung: den Baum mehr im Sinne dieser Wahrscheinlichkeiten zu balancieren  weight-balanced trees und ähnliche.  Wie kann man in einem Baum, in dem jeder Knoten x neben seinem key auch noch eine Zugriffswahrscheinlichkeit w(x) hat, die mittlere Zugriffszeit bestimmen?  Lösung: Man summiert über alle Knoten x des Baums die Werte w(x)*(level(x) + 1). Voraussetzung: die w(x) sind wirklich Wahrscheinlichkeiten, also die Summe aller w(x) ergibt 1. Nimmt man Häufigkeiten, so ergibt sich die mittlere Zugriffszeit wie??  Weiteres Problem: Einfügeoperationen und Löschoperationen können die Balanciertheit stören, da ja der Einfügeplatz von der binäre-Suchbaum-Eigenschaft bestimmt wird. Es muss also evtl. nach einer solchen Operation wieder "ausbalanciert" werden (bzgl. des Blance-Kriteriums).

5 -4- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen AVL-trees Voraussetzung:  Zugriffswahrscheinlichkeiten gleich verteilt Grundidee:  Wir halten den binären Suchbaum zu jedem Zeitpunkt so balanciert wie möglich, indem wir ihn bei jedem Einfügen „Rebalancieren“, wenn nötig. Problem:  Das Rebalancieren kann manchmal O(n) Operationen benötigen (siehe Tafelbeispiel) Gesucht: ein Baum, bei dem sowohl find() als auch (insert() in Zeit O(log n) laufen.

6 -5- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Lösung: AVL-trees, benannt nach den russ. Mathematikern Adelson-Velski und Landis  AVL-trees sind fast, aber nicht vollständig balanciert.  Find() und insert() benötigen nur O(log n) Operationen. Definition:  Sei die Höhe (height) eines Baums das grösste im Baum vorkommende Niveau eines Knotens (die Länge des längsten Pfades von der Wurzel zu einem Blatt des Baums, -1 für den „leeren“ Baum).  Ein Knoten x hat die AVL-Eigenschaft, wenn die Höhen des linken und rechten Unterbaums gleich sind, oder um höchstens 1 differieren.  Ein binärer Suchbaum T ist ein AVL-tree, wenn alle Knoten x des Baums T die AVL-Eigenschaft haben.

7 -6- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen AVL-trees?

8 -7- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Was fehlt:  Welche Rebalancierungsmechanismen stehen zur Verfügung?  Wann setze ich welche ein?  Nachweis, dass alle evtl. notwendigen Rebalancierungsoperationen nach einem insert() in O(log n) möglich sind. Ideen (unter der Voraussetzung, dass jede Rebalancierungsoperation O(1) Aufwand verursacht) ?

9 -8- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Rebalancierungsmechanismen:  Einfache Rechtsrotation  Einfache Linksrotation  Doppelrotation rechts  Doppelrotation links Wir werden sehen, dass wir die Doppelrotationen jeweils auch als eine Folge von zwei einfachen Rotationen definieren können. Zentrale Forderung:  Natürlich müssen alle Rebalancierungsmechanismen die „binäre-Suchbaum-Eigenschaft“ erhalten!!

10 -9- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Einfache Rechtsrotation: B A T1T1 T2T2 T3T3 AB T1T1 T2T2 T3T3

11 -10- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Einfache Linksrotation: B A T1T1 T2T2 T3T3 A B T1T1 T2T2 T3T3

12 -11- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Doppelrotation rechts: C A T1T1 T2T2 T4T4 T3T3 B B C T3T3 T4T4 A T1T1 T2T2

13 -12- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Doppelrotation links: AC T1T1 T2T2 T4T4 T3T3 BB C T3T3 T4T4 A T1T1 T2T2

14 -13- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Fragen:  Aus welchen „Einzelrotationen“ setzen sich die Doppelrotationen zusammen?  Wieso kann ein durch ein insert() aus der Balance gebrachter AVL-tree in O(log n) wieder rebalanciert werden (und dadurch das ganze insert() in O(log n) laufen) ? Aufgabe (Selbststudium): Geben sie in Pseudocode alle evtl. auftretenden Fälle von „Debalancierungen durch insert()“ mit den jeweils zugehörigen Rebalancierungen an.


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

Ähnliche Präsentationen


Google-Anzeigen