Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Ähnliche Präsentationen


Präsentation zum Thema: "LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)"—  Präsentation transkript:

1 LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

2 LS 2 / Informatik 2 Datenstrukturen Problem Gegeben sind n Objekte O,.., O mit zugehörigen Schlüsseln s(O ) Operationen Suche(x); Ausgabe O mit Schlüssel s(O) =x; nil, falls kein Objekt mit Schlüssel x in Datenbank Einfügen(O); Einfügen von Objekt O in Datenbank Löschen(O); Löschen von Objekt O mit aus der Datenbank 1 n i

3 LS 2 / Informatik 3 Datenstrukturen Binäre Suchbäume Ausgabe aller Elemente in O(n) Suche, Minimum, Maximum, Nachfolger in O(h) Einfügen, Löschen in O(h) Frage Wie kann man eine kleine Höhe unter Einfügen und Löschen garantieren?

4 LS 2 / Informatik 4 Datenstrukturen AVL-Bäume [Adelson-Velsky und Landis] Ein Binärbaum heißt AVL-Baum, wenn für jeden Knoten gilt: Die Höhe seines linken und rechten Teilbaums unterscheidet sich höchstens um 1.

5 LS 2 / Informatik 5 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 h h+1

6 LS 2 / Informatik 6 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis a) n 2 -1: AVL-Baum ist Binärbaum h h+1

7 LS 2 / Informatik 7 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis a) n 2 -1: AVL-Baum ist Binärbaum Ein vollständiger Binärbaum hat eine maximale Anzahl Knoten unter allen Binärbäumen der Höhe h h h+1

8 LS 2 / Informatik 8 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis a) n 2 -1: AVL-Baum ist Binärbaum Ein vollständiger Binärbaum hat eine maximale Anzahl Knoten unter allen Binärbäumen der Höhe h N(h) = Anzahl Knoten eines vollständigen Binärbaums der Höhe h h h+1

9 LS 2 / Informatik 9 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis a) n 2 -1: N(h) = Anzahl Knoten eines vollständigen Binärbaums der Höhe h h h+1

10 LS 2 / Informatik 10 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis a) n 2 -1: N(h) = Anzahl Knoten eines vollständigen Binärbaums der Höhe h h h+1

11 LS 2 / Informatik 11 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: Beweis per Induktion über die Struktur von AVL-Bäumen h h+1 h

12 LS 2 / Informatik 12 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: Beweis per Induktion über die Struktur von AVL-Bäumen (I.A.) Wir betrachten alle AVL-Bäume der Höhe 0 und 1. h h+1 h

13 LS 2 / Informatik 13 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: Beweis per Induktion über die Struktur von AVL-Bäumen (I.A.) Wir betrachten alle AVL-Bäume der Höhe 0 und 1. h=0: Der Baum hat einen Knoten. Es gilt (3/2) =1 1. h h+1 h h

14 LS 2 / Informatik 14 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: Beweis per Induktion über die Struktur von AVL-Bäumen. (I.A.) Wir betrachten alle AVL-Bäume der Höhe 0 und 1. h=0: Der Baum hat einen Knoten. Es gilt (3/2) =1 1. h=1: Der Baum hat 2 oder 3 Knoten. Es gilt (3/2) = 3/ h h+1 h h h

15 LS 2 / Informatik 15 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: Beweis per Induktion über die Struktur von AVL-Bäumen. (I.A.) Wir betrachten alle AVL-Bäume der Höhe 0 und 1. h=0: Der Baum hat einen Knoten. Es gilt (3/2) =1 1. h=1: Der Baum hat 2 oder 3 Knoten. Es gilt (3/2) = 3/ h h+1 h h h

16 LS 2 / Informatik 16 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: (I.V.) Für jeden AVL-Baum der Höhe j, 0 j h, gilt der Satz. h h+1 h v v A A B B

17 LS 2 / Informatik 17 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: (I.V.) Für jeden AVL-Baum der Höhe j, 0 j h, gilt der Satz. (I.S.) Sei h1. Betrachte AVL-Baum T der Höhe h+1 mit Wurzel v. Seien A,B linker bzw. rechter Teilbaum von v. h h+1 h v v A A B B

