• Keine Ergebnisse gefunden

6.4 Splay-Trees als Suchb¨aume

N/A
N/A
Protected

Academic year: 2021

Aktie "6.4 Splay-Trees als Suchb¨aume"

Copied!
33
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

6.4 Splay-Trees als Suchb¨ aume

In diesem Abschnitt untersuchen wir Splay-Trees, eine Datenstruktur, die den MFR-Ansatz auf B¨ aume ¨ ubertr¨ agt:

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 folgen, diese zu beschleunigen.

Wir untersuchen hier Splay-Trees als Suchb¨ aume, d.h. die Schl¨ ussel stammen aus einem total geordneten Universum, und innerhalb des Splay-Trees soll die Invariante

“Knoten im lUb ≤ k(x) ≤ Knoten im rUb“

gelten.

Ansonsten ist ein Splay-Tree ein interner bin¨ arer Suchbaum.

(2)

Wir benutzen Rotationen, um unter Beibehaltung der Invariante

einen Schl¨ ussel n¨ aher zur Wurzel zu bewegen, und zwar Einfach-

und Doppelrotationen.

(3)

Beispiel 54

J J

A

J J B

@

@

s @ @

s

J C J y

x ⇒

J J

B

J J C

@

@ s

@ @ s

J A J

x

y

(4)

Beispiel 54

J J

J J B

J J

J J C

@ @ s a @ @

s b

J J

J J D H H H c s

J J

J A J

H H H d s

J J

J J E

H H H e s

J J

J J F

J J

J J C

J J

J J D

@ @ s b

@ @ s a

J J

J J B

H H H c s

J J

J A J

H H H d s

J J

J J E

H H H e s

J J

J J

⇒ F

(5)

Beispiel 54

J J

J J C

J J

J J D

@ @ s b

@ @ s a

J J

J J B

H H H c s

J J

J A J

H H H d s

J J

J J E

H H H e s

J J

J J F

J J

J D J

@

@ s b

J J

J C J H H H a s

J J

J A J

J J

J B J

@

@ s c

H H H d s

J J

J J E

H H H e s

J J

J F J

(6)

Beispiel 54

J J

J J D

@ @ s b

J J

J J C H H H a s

J J

J J A

J J

J J B

@ @ s c

H H H d s

J J

J E J

H H H e s

J J

J J F

J J

J J C

J J

J J D

@ @ b s @ @

J J

J J E s d H H H a s s c

@ @

J J

J J A

J J

J J B

H H H e s

J J

J J F

(7)

Beispiel 54

J J

J J C

J J

J J D

@ @ b s @ @

J J

J E J s d H H H a s s c

@

@

J J

J A J

J J

J B J

H H H e s

J J

J J F

J C J D J J

@

@ b s @ @

d s

J J

J J E

H H H s e

J J

J J F X X

X X X X a s s

c

H H H

J J

J J

A

J J

J J B

(8)

6.4.1 Die Splaying-Operation

Ein Knoten, auf den zugegriffen wird (Splay(x, T )), wird durch eine Folge von einfachen und doppelten Rotationen an die Wurzel bewegt.

Wir unterscheiden die folgenden F¨ alle:

(9)

1

(zig): x ist Kind der Wurzel von T : einfache Rotation

J J

A

J J B

@

@

s @ @

s

J C J y

x ⇒

J J

B

J J C

@

@ s

@ @ s

J A J

x

y

(10)

2

(zig-zig): x hat Großvater g(x) und Vater p(x); x und p(x) sind jeweils linke (bzw. rechte) Kinder ihres Vaters.

J J

J J A

J J

J J B

@ @ s x @ @

s y=p(x)

J J

J J C

@

@ g(x)=p(y) s

J J

J D J p p p p

J J

J J B

J J

J J A

@ @ s x

@ @ s p(x)

J J

J J C

@

@ s g(x)

J J

J D J

pp pp

J J

J J C

J J

J J D

@ @ s z

@ @ s y

J J

J J B

@

@ x s

J J

J A J

&

bzw.

x=linkes Kind x=rechtes Kind

Doppelrotation

(11)

3

(zig-zag): x hat Großvater g(x) und Vater p(x), x ist linkes (rechtes) Kind von p(x), p(x) ist rechtes (linkes) Kind von g(x).

J J B C J J

@

@ x s

@ @

J A J y=p(x) s

H H H

J J D z=g(x) s

J J A B J J

@

@ s

y H H H x s

J J C D J J

@

@

s z

(12)

