Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


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

1

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

3 -2- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen 3.2 gewichtsbalancierte Bäume Motivation: wenn die einzelnen Knoten eines Baums mit stark unterschiedlicher Häufigkeit (Wahrscheinlichkeit) zugegriffen werden, verlieren die höhenbalancierten Bäume ihre Effizienz.  Im nachfolgenden Beispiel sind Häufigkeiten angegeben.  Wie wird die mittlere Suchzeit berechnet unter der Voraussetzung, dass nur die Knotenbesuche gezählt werden? Dazu Beispiel 1.

4 -3- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Mittlere Suchzeit: (100*3+1*2+100*3+1*1+100*3+1*2+100*3)/403= 1205/403=2,99 100 a 1 b c 1 d e 1 f g

5 -4- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Alternative: Mittlere Suchzeit: (100*2+1*3+100*1+1*3+100*2+1*4+100*3)/403= 810/403=2,009 100 a 1 b c 1 d e 1 f g

6 -5- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Beispiel 2 Mittlere Suchzeit: (100*3+1*2+1*3+1*1+1*3+1*2+1*3)/106= 312/106=2,94 100 a 1 b 1 c 1 d 1 e 1 f 1 g

7 -6- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Alternative: Mittlere Suchzeit: (100*1+1*2+1*3+1*4+1*5+1*6+1*7)/106= 127/106=1,198 100 a 1 b 1 c 1 d 1 e 1 f 1 g

8 -7- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen 100 11 1

9 -8- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Lösung: weight balanced trees, gewichtsbalancierte Bäume Theoretisch: es ist möglich, für eine gegebene Folge von n Datenelementen mit gegebenem „weight“ (z.B. Häufigkeit, Wahrscheinlichkeit) einen Baum zu konstruieren, der optimal bzgl. der mittleren Suchzeit ist (Ergebnis von D. KNUTH 1971). Problem: Konstruktion sehr platz- und zeitaufwändig (O(n 2 )) Deshalb: Suche nach „schnellen“ Algorithmen, die „sehr gute“, wenn auch nicht optimale Bäume erzeugen. Ergebnis: Es gibt mehrere Varianten davon.

10 -9- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen für alle gilt:  Sie laufen in O(n) (n Anzahl der Knoten).  Sie produzieren Bäume, deren mittlere Suchzeit „sehr gut“ ist.  Sie produzieren Bäume, die auch bzgl. des worst- case-Verhaltens (was heisst das?) sehr gut sind.  Keine der Varianten ist in beiderlei Hinsicht die beste.  Die Unterschiede sind sehr gering (gleich bzgl. der O()-Schreibweise, d.h.ohnehin nur bzgl. der Konstanten und auch da sehr gering).

11 -10- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen  Alle diese Aussagen sind durch vielfältige wissenschaftliche Untersuchungen bewiesen.  Wir behandeln deshalb nur die Algorithmen selbst, untersuchen aber nicht die Komplexität Im folgenden: Sei G(x) für einen Baum T mit Wurzel x die Summe der Gewichte aller seiner Knoten, lt(x) sei die Gesamtheit der Knoten des linken Unterbaums, rt(x) analog für rechts (das brauchen wir wegen des top-down-Vorgehens!) Algorithmus I (weight balanced): Wähle die Wurzel x so, dass sich die Gewichte des linken und rechten Unterbaums so wenig wie möglich unterscheiden, also „minimiere abs(G(lt(x)-G(rt(x))“. Verfahre ebenso auf den Unterbäumen.

12 -11- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Der Algorithmus liefert einigermassen gute Ergebnisse, hat aber ein spezielles Problem. Welches? „Schlechtes“ Beispiel? Algorithmus II (min-max): Wähle die Wurzel so, dass das Maximum der Gewichte der beiden Unterbäume minimal ist, d.h. minimiere max(G(lt(x)),G(rt(x))). Verfahre rekursiv auf den Unterbäumen. Beide Regeln wählen Wurzeln, die in der Nähe der „Mitte“ der Gewichtsverteilung liegen. Daher der Grundgedanke, dies formal als Auswahlkriterium für die Wurzel zu wählen mit rekursiver Anwendung auf die Unterbäume.

13 -12- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Algorithmus III (Bisection): Dazu muss definiert werden: G‘(lt(x)) = G(lt(x)) + ½ G(x).) Sie y Vorgänger von x bzgl. des Ordnungskriteriums. Wähle die Wurzel so, dass G‘(lt(y)) =½Gesamtgewicht Verfahre rekursiv auf den Unterbäumen.

14 -13- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Beispiele: Beachte : allen Anwendungen liegt zu Grunde, dass natürlich immer die „binäre-Suchbaum-Eigenschaft“ erhalten bleiben muss. 1.Beispiel: Die gegebene Folge von Beispiel 1. Also a(100),b(1),c(100),d(1),e(100),f(1),g(100) a) Anwendung von Algorithmus 1: ?? b) Anwendung von min-max: Wir listen für alle Knoten x jeweils max(G(lt(x)), G(rt(x))): a: G(lt(x))=0, G(rt(x))=303, also 303 b: max(100, 302), also 302 c: max(101,202), also 202

15 -14- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen d: max(201,201), also 201 e: max(202,101), also 202 f: max(302,100), also 302 g: max(303,0), also 303 Folge: d wird Wurzel. Linker Unterbaum: a: max(0,101), also 101 b: max(100,100), also 100 c:max(101,0) Folge: b wird Wurzel Wir sehen, wohin das führt.

16 -15- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen c) Anwendung von bisection. Gesamtgewicht= 403, ½ Gesamtgewicht also 201,5 Wir sehen sofort, dass a und b keine Chance haben, alsoweiter bei c. c: G‘(b)=100,5, G‘( c)= 151, also c nicht Wurzel d: G‘( c)= 151, G‘(d)=201,5 e: G‘(d)= 201,5, G‘(e)=251 Folge: d oder e können Wurzel werden. Somit scheint bisection am besten (sofern man das Unentschieden“ richtig auflöst). Aber: die Folge ist „akademisch“.

17 -16- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Ändert man nur ein klein wenig, so verhalten sich die Algorithmen viel „vernünftiger“. 2. Beispiel: die Folge a(100),b(2),c(100),d(1),e(100),f(1),g(99) liefert als Ergebnis den „guten“ Baum unserer Alternative. 3. Beispiel: a(10),b(8),c(1),d(2),e(6),f(40),g(2), also ohne einen „dicken“ Knoten in der Nähe der Mitte Weight-balanced:? Min-max:? Bisection:?

18 -17- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen 4. Beispiel: 15 Angaben aus der Hörerschaft mit Anwendung an der Tafel. Dies wird deutlicher, wenn die Beispiele „normaler“ werden, allerdings immer noch mit deutlich unterschiedlichen Häufigkeiten. Empirische Anwendung (z.B. auf das Publikum einer Hochschulbibliothek mit stark unterschiedlich häufig vorkommenden Namen) zeigte  Natürlich: die theoretischen Ergebnisse zeigen sich auch in der Praxis  Min-max ist empirisch am besten.


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

Ähnliche Präsentationen


Google-Anzeigen