18 LS 2 / Informatik 18 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: (I.V.) Für jeden AVL-Baum der Höhe j, 0 j h, gilt der Satz. (I.S.) Sei h1. Betrachte AVL-Baum T der Höhe h+1 mit Wurzel v. Seien A,B linker bzw. rechter Teilbaum von v. A oder B (oder beide) hat Tiefe h. h h+1 h v v A A B B

19 LS 2 / Informatik 19 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: (I.V.) Für jeden AVL-Baum der Höhe j, 0 j h, gilt der Satz. (I.S.) Sei h1. Betrachte AVL-Baum T der Höhe h+1 mit Wurzel v. Seien A,B linker bzw. rechter Teilbaum von v. A oder B (oder beide) hat Tiefe h. Wegen AVL-Eigenschaft haben A und B Tiefe mindestens h-10. h h+1 h v v A A B B

20 LS 2 / Informatik 20 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: (I.V.) Für jeden AVL-Baum der Höhe j, 0 j h, gilt der Satz. (I.S.) Sei h1. Betrachte AVL-Baum T der Höhe h+1 mit Wurzel v. Seien A,B linker bzw. rechter Teilbaum von v. A oder B (oder beide) hat Tiefe h. Wegen AVL-Eigenschaft haben A und B Tiefe mindestens h-10. h h+1 h v v A A B B

21 LS 2 / Informatik 21 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: Wegen AVL-Eigenschaft haben A und B Tiefe mindestens h-10. Da T ein AVL-Baum ist, sind auch A und B AVL-Bäume. h h+1 h v v A A B B

22 LS 2 / Informatik 22 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: Wegen AVL-Eigenschaft haben A und B Tiefe mindestens h-10. Da T ein AVL-Baum ist, sind auch A und B AVL-Bäume. Kann also (I.V.) anwenden, da A und B AVL-Bäume der Tiefe 0 sind h h+1 h v v A A B B

23 LS 2 / Informatik 23 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: Wegen AVL-Eigenschaft haben A und B Tiefe mindestens h-10. Da T ein AVL-Baum ist, sind auch A und B AVL-Bäume. Kann also (I.V.) anwenden, da A und B AVL-Bäume der Tiefe 0 sind Es gibt drei Fälle: 1) A,B haben Höhe h 2) A hat Höhe h und B Hat Höhe h-1 3) A hat Höhe h-1 und B hat Höhe h h h+1 h v v A A B B

24 LS 2 / Informatik 24 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: Sei T(h) die minimale Anzahl Knoten in einem AVL-Baum der Tiefe h. h h+1 h v v A A B B

25 LS 2 / Informatik 25 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: Sei T(h) die minimale Anzahl Knoten in einem AVL-Baum der Tiefe h. Nach (I.V.) gilt in allen drei Fällen h h+1 h v v A A B B

26 LS 2 / Informatik 26 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Beweis b) (3/2) n: Sei T(h) die minimale Anzahl Knoten in einem AVL-Baum der Tiefe h. Nach (I.V.) gilt in allen drei Fällen h h+1 h v v A A B B

27 LS 2 / Informatik 27 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Korollar 38 Ein AVL-Baum mit n Knoten hat Höhe (log n). h h+1

28 LS 2 / Informatik 28 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Korollar Ein AVL-Baum mit n Knoten hat Höhe (log n). Beweis (1) Zeige h=O(log n): Es gilt n (3/2) nach Satz h h+1 h

29 LS 2 / Informatik 29 Datenstrukturen Satz 38 Für jeden AVL-Baum der Höhe h0 mit n Knoten gilt: (3/2) n 2 -1 Korollar Ein AVL-Baum mit n Knoten hat Höhe (log n). Beweis (2) Zeige h= (log n): Es gilt n nach Satz h h+1

30 LS 2 / Informatik 30 Datenstrukturen Rotationen y y x x A A B B C C C C A A B B x x y y Rechtsrotation(T,y) Linksrotation(T,x)

31 LS 2 / Informatik 31 Datenstrukturen Beispiel y x y x Rechtsrotation(T,y)

32 LS 2 / Informatik 32 Datenstrukturen Beispiel x y Linksrotation(T,x) x y

