• No results found

Föreläsning 5 Sökträd: AVL-träd, (2,3)-träd

N/A
N/A
Protected

Academic year: 2021

Share "Föreläsning 5 Sökträd: AVL-träd, (2,3)-träd"

Copied!
15
0
0

Loading.... (view fulltext now)

Full text

(1)

Föreläsning 5

Sökträd: AVL-träd, (2,3)-träd

TDDC91,TDDE22,725G97: DALG

Utskriftsversion av föreläsning i Datastrukturer och algoritmer 18 september 2018

Magnus Nielsen, IDA, Linköpings universitet

5.1

Innehåll

Introduktion

find,insertochremovei ett binärt sökträd tar O(h) tid, där h är höjden av trädet.

Håll sökträdet balanserat!! 5.2

Sökträd är coolt!

Sökträd får till och med vara med på TV!

• CSI

• Criminal Minds

• Missing (CAN)

5.3

Riktigt coolt!

5.4

1 AVL-träd

AVL-träd

• Självbalanserande BST/höjdbalanserat BST

• AVL = Adelson-Velskii och Landis, 1962

• Idén: Håll reda på balansinformation i varje nod

• AVL-egenskapenFör varje intern nod v i T skiljer sig höjden av barnen till v med högst 1 . . . eller alternativt. . . För varje intern nod v i T gäller att balans(v) ∈ {−1, 0, 1}, där

(2)

Maximal höjd av AVL-träd

Proposition 1. Höjden av ett AVL-träd som lagrar n poster är O(log n).

Vilket får som följd att. . .

Proposition 2. Vi kan görafind,insertochremovei ett AVL-träd i tid O(log n) medan vi bevarar AVL- egenskapen.

5.6

Borttagning i ett AVL-träd

• findochremovesom i ett vanligt binärt sökträd

• Uppdatera balansinformationen på väg tillbaka upp till roten

• Om för obalanserat: Strukturera om . . . men. . .

– När vi återställer balansen på ett ställe kan det uppstå obalans på ett annat – Måste upprepa balanseringen (eller kontroll av balansen) till dess vi når roten – Högst O(log n) ombalanseringar

5.7

Rotationer

• Balansering måste göras både vid insert och remove

• Fyra möjliga rotationer:

– "Höger"eller "vänster – Enkel- eller dubbelrotation

5.8

Exempel: ett AVL-träd 44

17

32

78

50

48 62

88 3

1

0

2

1

0 0

0

5.9

Insättning i ett AVL-träd

• Den nya noden gör att trädhöjden förändras och att trädet måste höjdbalanseras.

– Man kan hålla reda på delträdens höjd på olika sätt:

∗ Lagra höjden explicit i varje nod

∗ Lagra balansfaktorn för noden

• Förändringen brukar beskrivas som en höger- eller vänsterrotation av ett delträd.

• Det räcker med en rotation för att få trädet i balans igen.

5.10

(3)

Insättning i AVL-träd (enkla fall)

5.11

Insättningsalgoritm

• Starta från den nya noden och leta uppåt tills man hittar en nod x s.a. dess ”grandparent” z är obalan- serad. Markera x:s förälder med y.

• Gör en rekonstruering av trädet så här:

– Döp om x, y, z till a, b, c baserat på deras inorder-ordning.

– Låt T0, T1, T2, T3vara en uppräkning i inorder av delträden till x, y och z. (Inget av delträden får ha x, y eller z som rot.)

– z byts mot b, dess barn är nu a och c.

– T0och T1är barn till a och T2och T3är barn till c.

5.12

Exempel insättning i ett AVL-träd 44

17 78

50

48 62

88 4

1

0

3

2

0 1

0

54 32

T

T

0

1

3

y/a

T

z/c

x/b

5.13

Exempel: insättning i ett AVL-träd

(4)

44

17

50

48 3

1

0

2

1

0 0

1 32

T0 T1 T2 T3

b c

a

0

54 88

78 62

5.14

Fyra olika rotationer

T

0

T

1

T

2

T

3

T

0

T

1

T

2

T

3

a=z

c=x

a=z

b=y enkel rotation c=x

b=y

Om b = y kallas det en enkel rotation.”Rotera upp y över z” 5.15