Beispiel 55

F¨ uhre die Splaying-Operation jeweils mit dem eingekreisten Element durch:

@ s

@ s

@ @ s

@ @ s @ s

@

s s s s

e 1)zigzig

2)zigzag 3)zigzag 4)zigzig

s s s

s s s s s

e 1)zigzig 2)zigzig 3)zigzig 4)zig

@ s

@ s @ s

@ s @ s

@ s @ s

@ s

e

1)zigzag

2)zigzag

3)zigzag

4)zig

(13)

6.4.2 Amortisierte Kostenanalyse der Splay-Operation Jeder Knoten habe ein Gewicht w(x) > 0. Das Gewicht tw(x) des Unterbaums mit Wurzel x ist die Summe der Gewichte aller Knoten im Unterbaum. Setze

Rang r(x) = log(tw(x)) Potenzial eines Baumes T = X

x∈T

r(x)

Lemma 56

Sei T ein Splay-Tree mit Wurzel u, x ein Knoten in T . Die amortisierten Kosten f¨ ur Splay(x, T ) sind

≤ 1 + 3(r(u) − r(x)) = O

log tw(u) tw(x)

.

(14)

Beweis:

Induktion ¨ uber die Folge von (Doppel)Rotationen:

Berechne r und r 0 , tw und tw 0 , die Rang- bzw. Gewichtsfunktion vor und nach einem Rotationsschritt. Wir zeigen, dass die amortisierten Kosten im

Fall 1 (zig) ≤ 1 + 3(r 0 (x) − r(x)) und in den

F¨ allen 2 und 3 (zig-zig bzw. zig-zag) ≤ 3(r 0 (x) − r(x)) sind.

y sei der Vater von x, z der Großvater (falls er existiert).

(15)

Beweis (Forts.):

1

Fall:

J J A B J J

@

@ s x

J C J

H H H y s

⇒ J A J

J J B C J J

@

@ s y

H H H x s

Amortisierte Kosten:

≤ 1 + r 0 (x) + r 0 (y) − r(x) − r(y)

≤ 1 + r 0 (x) − r(x), da r 0 (y) ≤ r(y)

≤ 1 + 3(r 0 (x) − r(x)), da r 0 (x) ≥ r(x)

(16)

Beweis (Forts.):

2

Fall:

J J A B J J

@

@ s x @ @

s y

J C J

@ @ z s

J J D p p p p

J J C D J J

@

@ s z

@ @ s y

J B J

@ @ s x

J J A

pp pp

Amortisierte Kosten:

≤ 2 + r 0 (x) + r 0 (y) + r 0 (z) − r(x) − r(y) − r(z)

= 2 + r 0 (y) + r 0 (z) − r(x) − r(y), da r 0 (x) = r(z)

≤ 2 + r 0 (x) + r 0 (z) − 2r(x), da r 0 (x) ≥ r 0 (y) und r(y) ≥ r(x)

(17)

Beweis (Forts.):

Es gilt, dass

2 + r 0 (x) + r 0 (z) − 2r(x) ≤ 3(r 0 (x) − r(x)) , d.h.

2r 0 (x) − r(x) − r 0 (z) ≥ 2 . Betrachte dazu die Funktion

f(x, y) = log x + log y in dem Bereich

x, y > 0, x + y ≤ 1 .

(18)

Beweis (Forts.):

Behauptung: f (x, y) nimmt sein eindeutiges Ma- ximum im Punkt 1 2 , 1 2

an. -

6

@

@ 0 1

1 x y

s max

Beweis der Behauptung: Da die log-Funktion streng monoton wachsend ist, kann sich das Maximum der Funktion

f(x, y) = log x + log y nur auf dem Geradensegment x + y = 1, x, y > 0 befinden. Dadurch erhalten wir ein neues

Maximierungsproblem f¨ ur die Funktion g(x) = log(x) + log(1 − x) auf diesem Geradensegment. Da g(x) an den R¨ andern gegen −∞

strebt, muss es sich um ein lokales Maximum handeln.

(19)

Beweis (Forts.):

Die einzige Nullstelle der Ableitung g 0 (x) = 1

ln a 1

x − 1 1 − x

, wenn log = log a , ist x = 1/2 (unabh¨ angig von a).

Weiter ist

g 00 (x) = − 1 ln a

1

x 2 + 1 (1 − x) 2

.