33 LS 2 / Informatik 33 Datenstrukturen Linksrotation(T,x) 1. y rc[x] 2. rc[x] lc[y] 3. if lc[y] nil then p[lc[y]] x 4. p[y] p[x] 5. if p[x]=nil then root[T] y 6. else if x=lc[p[x]] then lc[p[x]] y 7. else rc[p[x]] y 8. lc[y] x 9. p[x] y

34 LS 2 / Informatik 34 Datenstrukturen Linksrotation(T,x) 1. y rc[x] 2. rc[x] lc[y] 3. if lc[y] nil then p[lc[y]] x 4. p[y] p[x] 5. if p[x]=nil then root[T] y 6. else if x=lc[p[x]] then lc[p[x]] y 7. else rc[p[x]] y 8. lc[y] x 9. p[x] y Annahme: x hat rechtes Kind.

35 LS 2 / Informatik 35 Datenstrukturen Linksrotation(T,x) 1. y rc[x] 2. rc[x] lc[y] 3. if lc[y] nil then p[lc[y]] x 4. p[y] p[x] 5. if p[x]=nil then root[T] y 6. else if x=lc[p[x]] then lc[p[x]] y 7. else rc[p[x]] y 8. lc[y] x 9. p[x] y Annahme: x hat rechtes Kind x

36 LS 2 / Informatik 36 Linksrotation(T,x) 1. y rc[x] 2. rc[x] lc[y] 3. if lc[y] nil then p[lc[y]] x 4. p[y] p[x] 5. if p[x]=nil then root[T] y 6. else if x=lc[p[x]] then lc[p[x]] y 7. else rc[p[x]] y 8. lc[y] x 9. p[x] y Datenstrukturen x y

37 LS 2 / Informatik 37 Linksrotation(T,x) 1. y rc[x] 2. rc[x] lc[y] 3. if lc[y] nil then p[lc[y]] x 4. p[y] p[x] 5. if p[x]=nil then root[T] y 6. else if x=lc[p[x]] then lc[p[x]] y 7. else rc[p[x]] y 8. lc[y] x 9. p[x] y Datenstrukturen x y

38 LS 2 / Informatik 38 Linksrotation(T,x) 1. y rc[x] 2. rc[x] lc[y] 3. if lc[y] nil then p[lc[y]] x 4. p[y] p[x] 5. if p[x]=nil then root[T] y 6. else if x=lc[p[x]] then lc[p[x]] y 7. else rc[p[x]] y 8. lc[y] x 9. p[x] y Datenstrukturen x y

39 LS 2 / Informatik 39 Linksrotation(T,x) 1. y rc[x] 2. rc[x] lc[y] 3. if lc[y] nil then p[lc[y]] x 4. p[y] p[x] 5. if p[x]=nil then root[T] y 6. else if x=lc[p[x]] then lc[p[x]] y 7. else rc[p[x]] y 8. lc[y] x 9. p[x] y Datenstrukturen x y nil

40 LS 2 / Informatik 40 Linksrotation(T,x) 1. y rc[x] 2. rc[x] lc[y] 3. if lc[y] nil then p[lc[y]] x 4. p[y] p[x] 5. if p[x]=nil then root[T] y 6. else if x=lc[p[x]] then lc[p[x]] y 7. else rc[p[x]] y 8. lc[y] x 9. p[x] y Datenstrukturen x y nil root[T]

41 LS 2 / Informatik 41 Linksrotation(T,x) 1. y rc[x] 2. rc[x] lc[y] 3. if lc[y] nil then p[lc[y]] x 4. p[y] p[x] 5. if p[x]=nil then root[T] y 6. else if x=lc[p[x]] then lc[p[x]] y 7. else rc[p[x]] y 8. lc[y] x 9. p[x] y Datenstrukturen x y nil root[T]

42 LS 2 / Informatik 42 Linksrotation(T,x) 1. y rc[x] 2. rc[x] lc[y] 3. if lc[y] nil then p[lc[y]] x 4. p[y] p[x] 5. if p[x]=nil then root[T] y 6. else if x=lc[p[x]] then lc[p[x]] y 7. else rc[p[x]] y 8. lc[y] x 9. p[x] y Datenstrukturen x y nil root[T]

