1 / 23

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

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

neona
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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ó

  2. 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

  3. k2 k1 k2 k1 k5 k4 k3 k3 D F A B C E C A B D Splay fa Egy nem működő egyszerű ötlet: Minden csúcsot az elérési úton a szülőjével megforgatunk. k1-k2 3

  4. k3 k4 k5 k1 k2 k2 k1 k4 k3 A A B E C F D B E C D Splay fa k1-k4 k1-k3 4

  5. k2 k1 k5 k4 k3 A B F E C D Splay fa k1-k5 A k1 ugyan a gyökérbe került, de a k3 majdnem olyan mélyre került, mint a k1 volt... 5

  6. 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

  7. G X P P X G G C P D X B B D A C C B D A A Splay fa 1. eset : X jobb gyerek és P bal gyerek (vagy fordítva) dupla forgatás mint az AVL-nél Zig-Zag 7

  8. P G P X G X P G X D A B D A C C D A B C B Splay fa 2. eset: X és P mindegyike bal (jobb) gyerek Zig-Zig 8

  9. k4 k4 k1 k2 k5 k3 k3 k2 k1 k5 C D D A E B C F B F E A Splay fa Az előző példa így: k1-k2-k3 Zig-Zag (AVL dupla) 9

  10. k5 k5 k4 k3 k3 k4 k1 k2 k1 k2 C E A A D C F B D B E F Splay fa k1-k4-k5 Zig-Zig A k1 helyzete kiváló, az egész laposodott, nagyobb példán jobban látszik. 10

  11. 2 1 7 6 5 4 5 3 7 6 3 4 1 7 6 1 4 3 2 5 2 7 1 6 2 5 4 3 Splay fa Implementáció nem rekurzív + szülő pointer. 11

  12. 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

  13. 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 ésR üres. 13

  14. Y A Y A X X L B R L B R Splay fa felülről-lefelé Zig: 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. AzY-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. 14

  15. Z Z Y X X Y A A B L R C R L C B Splay fa felülről-lefelé Zig-Zig: 15

  16. Z Z Y Y X X B B R L A A L R C C Splay fa felülről-lefelé Zig-Zag: Forgatás valójában nem történt. 16

  17. Z Z Y X X Y B B R L A A L R C C Splay fa felülről-lefelé Egyszerűsített Zig-Zag: Így a Zig-Zag csak egy Zig lesz és Y a középső gyökér Z helyett. 17

  18. X X A L L B R A R B Splay fa felülről-lefelé Az utolsó splaying után összerakjuk a fákat: 18

  19. ü ü 20 25 15 13 16 12 5 30 24 18 Splay fa felülről-lefelé Példa: a 19-et keressük 19

  20. ü 12 20 25 15 13 16 5 30 24 18 Splay fa felülről-lefelé Egyszerűsített Zig-Zag (12-25-20): 20

  21. 12 24 25 15 13 16 5 30 20 18 Splay fa felülről-lefelé Zig-Zig (25-20-15) 21

  22. 18 24 25 12 5 13 30 20 15 16 Splay fa felülről-lefelé Zig (15-18): 22

  23. 16 13 5 15 12 20 18 30 24 25 Splay fa felülről-lefelé Összerakás: 23

More Related