Date post: | 01-Jan-2016 |
Category: |
Documents |
Upload: | salvador-spencer |
View: | 42 times |
Download: | 0 times |
Splay tree
1.Seminarska naloga
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 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.
OČE
X
Cpoddrevo
Apoddrevo
Bpoddrevo
X
Apoddrevo
OČE
Bpoddrevo
Cpoddrevo
Desna rotacija
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 zrcalna desni.
OČE
Apoddrevo
X
Cpoddrevo
Bpoddrevo
X
OČE
Cpoddrevo
Apoddrevo
Bpoddrevo
Leva rotacija
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.
OČE OČETA
OČE
Dpoddrevo
X
Cpoddrevo
Apoddrevo
Bpoddrevo
OČE
X
OČEOČETA
Apoddrevo
Bpoddrevo
Cpoddrevo
Dpoddrevo
1.desna rotacija 2.desna rotacija
X
Apoddrevo
OČE
Bpoddrevo
OČE OČETA
Cpoddrevo
Dpoddrevo
2.desna rotacija
-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 na svojega očeta uporabimo dvojno rotacijo. Če je vozlišče z obravnavanim elementom desni sin, njegov oče pa levi sin, je to levo-desna rotacija.
Očeočeta
oče
Poddrevod
Poddrevoa
X
Poddrevob
Poddrevoc
Očeočeta
X
Poddrevod
oče
Poddrevoc
Poddrevoa
Poddrevob
1.leva rotacija
x
oče
Očeočeta
Poddrevoa
Poddrevob
Poddrevoc
Poddrevod
2.desna rotacija
Če je vozlišče z obravnavanim elementom levi sin, njegov oče pa desni sin, uporabimo desno-levo rotacijo. Ta je zrcalna slika levo-desne 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:
• 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 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, 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.
16
2
2
16
Zaporedno vstavljamo elemente 5, 11, 30, 17, 11 v iskalno dvojiško drevo in drevo lomimo.Dobimo :
11
5
16
2
17
30
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 3x v levo
11
5
16
2
17
30
22
11
5
16
2
17
22
30
11
5
16
2
22
17
30
16
11
22
5
2
17
30
22
11
30
5
2
17
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 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.
4
3
7
2
6
16
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 rotacijo.
4
3
7
2
6
16
4
7
16
3
6
2
7
16
4
3
6
2
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/node93.html• http://en.wikipedia.org/wiki/Splay_tree