43 LS 2 / Informatik 43 Linksrotation(T,x) 1. y rc[x] 2. rc[x] lc[y] 3. if lc[y] nil then p[lc[y]] x 4. p[y] p[x] 5. if p[x]=nil then root[T] y 6. else if x=lc[p[x]] then lc[p[x]] y 7. else rc[p[x]] y 8. lc[y] x 9. p[x] y Datenstrukturen x y nil root[T]

44 LS 2 / Informatik 44 Linksrotation(T,x) 1. y rc[x] 2. rc[x] lc[y] 3. if lc[y] nil then p[lc[y]] x 4. p[y] p[x] 5. if p[x]=nil then root[T] y 6. else if x=lc[p[x]] then lc[p[x]] y 7. else rc[p[x]] y 8. lc[y] x 9. p[x] y Datenstrukturen x y nil root[T]

45 LS 2 / Informatik 45 Datenstrukturen Dynamische AVL-Bäume Operationen Suche, Einfügen, Löschen, Min/Max, Vorgänger/Nachfolger,… wie in der letzten Vorlesung Laufzeit O(h) für diese Operationen Nur Einfügen/Löschen verändern Struktur des Baums Idee Wir brauchen Prozedur, um AVL-Eigenschaft nach Einfügen/Löschen wiederherzustellen.

46 LS 2 / Informatik 46 Datenstrukturen Dynamische AVL-Bäume Operationen Suche, Einfügen, Löschen, Min/Max, Vorgänger/Nachfolger,… wie in der letzten Vorlesung Laufzeit O(h) für diese Operationen Nur Einfügen/Löschen verändern Struktur des Baums Idee Wir brauchen Prozedur, um AVL-Eigenschaft nach Einfügen/Löschen wiederherzustellen. Nach Korollar gilt h = (log n)

47 LS 2 / Informatik 47 Datenstrukturen Definition Ein Baum heißt beinahe-AVL-Baum, wenn die AVL-Eigenschaft in jedem Knoten außer der Wurzel erfüllt ist und sich die Höhe der Unterbäume der Wurzel um höchstens 2 unterscheidet.

48 LS 2 / Informatik 48 Datenstrukturen Unterproblem Umformen eines beinahe-AVL-Baums in einen AVL-Baum mit Hilfe von Rotationen O.b.d.A.: Linker Teilbaum der Wurzel höher als der rechte

49 LS 2 / Informatik 49 Datenstrukturen Fall 1 y y x x A A B B C C h-1 h oder h-1 h

50 LS 2 / Informatik 50 Datenstrukturen Fall 1 y y x x A A B B C C h-1 h oder h-1 h h x x y y C C B B A A h oder h-1 Rechtsrotation(T,y)

51 LS 2 / Informatik 51 Datenstrukturen Fall 2 h-1 y y x x A A B B C C h

52 LS 2 / Informatik 52 Datenstrukturen Fall 2 h-1 y y x x A A B B C C h

53 LS 2 / Informatik 53 Datenstrukturen Fall 2 h-1 y y x x A A C C z z B B B B h-2 oder h-1

54 LS 2 / Informatik 54 Datenstrukturen Fall 2 h-1 y y x x A A C C z z B B B B h-2 oder h-1 h-1 h-2 oder h-1 y y C C z z B B x x A A B B Linksrotation(T,x) h-1

55 LS 2 / Informatik 55 Datenstrukturen Fall 2 h-1 h-2 oder h-1 y y C C z z B B x x A A h-1 B B h-2 oder h- 1 z z y y C C x x B B B B A A Rechtsrotation(T,y)

