Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Drzewo splay - Wikipedia, wolna encyklopedia

Drzewo splay

Z Wikipedii

Drzewo splay – w informatycestruktura danych w formie samorównoważącego się drzewa poszukiwań binarnych, wynaleziona przez Daniela Sleatora i Roberta Tarjana, reprezentująca zbiór elementów z porządkiem liniowym.

Wykonywanie podstawowych operacji na drzewie splay wiąże się z wykonaniem procedury Splay(T, x), która powoduje taką zmianę struktury drzewa T, że węzeł x zostaje umieszczony w korzeniu przy zachowaniu porządku charakterystycznego dla drzewa BST.

Podstawowe operacje na drzewie splay, tj. wyszukiwanie elementu oraz wstawianie i usuwanie, są wykonywane w zamortyzowanym czasie \mathcal{O}(\log n), gdzie n jest liczbą elementów w drzewie [1]. Oznacza to, że dla dowolnego ciągu m operacji na drzewie splay, łączny koszt wykonania tych operacji jest rzędu \mathcal{O}(m \log n).

Spis treści

[edytuj] Operacja Splay

Operacja Splay jest procedurą kluczową dla działania drzewa typu splay. Polega ona na wykonaniu sekwencji kroków, z których każdy przybliża element x do korzenia. Każdy krok polega na wykonaniu jednej lub dwóch rotacji względem krawędzi wchodzących w skład początkowej ścieżki od x do korzenia.

W każdym kroku procedury Splay(T, x) niech p oznacza ojca węzła x, a jeśli p nie jest korzeniem, niech g oznacza z kolei jego ojca (i dziadka x). Wyróżniamy trzy przypadki kroków procedury Splay, w zależności od tego czy y jest korzeniem i od wzajemnego położenia węzłów x, p i g[1]:

[edytuj] Krok zig

Wykonywany kiedy p jest korzeniem, polega na rotacji drzewa względem krawędzi (p, x). Ten krok może być wykonany tylko jako ostatni krok procedury Splay.

[edytuj] Krok zig-zig

Wykonywany kiedy p nie jest korzeniem, a (p, x) i (g, p) są krawędziami w jedną stronę, tj. x jest lewym synem p, który jest lewym synem g, albo x jest prawym synem p, a p – prawym synem g. Polega na rotacji względem krawędzi (g, p) łączącej ojca i dziadka wierzchołka x, a potem względem krawędzi (p, x) łączącej x z jego ojcem.

[edytuj] Krok zig-zag

Wykonywany kiedy p nie jest korzeniem, oraz x jest lewym synem p, a p – prawym synem g lub odwrotnie. W tym kroku najpierw wykonuje się rotację względem krawędzi (p, x), a następnie względem krawędzi (g, x), która powstaje w wyniku pierwszej rotacji.

.

[edytuj] Implementacje podstawowych operacji

W opisie implementacji operacji na drzewie splay będziemy utożsamiali wierzchołek z przechowywaną w nim wartością.

[edytuj] Wyszukiwanie

Wyszukiwanie wierzchołka zawierającego daną wartość odbywa się jak w drzewie BST, przy czym jeżeli wyszukiwanie zakończyło się powodzeniem, a szukana wartość znajduje się w węźle x, to wywołujemy Splay(T, x). W przeciwnym wypadku wykonujemy Splay(T, y), gdzie y jest ostatnim węzłem drzewa odwiedzonym przy wyszukiwaniu.

[edytuj] Wstawienie

Aby wstawić do drzewa T wartość x, wyszukujemy x w T jak powyżej, wskutek czego w korzeniu znajduje się wartość y. Jeżeli x = y, to wstawienie jest zakończone, ponieważ oznacza to, że przed wstawieniem w T już znajdowało się x. W przeciwnym wypadku przyjmijmy, że y < x (sytuacja odwrotna jest symetryczna). Odcinamy od y jego prawe poddrzewo R i tworzymy nowy węzeł zawierający x, którego lewym synem czynimy y, a prawym – korzeń poddrzewa R[2].

[edytuj] Usunięcie

Aby usunąć z drzewa T wartość x, wyszukujemy x jak powyżej. Teraz x znajduje się w korzeniu i ma poddrzewa: lewe L i prawe R. Usuwamy wierzchołek x, a następnie wyszukujemy w L wartości x, co powoduje przemieszczenie do korzenia L największej wartości w poddrzewie L. Do korzenia L podłączamy R jako prawe poddrzewo[2].

[edytuj] Inne operacje

W drzewach splay szczególnie łatwo jest zaimplementować operacje split – dzielenia drzewa T na dwa drzewa A i B tak, że wszystkie elementy w A są mniejsze, a w B – większe od zadanej liczby x, oraz join – połączenia dwóch drzew A i B takich, że każdy element w A jest mniejszy niż każdy element w B.

Split(T, x): wyszukaj w T elementu x zgodnie z algorytmem podanym powyżej, następnie w zależności od tego, czy w korzeniu jest obecnie wartość większa czy mniejsza od x dzielimy drzewo usuwając krawędź z korzenia do lewego bądź prawego syna.

Join(T1, T2): W T1 wyszukujemy dowolnego elementu z T2, w wyniku czego w korzeniu T1 pojawia się wierzchołek z największą wartością z T1, który nie ma prawego syna. Jako jego prawego syna podłączamy korzeń drzewa T2.

[edytuj] Zalety i wady drzew splay

Drzewo splay charakteryzuje się asymptotycznie takim samym średnim kosztem dostępu, co inne samorównoważące się drzewa BST, w tym drzewa AVL oraz drzewa czerwono-czarne. Mimo to, w przypadku jednakowych prawdopodobieństw dostępu do poszczególnych elementów, drzewa splay działają w praktyce (choć nie asymptotycznie) wolniej niż inne tego typu drzewa, które dodatkowo posiadają ograniczenia na pesymistyczny koszt operacji. Zaletą drzew splay jest optymalizowanie dostępu poprzez przesuwanie wartości, do których ostatnio uzyskiwano dostęp, blisko korzenia, co powoduje ich dużą przydatność w implementacji pamięci cache i algorytmów odśmiecania.

Inną zaletą drzew splay w stosunku do drzew AVL i czerwono-czarnych jest łatwiejsza implementacja oraz niski nakład pamięciowy na przechowywanie drzewa. Sleator i Tarjan w swojej pracy [1] o drzewach typu splay opracowali sposób implementacji drzew splay wymagający takiej samej pamięci, jak standardowa implementacja drzew BST, w której w węźle przechowywane są jedynie: przechowywany element oraz dwa wskaźniki.

W przeciwieństwie do innych wyważonych drzew BST łatwo zaimplementować wariant drzew typu splay, który może przechowywać powtarzające się wartości (reprezentuje multizbiór).

Przypisy

  1. 1,0 1,1 1,2 D. Sleator, R. Tarjan Self-Adjusting Binary Search Trees [1]
  2. 2,0 2,1 K. Diks, A. Malinowski, W. Rytter, T. Waleń Algorytmy i struktury danych – słowniki, materiały dydaktyczne w serwisie wazniak.mimuw.edu.pl [2]

[edytuj] Inne źródła

  • Splay tree – artykuł na angielskiej Wikipedii, wersja z dnia 11 maja 2008.

[edytuj] Linki zewnętrzne

[edytuj] Zobacz też

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com