Splay tree 1 Seminarska naloga Splay tree Lomljena

  • Slides: 24
Download presentation
Splay tree 1. Seminarska naloga

Splay tree 1. Seminarska naloga

Splay tree • Lomljena drevesa so dvojiška iskalna drevesa, ki se spremenijo (lomijo) ob

Splay tree • Lomljena drevesa so dvojiška iskalna drevesa, ki se spremenijo (lomijo) ob vsakem posegu v drevo. • To je pri iskanju elementa v drevesu, vstavljanju elementa v drevo in pri brisanju elementa iz drevesa. • Lomljenje drevesa trenutni element premakne proti korenu drevesa oziroma v koren drevesa. • Za lomljenje drevesa uporabljamo rotacije.

Rotacije • Lomljenje drevesa premakne z rotacijo dani element v koren drevesa. Rotacija je

Rotacije • Lomljenje drevesa premakne z rotacijo dani element v koren drevesa. Rotacija je postopek, ki zamenja vlogo sinov in očeta v iskalnem dvojiškem drevesu. Preoblikovano drevo je ravno tako iskalno dvojiško drevo. • Odvisno od primera uporabljamo enojne in dvojne rotacije. Dvojna rotacija je kombinacija dveh enojnih. • Rotacije so lahko leve ali desne. • Pri lomljenju lahko nastopijo štirje primeri:

1. Kadar je iskani element X v korenu drevesa, rotacija ni potrebna.

1. Kadar je iskani element X v korenu drevesa, rotacija ni potrebna.

2. Kadar je oče vozlišča z elementom koren drevesa, uporabimo enojno rotacijo. -Do desne

2. Kadar je oče vozlišča z elementom koren drevesa, uporabimo enojno rotacijo. -Do desne rotacije pride, če je iskani element X levi sin.

-Do leve rotacije pride, če je iskani element X desni sin. Leva rotacija je

-Do leve rotacije pride, če je iskani element X desni sin. Leva rotacija je zrcalna desni.

3. Kadar sta vozlišče z obravnavanim elementom in oče oba leva ali oba desna

3. Kadar sta vozlišče z obravnavanim elementom in oče oba leva ali oba desna sinova svojih očetov uporabimo dvojno rotacijo. -�Desno-desno rotacijo uporabimo, če sta oba leva sinova.

-Levo-levo rotacijo uporabimo, če sta oba sinova desna. Levo-leva rotacija je zrcalna slika desno

-Levo-levo rotacijo uporabimo, če sta oba sinova desna. Levo-leva rotacija je zrcalna slika desno desne rotacije.

4. Kadar je vozlišče z obravnavanim elementom na nasprotni strani očeta, kot oče glede

4. Kadar je vozlišče z obravnavanim elementom na nasprotni strani očeta, kot oče glede na svojega očeta uporabimo dvojno rotacijo. Če je vozlišče z obravnavanim elementom desni sin, njegov oče pa levi sin, je to levodesna rotacija.

Če je vozlišče z obravnavanim elementom levi sin, njegov oče pa desni sin, uporabimo

Če je vozlišče z obravnavanim elementom levi sin, njegov oče pa desni sin, uporabimo desno-levo rotacijo. Ta je zrcalna slika levodesne rotacije. Rotacije in lomljenje drevesa so samo pomožne metode, ki jih potrebujemo uspešno izpeljavo pravih operacij, ki so vstavljanje elementa, iskanje elementa v drevesu in brisanje elementa iz drevesa.

Vstavljene elementa v drevo • Pri vstavljanju elementa v drevo ločimo tri primere: •

Vstavljene elementa v drevo • Pri vstavljanju elementa v drevo ločimo tri primere: • 1)Drevo je prazno – element vstavimo v koren drevesa in postopek je končan • 2)Če drevo ni prazno in v drevesu ni enakega elementa, kot ga vstavljamo, pridemo do lista drevesa. Takrat naredimo novo vozlišče in ga povežemo v drevo. Nato drevo lomimo in novo vozlišče z elementom, ki ga vstavljamo premaknemo v koren drevesa.

 • 3)Element, ki ga vstavljamo, je enak elementu v drevesu. Zato postopek vstavljanja

