• Keine Ergebnisse gefunden

Balancierte bin¨ are Suchb¨ aume

N/A
N/A
Protected

Academic year: 2022

Aktie "Balancierte bin¨ are Suchb¨ aume"

Copied!
5
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Dynamische Mengen

Einedynamische Mengeist eine Datenstruktur, die eine Menge von Objekten verwaltet.

Jedes Objektxtr¨agt einen eindeutigen Schl¨usselkey[x].

Die Datenstruktur soll mindestens die folgenden Operationen anbieten:

• Search(S, k) testet, ob ein Elementxmitkey[x] =kinS vorhanden ist, und liefert es ggf. zur¨uck.

• Insert(S, x) f¨ugt Element xinS ein.

• Delete(S, x) entfernt ElementxausS.

Die folgenden Operationen werden manchmal noch angeboten, falls es auf den Schl¨usseln eine totale Ordnung gibt.

• Minimum(S) undMaximum(S) liefern das Element mit minimalem bzw.

maximalem Schl¨ussel zur¨uck.

• Successor(S, x) liefert dasjenige ElementyinS zur¨uck, dessen Schl¨ussel minimal unter denjenigen mitkey[y]>key[x] ist. Dual dazu ist

Predecessor(S, x).

Jan Johannsen Effiziente Algorithmen 47

Realisierungen durch B¨ aume

Dynamische Mengen k¨onnen durchbin¨are Suchb¨aumerealisiert werden.

Notation f¨ur bin¨are B¨aume:

• Wurzel des BaumesT gespeichert inroot[T].

• Jeder Knotenxhat Zeiger auf die S¨ohneleft[x] undright[x], sowie auf den Vaterp[x] (ggf.nil).

Die Operationen

• Tree-Search(T, k)

• Tree-Insert(T, x)

• Tree-Delete(T, x)

• Tree-Minimum(T) undTree-Maximum(T)

• Tree-Successor(T, x) undTree-Predecessor(T, x)

haben s¨amtlich eine Laufzeit vonO(h), wobeih die Tiefe des BaumesT ist.

(2)

Balancierte bin¨ are Suchb¨ aume

Damit die Operationen auf bin¨aren Suchb¨aumen effizient sind, sollten diese balanciert sein, d.h. die H¨ohe eines Baumes mitnKnoten istO(logn).

Bekanntes Beispiel balancierter Suchb¨aume:AVL-B¨aume Balancieren erfolgt durch Rotationsoperationen:

OperationRotate-Right(T, x)

γ y

x β α

α β

γ y

x

Dual dazu (←) wirktRotate-Left(T, y).

Jan Johannsen Effiziente Algorithmen 49

Rot-Schwarz-B¨ aume

Rot-Schwarz-B¨aume:bin¨are Suchb¨aume mit zus¨atzlicher Struktur, die daf¨ur sorgt, dass diese balanciert sind, also die H¨ohe h¨ochstensO(logn) ist.

Jeder Knoten wird als innerer Knoten aufgefasst, Bl¨atter sind zus¨atzliche, leere Knoten (W¨achter).

Knoten haben ein zus¨atzliches Feldcolor[x], mit den Wertenredundblack. Wir sprechen von rotenundschwarzenKnoten.

Rot-Schwarz-Eigenschaft:

1. Die Wurzel und alle Bl¨atter sind schwarz.

2. Beide S¨ohne eines roten Knotens sind schwarz.

3. F¨ur jeden Knotenx gilt:

jeder Pfad vonxzu einem Blatt enth¨alt gleich viele schwarze Knoten.

(3)

Eigenschaften von Rot-Schwarz-B¨ aumen

Wir zeigen, dass Rot-Schwarz-B¨aume balanciert sind:

Satz:

Die H¨ohe eines Rot-Schwarz-Baums mitninneren Knoten ist h¨ochstens 2 log2(n+ 1).

Daraus folgt:

Die OperationenTree-Search,Tree-Minimum,Tree-Maximum, Tree-Successorund Tree-Predecessorben¨otigen f¨ur

Rot-Schwarz-B¨aumeO(logn) Operationen.

Auch Tree-InsertundTree-Deletelaufen auf Rot-Schwarz-B¨aumen in Zeit O(logn), erhalten aber nicht die Rot-Schwarz-Eigenschaft.

; F¨ur diese ben¨otigen wir spezielle Einf¨uge- und L¨oschoperationen.

Jan Johannsen Effiziente Algorithmen 51

Einf¨ ugen in einen Rot-Schwarz-Baum

Neuer Knotenxwird mitTree-Insert eingef¨ugt und rotgef¨arbt.

Problem:Vaterp[x] kann auch rot sein ; Eigenschaft 2 verletzt.

Diese Inkonsistenz wird in einer Schleife durch lokale ¨Anderungen im Baum nach oben geschoben:

• Fall 1:p[x] =left[p[p[x]]]:

– Betrachte x’ Onkely=right[p[p[x]]].

– Fall 1.1:y ist rot. Dann f¨arbep[x] und yschwarz, undp[p[x]] rot.

Aber:p[p[p[x]]] kann rot sein ; Inkonsistenz weiter oben.

– Fall 1.2:y ist schwarz, undx=left[p[x]]. Dann wirdp[x] schwarz und p[p[x]] rot gef¨arbt, und anschliessend ump[p[x]] nach rechts rotiert.

; keine Inkonsistenz mehr.