Fyra olika rotationer

T

0

T

1

T

2

T

3

T

0

T

1

T

2

T

3

enkel rotation c=z

a=x

b=y c=z

b=y a=x

Om b = y kallas det en enkel rotation.”Rotera upp y över z” 5.16

Fyra olika rotationer

T

0

T

0

T

1

T

2

T

3

T

1

T

2

T

3

a=z

a=z

b=x dubbel rotation c=y

b=x

c=y

Om b = x kallas det en dubbel rotation.”Rotera upp x över y och sedan över z” 5.17

(5)

Fyra olika rotationer

T

0

T

3

T

0

T

1

T

2

T

3

T

1

T

2

a=y

b=x dubbel rotation c=z

c=z b=x a=y

Om b = x kallas det en dubbel rotation.”Rotera upp x över y och sedan över z” 5.18

Ett annat sätt att beskriva det på

T

0

x

y

T

1

T

2

Antag att vi har balans. . . 5.19

Ett annat sätt att beskriva det på

x

y

T

1

T

2

T

0

. . . och sedan stoppar in något som sabbar den 5.20

Ett annat sätt att beskriva det på

(6)

x

y

T

1

T

2

T

0

Gör en enkel rotation 5.21

Ett annat sätt att beskriva det på

x

y

T

1

T

2

T

0

Gör en enkel rotation 5.22

Ett annat sätt att beskriva det på

x

y

T

1

T

2

T

0

(7)

Gör en enkel rotation 5.23

Ett annat sätt att beskriva det på

T

0

y x

T

1

T

0

T

2

Gör en enkel rotation 5.24

Ett annat sätt att beskriva det på

T

0

y x

T

1

T

2

T

0

Gör en enkel rotation 5.25

Ett annat sätt att beskriva det på

(8)

T

0

y x

T

1

T

2

T

0

Klart! 5.26

Ett annat sätt att beskriva det på

y

z

Ett nytt exempel. . . 5.27

Ett annat sätt att beskriva det på

z

y

(9)

. . . den här gången stoppar vi in något på ett annat ställe 5.28

Ett annat sätt att beskriva det på

z

y

Prova en enkel rotation igen. . . 5.29

Ett annat sätt att beskriva det på

y

z

. . . hmm, vi har inte fått balans 5.30

Ett annat sätt att beskriva det på

(10)

z

y

Börja om från början. . . och titta på strukturen i y 5.31

Ett annat sätt att beskriva det på

z

y

x

0

T

1

T

2

T

3

T

Vi får lov att göra en dubbel rotation 5.32

Ett annat sätt att beskriva det på

z

y

x

0

T

1

T

2

T

3

T

(11)

Vi får lov att göra en dubbel rotation 5.33

Ett annat sätt att beskriva det på

z

y

x

0

T

1

T

2

T

3

T

Vi får lov att göra en dubbel rotation 5.34

Ett annat sätt att beskriva det på

z

y

x

0

T

1

T

2

T

3

T

Vi får lov att göra en dubbel rotation 5.35

Ett annat sätt att beskriva det på

(12)

z

y

x

0

T

1

T

2

T

3

T

Vi får lov att göra en dubbel rotation 5.36

Ett annat sätt att beskriva det på

x

z

T

2

T T

3

T

0

y

1

Vi får lov att göra en dubbel rotation 5.37

Ett annat sätt att beskriva det på

z

T

2

0

T

3

x

y

T T

1

(13)

Klart! 5.38

Trenodsrekonstruering = rotationer. . .

Vissa författare använder vänster- och högerrotationer: Enkel vänsterrotation:

• vänstra delen av delträdet (a och j) sänks ner

• vi har ”roterat (upp) b över a”

c b a

j

k

l m

c b a

j k l m

5.39

Dubbla rotationer. . .

Två rotationer behövs när noderna som ska balanseras om är placerade i ett sicksackmönster.

• Rotera upp b över a

• Rotera upp b över c

c b a

j

k l

m

b c a

j k l m

c b a

j k l m

5.40

Borttagning i ett AVL-träd

• findochremovesom i ett vanligt binärt sökträd

• Uppdatera balansinformationen på väg tillbaka upp till roten

