• 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!
48
0
0

Loading.... (view fulltext now)

Full text

(1)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Föreläsning 5

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

TDDC91,TDDE22,725G97: DALG

Föreläsning i Datastrukturer och algoritmer 18 september 2018

Magnus Nielsen Institutionen för datavetenskap

(2)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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!!

(3)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Sökträd är coolt!

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

• CSI

• Criminal Minds

• Missing (CAN)

(4)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Riktigt coolt!

(5)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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-egenskapen

Fö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 balans(v ) =height(leftChild(v )) −height(rightChild(v ))

(6)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Maximal höjd av AVL-träd

Proposition

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

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

Proposition

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

(7)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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

(8)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Rotationer

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

• Fyra möjliga rotationer:

• "Höger"eller "vänster

• Enkel- eller dubbelrotation

(9)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Exempel: ett AVL-träd

44

17

32

78

50

48 62

88 3

1

0

2

1

0 0

0

(10)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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.

(11)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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

(12)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Insättningsalgoritm

• Starta från den nya noden och leta uppåt tills man hittar en nod x s.a. dess

”grandparent” z är obalanserad. 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.

(13)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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

(14)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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

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

(15)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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”

(16)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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.

(17)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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”

(18)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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.

(19)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

T

0

x

y

T

1

T

2

(20)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

x

y

T

1

T

2

(21)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

x

y

T

1

T

2

T

0

(22)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

x

y

T

1

T

2

(23)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

x

y

T

1

T

2

T

0

(24)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

T

0

y x

T

1

T

2

(25)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

T

0

y x

T

1

T

2

T

0

(26)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

T

0

y x

T

1

T

2

T

0

(27)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

y

z

(28)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

z

y

(29)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

z

y

(30)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

y

z

(31)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

z

y

(32)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

z

y

x

0

T

3

T

(33)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

z

y

x

0

T

1

T

2

T

3

T

(34)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

z

y

x

0

T

3

T

(35)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

z

y

x

0

T

1

T

2

T

3

T

(36)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

z

y

x

0

T

3

T

(37)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

x

z

T2

T T3

T0

y

1

(38)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Ett annat sätt att beskriva det på

z

T2

0 T3

x

y

T T1

(39)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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

(40)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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 m

b c a

k l m

c b a

j k l m

(41)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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

(42)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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 nod Perfekt 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!

(43)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

(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

(44)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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

10 5   10 Insert(10)

Insert(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 Insert(17) 10 10  17

(45)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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

20 Delete(25) 30

? 35  40

? 30 35  40

verf ring

Ö ö

av 30 och 35

(46)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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 35

20 Delete(18)

10 17 5 15 ?

10 10 35

20

(47)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

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 inkonsistenser 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

(48)

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

Innehåll AVL-träd (2, 3)-träd Avslutning

Nästa gång

Prioritetsköer och heapar. . .

References

Related documents

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

De har en större andel friska träd, större andel skyddsvärda träd, större andel träd med stora hål och större andel efterträdare än det finns i skogen. Samtidigt

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

– 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

– 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