– Fall 1.3:y ist schwarz, undx=right[p[x]]. Wird durch eine Linksrotation ump[x] auf Fall 1.2 zur¨uckgef¨uhrt.

• Fall 2:p[x] =right[p[p[x]]] ist symmetrisch.

(4)

Einf¨ ugen in einen Rot-Schwarz-Baum

Am Ende wird die Wurzelroot[T] schwarz gef¨arbt.

Bemerke:

• In den F¨allen 1.2 und 1.3 bricht die Schleife sofort ab.

• Schleife wird nur im Fall 1.1 wiederholt, dann ist die Tiefe vonxkleiner geworden.

• Rotationen werden nur in 1.2 und 1.3 durchgef¨uhrt.

;Laufzeit istO(logn), und es werden h¨ochstens 2 Rotationen durchgef¨uhrt.

Jan Johannsen Effiziente Algorithmen 53

L¨ oschen aus einem Rot-Schwarz-Baum

Zu l¨oschender Knotenz wird mitTree-Delete(T, z) gel¨oscht.

Erinnerung:Tree-Delete(T, z) entfernt einen Knoteny, der h¨ochstens einen (inneren) Sohn hat.

• Hatzh¨ochstens einen Sohn, so isty=z.

• Andernfallsy←Tree-Successor(T, z).

Problem:Wenn der entfernte Knoteny schwarz war, ist Eigenschaft 3 verletzt.

Intuition:der (einzige) Sohnx vony erbt dessen schwarze Farbe, und ist jetzt

“doppelt schwarz”.

Das zus¨atzliche Schwarz wird in einer Schleife durch lokale ¨Anderungen im Baum nach oben geschoben.

(5)

L¨ oschen aus einem Rot-Schwarz-Baum

• Istx rot, so wird es schwarz gef¨arbt, und die Schleife bricht ab.

Andernfalls unterscheide zwei F¨alle:

• Fall 1:x=left[p[x]].

– Betrachte x’ Bruderw=right[p[x]]6=nil, und unterscheide 2 F¨alle:

– Fall 1.1:w ist rot. Dann mussp[x] schwarz sein, also f¨arbep[x] rot, w schwarz und rotiere links ump[x]

; reduziert auf Fall 1.2.

– Fall 1.2:w ist schwarz. Es gibt drei weitere F¨alle:

∗ Fall 1.2.1: Beide Kinder vonw sind schwarz. Also k¨onnen wirwrot f¨arben, und das zus¨atzliche Schwarz vonxzup[x] versetzen

; n¨achste Iteration.

∗ Fall 1.2.2:left[w] ist rot,right[w] ist schwarz. Dann f¨arbewrot,left[w]

schwarz und rotiere rechts umw

; reduziert auf Fall 1.2.3.

∗ Fall 1.2.3:right[w] ist rot. Dann vertausche die Farben vonwund p[x], f¨arberight[w] schwarz, und rotiere links ump[x]

; Zus¨atzliches Schwarz ist verbraucht.

Jan Johannsen Effiziente Algorithmen 55

L¨ oschen aus einem Rot-Schwarz-Baum

• Fall 2:x=right[p[x]] ist symmetrisch.

Auch beim L¨oschen wird am Ende die Wurzelroot[T] schwarz gef¨arbt.

Bemerke:

• In den F¨allen 1.2.2 und 1.2.3 bricht die Schleife sofort ab.

• Schleife wird nur im Fall 1.2.1 wiederholt, dann ist die Tiefe vonx kleiner geworden.

• Im Fall 1.1 wird die Tiefe vonxgr¨oßer, aber die Schleife bricht danach im Fall 1.2 sofort ab.

;Laufzeit istO(logn), es werden h¨ochstens 3 Rotationen durchgef¨uhrt.

Zusammengefasst:die OperationenSearch, Minimum, Maximum,

Successor, Predecessor, InsertundDeletek¨onnen f¨ur Rot-Schwarz-B¨aume

Referenzen

ÄHNLICHE DOKUMENTE

Wird auf ein Element durch eine Operation zugegriffen, so wird dieses im Splay-Tree in geeigneter Weise zur Wurzel bef¨ ordert, um, sollten weitere Zugriffe auf dieses Element

Wird auf ein Element durch eine Operation zugegriffen, so wird dieses im Splay-Tree in geeigneter Weise zur Wurzel bef¨ ordert, um, sollten weitere Zugriffe auf dieses Element

Wird auf ein Element durch eine Operation zugegriffen, so wird dieses im Splay-Tree in geeigneter Weise zur Wurzel bef¨ ordert, um, sollten weitere Zugriffe auf dieses Element

Beweisen Sie, dass die beiden Wahrscheinlichkeitsverteilungen auf bin¨ aren Suchb¨ aumen aus Folie

Definieren Sie Funktionen zum Einf¨ ugen, L¨ oschen und Suchen in nahezu balan- cierten bin¨ aren Suchb¨ aumen.. Beweisen Sie, dass diese Funktionen die entsprechenden

Beobachtung: untere Grenze für Anzahl Blätter eines Suchbaums zu gegebener Höhe erlaubt Abschätzung der maximalen Höhe eines Suchbaums zu gegebener

Schlüssel im linken Teilbaum v.left von v sind kleiner als v.key Schlüssel im rechten Teilbaum v.right von v sind grösser als

Aufzählen von Schlüssel in aufsteigender Anordnung Nächst kleinerer Schlüssel zu gegebenem Schlüssel...