• 3)Element, ki ga vstavljamo, je enak elementu v drevesu. Zato postopek vstavljanja končamo. Sledi lomljenje drevesa s katerim vozlišče z elementom, ki je enak elementu, ki smo ga želeli vstaviti premaknemo v koren drevesa.

Zgled: V prazno lomljeno drevo zaporedno vstavimo elemente: 16, 2, 5, 11, 30, 17,

Zgled: V prazno lomljeno drevo zaporedno vstavimo elemente: 16, 2, 5, 11, 30, 17, 11 in 22. Vstavimo 16 in nato 2. Vozlišče z elementom 2 moramo vstaviti v levo poddrevo, ker je 2 < 16. Nato uporabimo desno rotacijo.

Zaporedno vstavljamo elemente 5, 11, 30, 17, 11 v iskalno dvojiško drevo in drevo

Zaporedno vstavljamo elemente 5, 11, 30, 17, 11 v iskalno dvojiško drevo in drevo lomimo. Dobimo :

Vstavimo še zadnji element 22. Ker je 22>11 vstavimo v desno poddrevo. Ker je

Vstavimo še zadnji element 22. Ker je 22>11 vstavimo v desno poddrevo. Ker je 22>16 vstavimo v desno poddrevo. Tretja primerjava pove, da gremo spet v desno 22>17, nato pa gremo v levo, ker je 22<30. Zarotiramo najprej v desno in nato 3 x v levo

Iskanje elementa v drevesu • Pri iskanju elementa se sprehodimo po drevesu in pri

Iskanje elementa v drevesu • Pri iskanju elementa se sprehodimo po drevesu in pri tem v vsakem vozlišču primerjamo vrednost iskanega elementa z vrednostjo elementa v vozlišču drevesa. • Pri iskanju elementa v drevesu ločimo tri primere: • 1. Drevo je prazno • 2. V drevesu smo našli vozlišče z iskanim elementom. Z zaporedjem rotacij premaknemo najdeno • vozlišče v koren drevesa. • 3. Iskanega elementa ni v drevesu. Z zaporedjem rotacij v koren premaknemo zadnje vozlišče na poti iskanja.

Brisanje elementa iz drevesa • Pri brisanju elementa iz drevesa, najprej poiščemo vozlišče z

Brisanje elementa iz drevesa • Pri brisanju elementa iz drevesa, najprej poiščemo vozlišče z vrednostjo, ki jo želimo brisati iz drevesa. Nato drevo lomimo - z zaporedjem rotacij, vozlišče s tem elementom postane koren drevesa. Nato ta element po določenih postopkih odstranimo iz drevesa.

Zgled: Dano imamo dvojiško iskalno drevo. Iz drevesa izbrišimo element 16.

Zgled: Dano imamo dvojiško iskalno drevo. Iz drevesa izbrišimo element 16.

Element 16 najprej poiščemo. Ker je večji od vrednosti 5 v korenu drevesa, nadaljujemo

Element 16 najprej poiščemo. Ker je večji od vrednosti 5 v korenu drevesa, nadaljujemo z iskanjem v desnem poddrevesu. Tu imamo v vozlišču vrednost 7. Ker je element 16 večji od vrednosti 7, nadaljujemo iskanje v desnem poddrevesu. Tu najdemo vrednost 16 in iskanje je končano. Sledi lomljenje drevesa, pri katerem vozlišče z iskano vrednostjo premaknemo v koren drevesa.

Vozlišče z iskano vrednostjo je desni sin, ravno tako njegov oče, zato uporabimo levo-levo

Vozlišče z iskano vrednostjo je desni sin, ravno tako njegov oče, zato uporabimo levo-levo rotacijo.

VIRI IN LITERATURA • S. Butalič, Lomljeno drevo, Diplomska naloga, Fakulteta za matematiko in

VIRI IN LITERATURA • S. Butalič, Lomljeno drevo, Diplomska naloga, Fakulteta za matematiko in fiziko, 2006, Ljubljana • B. Gril, Lomljena drevesa, Seminarska naloga, Fakulteta za matematiko in fiziko, 2009, Jesenice • http: //wiki. fmf. uni-lj. si/wiki/Lomljeno_drevo • http: //lcm. csa. iisc. ernet. in/dsa/node 93. html • http: //en. wikipedia. org/wiki/Splay_tree