Da g 00 (0.5) < 0 ist, nimmt g(x) sein globales Maximum in x = 0.5 an. Insgesamt folgt, dass die Funktion f (x, y) = log x + log y ihr globales Maximum im Bereich x, y > 0, x + y ≤ 1 an der Stelle (0.5, 0.5) annimmt.

Damit ist die obige Behauptung gezeigt. Wir fahren mit dem

Beweis der Absch¨ atzung im Lemma fort.

(20)

Beweis (Forts.):

Damit gilt im 2. Fall:

r(x) + r 0 (z) − 2r 0 (x) = log

tw(x) tw 0 (x)

+ log

tw 0 (z) tw 0 (x)

≤ −2 , da

tw(x) + tw 0 (z) ≤ tw 0 (x) .

(21)

Beweis (Forts.):

3

Fall:

J J B C J J

@ @ x s

@

@

J J A

s

y H H H

J D J z s

J J A B J J

@ @ s

y H H H x s

J J C D J J

@ @ s z

Amortisierte Kosten:

≤ 2 + r 0 (x) + r 0 (y) + r 0 (z) − r(x) − r(y) − r(z)

≤ 2 + r 0 (y) + r 0 (z) − 2r(x), da r 0 (x) = r(z) und r(x) ≤ r(y)

≤ 2(r 0 (x) − r(x)), da 2r 0 (x) − r 0 (y) − r 0 (z) ≥ 2 .