• Om för obalanserat: Strukturera om . . . men. . .

– När vi återställer balansen på ett ställe kan det uppstå obalans på ett annat – Måste upprepa balanseringen (eller kontroll av balansen) till dess vi når roten – Högst O(log n) ombalanseringar

5.41

2 (2, 3)-träd

Ny approach: släpp på något av kraven

• AVL-träd: binärt träd, accepterar viss (liten) obalans. . .

• Kom ihåg:Fullt binärt träd: icke-tomt; graden är antingen 0 eller 2 för varje nodPerfekt binärt träd:

fullt, alla löv har samma djup

• Kan vi bygga och underhålla ett perfekt träd (om vi struntar i ”binärt”)? Då skulle vi alltid känna till söktiden i värsta fall exakt!

(14)

(2, 3)-träd Förut:

• Ett ”pivotelement”

• Om större letar vi till höger

• Om mindre letar vi till vänster

Nu:

• Tillåt flera (nämligen 1–2) ”pivotelement”

• Antalet barn till en intern nod är antalet pivotelement + 1 (dvs 2–3)

8 5 2

5    10

2 8 12

5.43

Insättning i ett (a, b)-träd med a = 2 och b = 3

10 5   10 Insert(10)

Insert(15)

5 15

5

Insert(18)

• Så länge det finns plats i barnet vi hittar, lägg till elementet i det barnet. . .

• Om fullt, dela upp och tryck det utvalda pivotelementet uppåt. . . detta kan hända upprepade gånger

10 5 15  18

Insert(17) 10 5 15  17  18

10  17 5 15 18

5.44

(15)

Borttagning i (2, 3)-träd Tre fall:

• Inga villkor bryts genom borttagning

• Ett löv tas bort (blir tomt) För då över någon annan nyckel till det lövet, . . . ok om vi har syskon med 2+ element

10  17 5 15 18

30 25 35  40 20

10  17 5 15 18

35

30 40

Delete(25) 30 20

? 35  40

? 30 35  40

verf ring

Ö ö

av 30 och 35

5.45

Borttagning i (2, 3)-träd

• Om ett löv tas bort (blir tomt)

• För då över någon annan nyckel till det lövet, eller

• Slå ihop det med en granne

10 17 5 15 18

35

30 40

20 Delete(18)

10 17 5 15 ?

10 5 15 17

10 5 15 17

35

30 40

20

5.46

Borttagning i (2, 3)-träd

• En intern nod blir tom Roten: ersätt med föregångare eller efterföljare i inorder Reparera sedan in- konsistenser med lämpliga ihopslagningar och överföringar. . .

10  5 17

35 30 40 20 Delete(20)

10 

5 ?

35 30 40

? Ers tt...ä ...sl  ihop l vå ö

17

5  10 35 30 40 17

F r f  element internt...ö å ...sl  ihop noderå

5  10 30 40 17  35

5.47

References

Related documents

Att det här var ett speciellt träd var inte något som de vuxna med ord talade om för barnen, Lars säger: ”Egentligen inte, det var så fullkomligt självklart att det här var

Material: Två tavelramar av vykortsstorlek (t.ex. från IKEA), insektsnät att spänna över den ena ramen, häft- pistol för att fästa nätet, dagstidningar, mixer eller elvisp,

Under en utomhusövning hjälps barn och vuxna åt med att räkna träd: riktigt små träd (barn), mellanstora träd (tonåringar), stora träd (föräldrar) och

Däremot ger varje period av regn eller torka upphov till mer eller mindre tydliga ringar?. Titta

upplevde att de lyckats förena sin yrkesroll med familjerollen och uppnå balans mellan dessa roller. Studien baserades på följande frågeställningar: Hur har balansen sett ut

• Måste upprepa balanseringen (eller kontroll av balansen) till dess vi når roten. • Högst O(log

– varje sekvens av m operationer, utförda på ett initialt tomt träd, tar totalt O(m log m) tid – alltså är den amorterade kostnaden/tiden för en operation O(log n) även om

Alla barn visste att trädet har en stam och behöver vatten redan från början, men vid det andra intervjutillfället visade resultatet att flertalet barn tagit till sig ny kunskap