56 LS 2 / Informatik 56 Datenstrukturen Balance(T) 1. t root[T] 2. if h[lc[t]] > h[rc[t]]+1 then 3. if h[lc[lc[t]]]< h[rc[lc[t]]] then 4. Linksrotation(lc[t]) 5. Rechtsrotation(t) 6. else if h[rc[t]]> h[lc[t]]+1 then 7. if h[rc[rc[t]]]< h[lc[rc[t]] then 8. Rechtsrotation(rc[t]) 9. Linksrotation(t) y y x x A A B B C C h-1 h oder h-1 h

57 LS 2 / Informatik 57 Datenstrukturen Balance(T) 1. t root[T] 2. if h[lc[t]] > h[rc[t]]+1 then 3. if h[lc[lc[t]]]< h[rc[lc[t]]] then 4. Linksrotation(lc[t]) 5. Rechtsrotation(t) 6. else if h[rc[t]]> h[lc[t]]+1 then 7. if h[rc[rc[t]]]< h[lc[rc[t]] then 8. Rechtsrotation(rc[t]) 9. Linksrotation(t) y y x x A A B B C C h-1 h oder h-1 h

58 LS 2 / Informatik 58 Balance(T) 1. t root[T] 2. if h[lc[t]] > h[rc[t]]+1 then 3. if h[lc[lc[t]]]< h[rc[lc[t]]] then 4. Linksrotation(lc[t]) 5. Rechtsrotation(t) 6. else if h[rc[t]]> h[lc[t]]+1 then 7. if h[rc[rc[t]]]< h[lc[rc[t]] then 8. Rechtsrotation(rc[t]) 9. Linksrotation(t) Datenstrukturen y y x x A A B B C C h-1 h oder h-1 h h gibt Höhe des Teilbaums an. Dies müssen wir zusätzlich in unserer Datenstruktur aufrecht erhalten.

59 LS 2 / Informatik 59 Balance(T) 1. t root[T] 2. if h[lc[t]] > h[rc[t]]+1 then 3. if h[lc[lc[t]]]< h[rc[lc[t]]] then 4. Linksrotation(lc[t]) 5. Rechtsrotation(t) 6. else if h[rc[t]]> h[lc[t]]+1 then 7. if h[rc[rc[t]]]< h[lc[rc[t]] then 8. Rechtsrotation(rc[t]) 9. Linksrotation(t) Datenstrukturen y y x x A A B B C C h-1 h oder h-1 h

60 LS 2 / Informatik 60 Balance(T) 1. t root[T] 2. if h[lc[t]] > h[rc[t]]+1 then 3. if h[lc[lc[t]]]< h[rc[lc[t]]] then 4. Linksrotation(lc[t]) 5. Rechtsrotation(t) 6. else if h[rc[t]]> h[lc[t]]+1 then 7. if h[rc[rc[t]]]< h[lc[rc[t]] then 8. Rechtsrotation(rc[t]) 9. Linksrotation(t) Laufzeit: O(1) Datenstrukturen y y x x A A B B C C

61 LS 2 / Informatik 61 Kurze Zusammenfassung Wir können aus einem beinahe-AVL-Baum mit Hilfe von maximal 2 Rotationen einen AVL-Baum machen Dabei erhöht sich die Höhe des Baums nicht Einfügen Wir fügen ein wie früher Dann laufen wir den Pfad zur Wurzel zurück An jedem Knoten balancieren wir, falls der Unterbaum ein beinahe-AVL- Baum ist Datenstrukturen

62 LS 2 / Informatik 62 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2

63 LS 2 / Informatik 63 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2

64 LS 2 / Informatik 64 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2

65 LS 2 / Informatik 65 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2

66 LS 2 / Informatik 66 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2

67 LS 2 / Informatik 67 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2

68 LS 2 / Informatik 68 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2

69 LS 2 / Informatik 69 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2 nil

70 LS 2 / Informatik 70 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2 Neuen Knoten erzeugen. Zusätzlich noch Zeiger lc[t] und rc[t] auf nil setzen, sowie p[t] und den Zeiger von p[t] setzen. 2

71 LS 2 / Informatik 71 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2 2

72 LS 2 / Informatik 72 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2 2

73 LS 2 / Informatik 73 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2 2

74 LS 2 / Informatik 74 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2 2

75 LS 2 / Informatik 75 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2 2

76 LS 2 / Informatik 76 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Datenstrukturen Einfügen 2 2

77 LS 2 / Informatik 77 AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) Laufzeit O(h) = O(log n) Datenstrukturen Einfügen 2 2

78 LS 2 / Informatik 78 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1.

79 LS 2 / Informatik 79 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1. Beweis Induktion über die Höhe des Baumes. (I.A.): Für Bäume der Höhe -1 und 0 ist die Aussage korrekt. AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t)

80 LS 2 / Informatik 80 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1. Beweis Induktion über die Höhe des Baumes. (I.A.): Für Bäume der Höhe -1 und 0 ist die Aussage korrekt. (I.V.): Der Satz gilt für Bäume der Höhe j, -1jh. AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t)

81 LS 2 / Informatik 81 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1. Beweis Induktion über die Höhe des Baumes. (I.A.): Für Bäume der Höhe -1 und 0 ist die Aussage korrekt. (I.V.): Der Satz gilt für Bäume der Höhe j, -1jh. (I.S.): Betrachte den Aufruf von AVL-Einfügen in einem AVL-Baum der Höhe h+10. AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t)

82 LS 2 / Informatik 82 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1. Beweis Induktion über die Höhe des Baumes. (I.A.): Für Bäume der Höhe -1 und 0 ist die Aussage korrekt. (I.V.): Der Satz gilt für Bäume der Höhe j, -1jh. (I.S.): Betrachte den Aufruf von AVL-Einfügen in einem AVL-Baum der Höhe h+10. Sei o.b.d.A. key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t)