(Letzteres folgt aus der Behauptung ¨ uber f(x, y) wie im

(22)

Beweis (Forts.):

Die Gesamtbehauptung des Lemmas folgt dann durch Aufaddieren der amortisierten Kosten f¨ ur die einzelnen Schritte

(Teleskop-Summe).

(23)

Sei T ein Splay-Tree mit n Knoten. Falls sich die Gewichte der Knoten nicht ¨ andern, ist die Verringerung des Potenzials durch eine Folge von Splay-Operationen Splay(x j , T ), j = 1, . . . , n, beschr¨ ankt durch

n

X

i=1

(log W − log w i ) =

n

X

i=1

log W w i

,

wobei

W :=

n

X

i=1

w i ,

w i = Gewicht von x i .

(24)

Satz 57

Die gesamten Kosten f¨ ur die m Zugriffe im Splay-Tree sind O((m + n) log n + m) .

Beweis:

W¨ ahle w i = n 1 f¨ ur alle Knoten. Dann sind die amortisierten Kosten f¨ ur einen Zugriff ≤ 1 + 3 log n, da W =

n

P

i=1

w i = 1.

Die Verringerung des Potenzials ist

≤ P n

i=1

log W w

i

=

n

P

i=1

log n = n log n.

Damit sind die reellen Kosten ≤ m(1 + 3 log n) + n log n.

(25)

Satz 58

Sei q(i) die Anzahl der Zugriffe auf das Element x i (in einer Folge von m Zugriffen). Falls auf jedes Element zugegriffen wird (also q(i) ≥ 1 f¨ ur alle i), dann sind die (reellen) Gesamtkosten f¨ ur die Zugriffe

O m +

n

X

i=1

q(i) · log m

q(i) !

.

Beweis:

Setze das Gewicht des i-ten Knotens gleich q(i) m .

⇒ W =

n

X

i=1

q(i)

m = 1 .

Der Rest folgt wie zuvor.

(26)

Satz 59

Betrachte eine Folge von Zugriffsoperationen auf eine n-elementige

Menge. Sei t die daf¨ ur n¨ otige Anzahl von Vergleichen in einem

optimalen statischen bin¨ aren Suchbaum. Dann sind die Kosten in

einem (anfangs beliebigen) Splay-Tree f¨ ur die Operationenfolge

O(t + n 2 ).

(27)

Beweis:

Sei U die Menge der Schl¨ ussel, d die Tiefe eines (fest gew¨ ahlten) optimalen statischen Suchbaumes, sei f¨ ur x ∈ U , d(x) die Tiefe von x in diesem Suchbaum. Setze

tw(x) := 3 d−d(x) . Sei T ein beliebiger Splay-Tree f¨ ur U , |U | =: n.

bal(T ) ≤ X

x∈U

r(x) = X

x∈U

log(3 d−d(x) ) = X

x∈U

(log 3)(d − d(x)) =

= (log 3) X

x∈U

(d − d(x)) = O(n 2 );

X

x∈U

tw(x) = X

x∈U

3 d−d(x)

d

X

i=0

2 i 3 d−i = 3 d

d

X

i=0

( 2

3 ) i ≤ 3 d 1

1 − 2 3 = 3 d+1

⇒ log tw(T )

tw(x) ≤ log 3 d+1

3 d−d(x) = log 3 d(x)+1 .

(28)

Beweis (Forts.):

Damit ergibt sich f¨ ur die amortisierten Kosten von Splay(x, T ) O(log tw(T )

tw(x) ) = O(d(x) + 1) . Die amortisierten Kosten sind damit

≤ c · Zugriffskosten (#Vergleiche) im optimalen Suchbaum (wo sie d(x) + 1 sind).

Die gesamten amortisierten Kosten f¨ ur die Zugriffsfolge sind daher

≤ c · t.

Die reellen Kosten ergeben sich zu ≤ amort. Kosten +

Verringerung des Potenzials, also O(t + n 2 ).

(29)

6.4.3 W¨ orterbuchoperationen in Splay-Trees Alle folgenden Operationen werden mit Hilfe von Splay implementiert.

Access(i, T ): √

(siehe oben) Join(T 1 , T 2 ):

J J T 1

J J T 2

−→

J J T 1 0

s gr¨ oßtes Element in T 1

H H j

J J T 2

−→

J J T 1 0

J J T 2

|{z}

@ @ s

Beachte: Falls x ∈ T 1 , y ∈ T 2 , dann x < y.

(30)

Split(i, T ):

J J T

Access(i,T )

−−−−−−−→

J J

J J

@ @ s i bzw. i oder i +

H H j

−→

J J

J J s

bzw.

J J

J J

@ @ s

Insert(i, T ):

Split(i, T) −→

J J

J J

−→

J J

J J

@

@ i s

Delete(i, T ):

Access(i, T) −→

J J

J J

@

@ i s

−→

J J

J J

−−→ Join

J J

T 0 = T − {i}

(31)

Sei i ∈ U , T ein Splay-Tree. Dann bezeichnen wir mit i− (bzw.

i+) den Vorg¨ anger (bzw. den Nachfolger) von i in U (falls diese existieren). U ist ja total geordnet. Falls i− bzw. i+ undefiniert sind, so setzen wir w(i−) = ∞ bzw. w(i+) = ∞.

Weiterhin sei W das Gesamtgewicht aller an einer

W¨ orterbuch-Operation beteiligten Knoten.

(32)

Satz 60

F¨ ur die amortisierten Kosten der W¨ orterbuch-Operationen in Splay-Trees gelten die folgenden oberen Schranken

(T, T 1 , T 2 6= ∅):

Access(i, T ) :

 

 

 3 log

W w(i)

+ O(1), falls i ∈ T 3 log

W

min{w(i ), w(i + )}

+ O(1), falls i 6∈ T

Split(i, T ) :

 

 

 3 log

W w(i)

+ O(1), falls i ∈ T 3 log

W

min{w(i ), w(i + )}

+ O(1), falls i 6∈ T

(33)

Satz 60

F¨ ur die amortisierten Kosten der W¨ orterbuch-Operationen in Splay-Trees gelten die folgenden oberen Schranken

(T, T 1 , T 2 6= ∅):

Join(T 1 , T 2 ) : 3 log W

w(i)

+ O(1), i maximal in T 1

Insert(i, T )

i6∈T

: 3 log

W − w(i) min{w(i ), w(i + )}

+ log

W w(i)

+ O(1)

Delete(i, T )

i∈T,

: 3 log W

w(i)

+ 3 log

W − w(i) w(i )

+ O(1),

falls i nicht minimal in T

Referenzen

ÄHNLICHE DOKUMENTE

Bei AVL-B¨ aumen sind die Operationen IsElement, Insert, und Delete so implementiert, dass sie die Zeitkomplexit¨ at O(log n) haben, wobei n die Anzahl der Schl¨ ussel

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

ExtractMin: liefert und l¨ oscht eines der kleinsten Elemente der Vorrangswarteschlange (falls das Element das kleinste ist, m¨ ussen minpos und minvalue noch aktualisiert

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

ExtractMin: liefert und l¨ oscht eines der kleinsten Elemente der Vorrangswarteschlange (falls das Element das kleinste ist, m¨ ussen minpos und minvalue noch aktualisiert

Splayb ¨aume sind bin ¨are Suchb ¨aume, die sich durch eine Variante der Move-to-root Strategie selbst anordnen.. AD Splay-B ¨aume Sven

Dieses Experiment kann mit anderen Halbzellen durchgeführt werden, um eine Verallgemeinerung dieses Versuchs

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