Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós

23
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszék Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő: Imre Mihály, műszaki informatikus hallgató

description

Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő: Imre Mihály, műszaki informatikus hallgató. Splay fa. Splay : kiszélesedik, lesarkít, ferdére vág - PowerPoint PPT Presentation

Transcript of Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós

Page 1: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Miskolci EgyetemInformatikai Intézet

Általános Informatikai Tanszék

Pance Miklós

Adatstruktúrák, algoritmusok

előadásvázlat

Miskolc, 2004

Technikai közreműködő: Imre Mihály, műszaki informatikus hallgató

Page 2: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa

Splay: kiszélesedik, lesarkít, ferdére vág

Garantálja – üres fából kiindulva – , hogy M egymás utáni fa művelet legfeljebb O(M log N) idejű. Általában, ha M művelet wc teljes ideje O(M F(N)) akkor az amortizált futási idő O(F(N)), ezért a splay fa műveleteinek amortizált ideje O(log N).

Az alapelv: ha elértünk egy csúcsot, akkor azt egy sor AVL fa forgatással a gyökérbe nyomjuk.

(Sok alkalmazásban, ha egyszer megkerestünk egy elemet, akkor valószínű, hogy a közeljövőben újból keressük, ez az eset gyakoribb, mint gondolnánk.)

! Nem kell a magasság információ !

2

Page 3: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa

Egy nem működő egyszerű ötlet:

Minden csúcsot az elérési úton a szülőjével megforgatunk.

3

A k1

B C

D

E

F

k2

k3

k4

k5

A B

C

D

k2

k1

k3

k1-k2

Page 4: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa

4

k1-k3 k1-k4

A B

E

k2

k1

k4

k3

C D

A B

F

k2

k1

k5

k4

Ek3

C D

Page 5: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa

5

k1-k5

A k1 ugyan a gyökérbe került, de a k3 majdnem olyan mélyre került, mint a k1 volt...

A B

k2

k1

k5

Fk4

Ek3

C D

Page 6: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa

Splaying

Továbbra is alulról-felfelé forgatunk. Legyen X egy csúcs az elérési útvonalon (nem gyökér). Ha X szülője a gyökér, akkor egyszerűen megforgatjuk őket, ez lesz az útvonalon az utolsó forgatás. Különben van szülője (P) és nagyszülője (G).

6

Page 7: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa

1. eset : X jobb gyerek és P bal gyerek (vagy fordítva) dupla forgatás mint az AVL-nél

7

A

G

B

P

X

D

C A B

C

D

P

X

G X

P G

B CA D

Zig-Zag

Page 8: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa

2. eset: X és P mindegyike bal (jobb) gyerek

8

A B

C

D

X

P

G P

XG

BC

AD

B

A P

X

C

G

D

Zig-Zig

Page 9: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa

Az előző példa így:

9

A k1

B C

D

E

F

k2

k3

k4

k5

A B

E

k2

k1

k4

k3

C D

k5

F

k1-k2-k3 Zig-Zag (AVL dupla)

Page 10: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa

A k1 helyzete kiváló, az egész laposodott, nagyobb példán

jobban látszik.

10

A B

E

k2

k1

k4

k3

C D

k5

F

C D

k3

k4

k5

E F

k2

k1

A B

k1-k4-k5 Zig-Zig

Page 11: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa

Implementáció nem rekurzív + szülő pointer. 11

3

4

5

2

6

1

7

7

6

5

4

1

2

3

7

6

1

4

52

3

2

1

6

74

5

3

Page 12: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa felülről-lefelé

Az alap splay-fánál: az X elemet levélként beszúrtuk, utána egy sor forgatással (splay) az X a fa új gyökere lett. A keresés folyamán is végeztünk splay-t. Ha az elem nem található, akkor az elérési út utolsó csúcspontjára végeztük a splay-t.

Ehhez a stratégiához a fát be kell járni a gyökértől lefelé, majd a splay-hez alulról-felfelé. Ezt vagy a szülő pointerekkel, vagy az elérési út stackre tételével tudjuk megvalósítani.

Most a forgatásokat az elérési út mentén hajtjuk végre. Ez a gyakorlatban gyorsabb, O(1) plusz hely kell, és az amortizált időkorlát O(log N) marad.

12

Page 13: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa felülről-lefelé

Az elérés bármely pontján az aktuális csúcs X, az alfájának gyökere, ez lesz a középső fa. Az L fa az X-nél kisebb, de az X alfájában nem szereplő csúcsokat tárolja. Az R hasonlóan a T fa X-nél nagyobb, de X alfájában nem lévő csúcsokat tárolja. Kezdetben X a T gyökere, L és R üres.

13

Page 14: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa felülről-lefelé

Zig:

14

L

A

Y

X

B

R

LA

YX

B

R

A középső fa új gyökere Y lesz. Az X és a B alfa az R legkisebb elemének bal gyereke lesz, így R-ben a legkisebb elem az X lesz.

Az Y-nak nem kell levélnek lennie a Zig-hez. Ha egy Y-nál kisebb elemet keresünk és az Y-nak nincs bal gyereke (jobb gyerekének kell lennie), akkor a Zig-et alkalmazzuk.

Page 15: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa felülről-lefelé

Zig-Zig:

15

L R

A

Z

X

CY

B

L

A

Z R

X

C

Y

B

Page 16: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa felülről-lefelé

Zig-Zag:

16

L R

B

Z

X

CY

A

L R

B

Z

X

C

Y

A

Forgatás valójában nem történt.

Page 17: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa felülről-lefelé

Egyszerűsített Zig-Zag:

17

L R

B

Z

X

CY

A

L R

B

Z

Y

C

XA

Így a Zig-Zag csak egy Zig lesz és Y a középső gyökér Z helyett.

Page 18: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa felülről-lefelé

Az utolsó splaying után összerakjuk a fákat:

18

L

A

X

B

R

A

L

X

R

B

Page 19: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa felülről-lefelé

Példa: a 19-et keressük

19

ü ü12

5 25

3020

2415

1813

16

Page 20: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa felülről-lefelé

Egyszerűsített Zig-Zag (12-25-20):

20

25

3020

2415

1813

16

ü12

5

Page 21: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa felülről-lefelé

Zig-Zig (25-20-15)

21

25

3024

2015

1813

16

12

5

Page 22: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa felülről-lefelé

Zig (15-18):

22

25

3024

2012

155

13

18

16

Page 23: Miskolci Egyetem Informatikai Intézet  Általános Informatikai Tanszé k Pance Miklós

Splay fa felülről-lefelé

Összerakás:

23

1613

5 15

12 20

18

3024

25