83 LS 2 / Informatik 83 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1. Beweis Induktion über die Höhe des Baumes. (I.A.): Für Bäume der Höhe -1 und 0 ist die Aussage korrekt. (I.V.): Der Satz gilt für Bäume der Höhe j, -1jh. (I.S.): Betrachte den Aufruf von AVL-Einfügen in einem AVL-Baum der Höhe h+10. Sei o.b.d.A. key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t)

84 LS 2 / Informatik 84 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1. Beweis Induktion über die Höhe des Baumes. (I.A.): Für Bäume der Höhe -1 und 0 ist die Aussage korrekt. (I.V.): Der Satz gilt für Bäume der Höhe j, -1jh. (I.S.): Betrachte den Aufruf von AVL-Einfügen in einem AVL-Baum der Höhe h+10. Sei o.b.d.A. key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t)

85 LS 2 / Informatik 85 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1. Beweis Nach (I.V.) ist der Baum lc[t] nach Einfügen ein AVL-Baum mit Höhe r oder r+1, wobei r die Höhe vor dem Einfügen war. AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t)

86 LS 2 / Informatik 86 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1. Beweis Nach (I.V.) ist der Baum lc[t] nach Einfügen ein AVL-Baum mit Höhe r oder r+1, wobei r die Höhe vor dem Einfügen war. Hat lc[t] nach dem Einfügen Höhe h oder h-1, so ist t ein AVL-Baum. AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t)

87 LS 2 / Informatik 87 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1. Beweis Nach (I.V.) ist der Baum lc[t] nach Einfügen ein AVL-Baum mit Höhe r oder r+1, wobei r die Höhe vor dem Einfügen war. Hat lc[t] nach dem Einfügen Höhe h oder h-1, so ist t ein AVL-Baum. Hat lc[t] nach dem Einfügen Höhe h+1, so ist t u.U. ein beinahe-AVL- Baum. AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t)

88 LS 2 / Informatik 88 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1. Beweis Nach (I.V.) ist der Baum lc[t] nach Einfügen ein AVL-Baum mit Höhe r oder r+1, wobei r die Höhe vor dem Einfügen war. Hat lc[t] nach dem Einfügen Höhe h oder h-1, so ist t ein AVL-Baum. Hat lc[t] nach dem Einfügen Höhe h+1, so ist t u.U. ein beinahe-AVL- Baum. Dies wird durch in Zeile 7 durch Balance korrigiert. AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t)

89 LS 2 / Informatik 89 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1. Beweis Nach (I.V.) ist der Baum lc[t] nach Einfügen ein AVL-Baum mit Höhe r oder r+1, wobei r die Höhe vor dem Einfügen war. Hat lc[t] nach dem Einfügen Höhe h oder h-1, so ist t ein AVL-Baum. Hat lc[t] nach dem Einfügen Höhe h+1, so ist t u.U. ein beinahe-AVL- Baum. Dies wird durch in Zeile 7 durch Balance korrigiert. Außerdem erhöht Balance die Höhe nicht und verringert sie maximal um 1. AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t)

90 LS 2 / Informatik 90 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1. Beweis Nach (I.V.) ist der Baum lc[t] nach Einfügen ein AVL-Baum mit Höhe r oder r+1, wobei r die Höhe vor dem Einfügen war. Hat lc[t] nach dem Einfügen Höhe h oder h-1, so ist t ein AVL-Baum. Hat lc[t] nach dem Einfügen Höhe h+1, so ist t u.U. ein beinahe-AVL- Baum. Dies wird durch in Zeile 7 durch Balance korrigiert. Außerdem erhöht Balance die Höhe nicht und verringert sie maximal um 1. Also hat der Baum nach dem Einfügen Höhe h+1 oder h+2. AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t)

91 LS 2 / Informatik 91 Datenstrukturen Satz 39 Wird mit AVL-Einfügen ein Element in einen AVL-Baum der Höhe h eingefügt, so ist der resultierende Baum ein AVL-Baum der Höhe h oder h+1. Beweis Nach (I.V.) ist der Baum lc[t] nach Einfügen ein AVL-Baum mit Höhe r oder r+1, wobei r die Höhe vor dem Einfügen war. Hat lc[t] nach dem Einfügen Höhe h oder h-1, so ist t ein AVL-Baum. Hat lc[t] nach dem Einfügen Höhe h+1, so ist t u.U. ein beinahe-AVL- Baum. Dies wird durch in Zeile 7 durch Balance korrigiert. Außerdem erhöht Balance die Höhe nicht und verringert sie maximal um 1. Also hat der Baum nach dem Einfügen Höhe h+1 oder h+2. AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t) AVL-Einfügen(t,x) 1. if t=nil then 2. t new node(x); h[t] 0 ; return 3. else if key[x]key[t] then AVL-Einfügen(rc[t],x) 5. else return Schlüssel schon vorhanden 6. h[t] 1 + max{h[lc[t]], h[rc[t]]} 7. Balance(t)

92 LS 2 / Informatik 92 Datenstrukturen AVL-Löschen(t,x) 1. if xkey then AVL-Löschen(rc[t],x) 3. else if t=nil then return x nicht im Baum 4. else if lc[t]=nil then ersetze t durch rc[t] 5. else if rc[t]=nil then ersetze t durch lc[t] 6. else u=MaximumSuche(lc[t]) 7. Kopiere Informationen von u nach t 8. AVL-Löschen(key[u],lc[t]) 9. h[t] = 1 + max{h[lc[t]], h[rc[t]]} 10. Balance(t)

93 LS 2 / Informatik 93 Datenstrukturen AVL-Löschen(t,x) 1. if xkey then AVL-Löschen(rc[t],x) 3. else if t=nil then return x nicht im Baum 4. else if lc[t]=nil then ersetze t durch rc[t] 5. else if rc[t]=nil then ersetze t durch lc[t] 6. else u=MaximumSuche(lc[t]) 7. Kopiere Informationen von u nach t 8. AVL-Löschen(key[u],lc[t]) 9. h[t] = 1 + max{h[lc[t]], h[rc[t]]} 10. Balance(t) Löschen(3) x bezeichnet Schlüssel des zu löschenden Elements.

94 LS 2 / Informatik 94 AVL-Löschen(t,x) 1. if xkey then AVL-Löschen(rc[t],x) 3. else if t=nil then return x nicht im Baum 4. else if lc[t]=nil then ersetze t durch rc[t] 5. else if rc[t]=nil then ersetze t durch lc[t] 6. else u=MaximumSuche(lc[t]) 7. Kopiere Informationen von u nach t 8. AVL-Löschen(key[u],lc[t]) 9. h[t] = 1 + max{h[lc[t]], h[rc[t]]} 10. Balance(t) Datenstrukturen Löschen(3)

95 LS 2 / Informatik 95 AVL-Löschen(t,x) 1. if xkey then AVL-Löschen(rc[t],x) 3. else if t=nil then return x nicht im Baum 4. else if lc[t]=nil then ersetze t durch rc[t] 5. else if rc[t]=nil then ersetze t durch lc[t] 6. else u=MaximumSuche(lc[t]) 7. Kopiere Informationen von u nach t 8. AVL-Löschen(key[u],lc[t]) 9. h[t] = 1 + max{h[lc[t]], h[rc[t]]} 10. Balance(t) Datenstrukturen Löschen(3)

96 LS 2 / Informatik 96 AVL-Löschen(t,x) 1. if xkey then AVL-Löschen(rc[t],x) 3. else if t=nil then return x nicht im Baum 4. else if lc[t]=nil then ersetze t durch rc[t] 5. else if rc[t]=nil then ersetze t durch lc[t] 6. else u=MaximumSuche(lc[t]) 7. Kopiere Informationen von u nach t 8. AVL-Löschen(key[u],lc[t]) 9. h[t] = 1 + max{h[lc[t]], h[rc[t]]} 10. Balance(t) Datenstrukturen Löschen(3) Und die anderen Zeiger aktualisieren nil

97 LS 2 / Informatik 97 AVL-Löschen(t,x) 1. if xkey then AVL-Löschen(rc[t],x) 3. else if t=nil then return x nicht im Baum 4. else if lc[t]=nil then ersetze t durch rc[t] 5. else if rc[t]=nil then ersetze t durch lc[t] 6. else u=MaximumSuche(lc[t]) 7. Kopiere Informationen von u nach t 8. AVL-Löschen(key[u],lc[t]) 9. h[t] = 1 + max{h[lc[t]], h[rc[t]]} 10. Balance(t) Datenstrukturen Löschen(3) nil

98 LS 2 / Informatik 98 AVL-Löschen(t,x) 1. if xkey then AVL-Löschen(rc[t],x) 3. else if t=nil then return x nicht im Baum 4. else if lc[t]=nil then ersetze t durch rc[t] 5. else if rc[t]=nil then ersetze t durch lc[t] 6. else u=MaximumSuche(lc[t]) 7. Kopiere Informationen von u nach t 8. AVL-Löschen(key[u],lc[t]) 9. h[t] = 1 + max{h[lc[t]], h[rc[t]]} 10. Balance(t) Datenstrukturen Löschen(3) nil Nichts zu tun, da Baum leer.

99 LS 2 / Informatik 99 AVL-Löschen(t,x) 1. if xkey then AVL-Löschen(rc[t],x) 3. else if t=nil then return x nicht im Baum 4. else if lc[t]=nil then ersetze t durch rc[t] 5. else if rc[t]=nil then ersetze t durch lc[t] 6. else u=MaximumSuche(lc[t]) 7. Kopiere Informationen von u nach t 8. AVL-Löschen(key[u],lc[t]) 9. h[t] = 1 + max{h[lc[t]], h[rc[t]]} 10. Balance(t) Datenstrukturen Löschen(3)

100 LS 2 / Informatik 100 AVL-Löschen(t,x) 1. if xkey then AVL-Löschen(rc[t],x) 3. else if t=nil then return x nicht im Baum 4. else if lc[t]=nil then ersetze t durch rc[t] 5. else if rc[t]=nil then ersetze t durch lc[t] 6. else u=MaximumSuche(lc[t]) 7. Kopiere Informationen von u nach t 8. AVL-Löschen(key[u],lc[t]) 9. h[t] = 1 + max{h[lc[t]], h[rc[t]]} 10. Balance(t) Datenstrukturen Löschen(3)

101 LS 2 / Informatik 101 AVL-Löschen(t,x) 1. if xkey then AVL-Löschen(rc[t],x) 3. else if t=nil then return x nicht im Baum 4. else if lc[t]=nil then ersetze t durch rc[t] 5. else if rc[t]=nil then ersetze t durch lc[t] 6. else u=MaximumSuche(lc[t]) 7. Kopiere Informationen von u nach t 8. AVL-Löschen(key[u],lc[t]) 9. h[t] = 1 + max{h[lc[t]], h[rc[t]]} 10. Balance(t) Datenstrukturen Löschen(3)

102 LS 2 / Informatik 102 Korrektheit: Ähnlich wie beim Einfügen Satz 40: Mit Hilfe von AVL-Bäumen kann man Suche, Einfügen, Löschen, Minimum und Maximum in einer Menge von n Zahlen in (log n) Laufzeit durchführen. Datenstrukturen

103 LS 2 / Informatik 103 Zusammenfassung und Ausblick Effiziente Datenstruktur für das Datenbank Problem mit Hilfe von Suchbäumen Kann man eine bessere Datenstruktur finden? Was muss man ggf. anders machen? Datenstrukturen


Herunterladen ppt "LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)"

Ähnliche Präsentationen


Google-Anzeigen