Drzewa czerwono-czarne.

Podobne dokumenty
ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Wykład 3. Drzewa czerwono-czarne

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Porządek symetryczny: right(x)

Wykład 2. Drzewa poszukiwań binarnych (BST)

Wykład 8. Drzewa AVL i 2-3-4

Wysokość drzewa Głębokość węzła

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Listy, kolejki, stosy

Drzewa poszukiwań binarnych

Koszt zamortyzowany. Potencjał - Fundusz Ubezpieczeń Kosztów Algorytmicznych

Wykład 6. Drzewa poszukiwań binarnych (BST)

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

ALGORYTMY I STRUKTURY DANYCH

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Struktury Danych i Złożoność Obliczeniowa

Algorytmy i Struktury Danych

Przypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Drzewa poszukiwań binarnych

Algorytmy i struktury danych. wykład 5

Lista liniowa dwukierunkowa

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Drzewa wyszukiwań binarnych (BST)

Tadeusz Pankowski

Podstawy Informatyki. Metody dostępu do danych

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych

Definicja pliku kratowego

Sortowanie bąbelkowe

Wykład 8. Drzewo rozpinające (minimum spanning tree)

Drzewo binarne BST. LABORKA Piotr Ciskowski

Algorytmy i struktury danych

Algorytmy i Struktury Danych, 9. ćwiczenia

Algorytmy i Struktury Danych.

Ogólne wiadomości o drzewach

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Bazy danych - BD. Indeksy. Wykład przygotował: Robert Wrembel. BD wykład 7 (1)

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Teoretyczne podstawy informatyki

Drzewa podstawowe poj

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Algorytmy i struktury danych Struktury danych - drzewa IS/IO, WIMiIP

Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych

Algorytmy i struktury danych

Drzewa AVL definicje

. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019

Ogólne wiadomości o grafach

ALGORYTMY I STRUKTURY DANYCH

dr inż. Paweł Myszkowski Wykład nr 11 ( )

Sortowanie - wybrane algorytmy

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew

Struktury danych: stos, kolejka, lista, drzewo

UNIWERSYTET GDAŃSKI MATERIAŁY DYDAKTYCZNE DO PRZEDMIOTU MATEMATYKA DYSKRETNA. pod redakcją: Hanna Furmańczyk Karol Horodecki Paweł Żyliński

Teoretyczne podstawy informatyki

Przykładowe B+ drzewo

Matematyka dyskretna - 7.Drzewa

Strategia "dziel i zwyciężaj"

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Edytor tekstu MS Word 2010 PL. Edytor tekstu MS Word 2010 PL umożliwia wstawianie i formatowanie tabel.

Stos LIFO Last In First Out

Dynamiczne drzewa. Piotr Sankowski. - p. 1/27

Twój wynik: 4 punktów na 6 możliwych do uzyskania (66,67 %).

ALGORYTMY I STRUKTURY DANYCH

Poprawność semantyczna

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

AiSD zadanie drugie. Gliwiński Jarosław Marek Kruczyński Konrad Marek Grupa dziekańska I5. 10 kwietnia 2008

Wstęp do programowania

Programowanie w VB Proste algorytmy sortowania

BAZY DANYCH. Microsoft Access. Adrian Horzyk OPTYMALIZACJA BAZY DANYCH I TWORZENIE INDEKSÓW. Akademia Górniczo-Hutnicza

. Podstawy Programowania 2. Drzewa bst - część pierwsza. Arkadiusz Chrobot. 22 maja 2016

PODSTAWY INFORMATYKI wykład 6.

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Bazy danych. Andrzej Łachwa, UJ, /15

Algorytmy i struktury danych Struktury danych IS/IO, WIMiIP

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Co to są drzewa decyzji

Sortowanie. Bartman Jacek Algorytmy i struktury

Instrukcje dla zawodników

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Programowanie obiektowe

STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA. Część 3. Drzewa Przeszukiwanie drzew

Algorytmy zachłanne. dr inż. Urszula Gałązka

dodatkowe operacje dla kopca binarnego: typu min oraz typu max:

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Podstawy Informatyki. Wykład 6. Struktury danych

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Transkrypt:

Binboy at Sphere http://binboy.sphere.p l Drzewa czerwono-czarne. Autor: Jacek Zacharek Wstęp. Pojęcie drzewa czerwono-czarnego (red-black tree) zapoczątkował Rudolf Bayer w książce z 1972 r. pt. Symmetric Binary B-Trees: Data Structure and Maintenance Algorithms. Nową strukturę Bayer nazywał początkowo symetrycznymi drzewami binarnymi. Później zagadnieniu przyglądali się L. J. Guibas i R. Sedgewick, którzy dodali własności czerwono-czarne. Drzewa RB są szczególnym przypadkiem drzew przeszukiwań binarnych (BST). Aby w pełni zrozumieć artykuł należy zapoznać się z podstawowymi pojęciami/operacjami na drzewach BST. Podstawowe pojęcia. Definicja: Drzewo czerwono-czarne (RB) jest to drzewo przeszukiwań binarnych (BST) o następujących 5 własnościach: 1) każdy węzeł ma jeden z dwóch kolorów: czerwony lub czarny, 2) korzeń ma kolor czarny, 3) każdy pusty liść (NIL) jest czarny, 4) synowie czerwonego wierzchołka są czarni, 5) każda ścieżka z korzenia do jakiegokolwiek liścia zawiera tą samą liczbę czarnych węzłów. Ostatni podpunkt jest własnością, która powoduje zrównoważenie całego drzewa. Poprzez wymuszenie identycznej czarnej wysokości dla węzłów na tej samej wysokości, wymuszana jest tym samym wysokość całego drzewa. Czarna wysokość węzła v, oznaczana jako bh(v), jest to liczba czarnych węzłów znajdujących się na dowolnej ścieżce z węzła v (wykluczając v) do któregokolwiek liścia. Przykładowe drzewo czerwono-czarne. Wszystkie powyższe własności, zastosowane dla drzewa przeszukiwań binarnych, tworzą nową, udoskonaloną, strukturę danych. Drzewa czerwono-czarne, lepiej niż drzewa innego typu, sprawdzają się w szybkim wyszukiwaniu elementów. Operacje takie jak dodanie/usuwanie, wyszukiwanie elementu, wyszukiwanie elementu najmniejszego/największego, wskazanie następnika/poprzednika danego elementu działają w czasie O(lg n).

Wyszukiwanie. Jako że, drzewo czerwono-czarne jest drzewem przeszukiwań binarnych, wyszukiwanie elementu o kluczu k odbywa się tak samo jak wyszukiwanie w standardowym drzewie BST. Rekurencyjna funkcja Search(v, k) jako parametry przyjmuje wskaźnik do korzenia v oraz wartość klucza k do znalezienia. Funkcja zwraca wskaźnik do elementu o wartości klucza k lub wartość NIL, jeżeli taki klucz nie został znaleziony: Search(v, k) if (v jest liściem) lub (key[v] = k) then return v if k < key[v] then return Search(left[v], k) else return Search(right[v], k) Rotacja. Rotacja jest kluczową procedurą wykorzystywaną w procesie wstawiania i usuwania. Schemat przedstawia działanie 2 odmian: lewej i prawej rotacji. Rotacja zachowuje porządek inorder kluczy. Lewa rotacja może być wykonana tylko, gdy prawy syn x jest niepusty. Lewa rotacja polega na obrocie wokół krawędzi między węzłami x i y. W wyniku rotacji y staje się nowym korzeniem poddrzewa, x staje się jego lewym synem, a lewy syn y zostaje prawym synem węzła x. Ogólny schemat rotacji. Wstawianie. Operacja wstawiania nowych elementów jest operacją dość skomplikowaną. W odróżnieniu od drzew BST, wstawiając element musimy pamiętać, aby zachować zrównoważenie drzewa. Wstawienie elementu w dowolnym miejscu może powodować zaburzenie struktury drzewa RB. Aby uniknąć pomyłek należy zapamiętać następujące własności: - Początkowo wstawiamy element tak, jak do standardowego drzewa BST. - Kolor każdego nowo dodanego elementu jest czerwony. - Jeżeli rodzic wstawionego węzła jest czarny to własność drzewa została zachowana. - Jeżeli rodzic wstawionego węzła jest czerwony to własność 4 została zaburzona (rodzic i syn mają kolor czerwony). Aby przywrócić własność należy przekolorować niektóre węzły i zmienić relację (wartości wskaźników) między niektórymi węzłami. Insert(T, v) if T = NIL //T jest pustym drzewem then v jest korzeniem i jest czarny przerwij if Search(T, key[v]) = NIL //sprawdzenie, czy elementu v nie ma już w drzewie then wstaw v do drzewa T tak jak w drzewie BST pokoloruj v na czerwono if rodzic v jest czerwony then przywróć własność drzewa RB wg 3 przypadków poniżej else przerwij //element v jest już w drzewie Przywracanie własności drzewa RB następuje tylko w sytuacji, gdy rodzic dodanego węzła jest czerwony. Oto 3 możliwe przypadki takiego zdarzenia: Przypadek 1. CZERWONY WUJEK

Pierwsza możliwa sytuacja w przypadku czerwonego wujka. Druga możliwa sytuacja w przypadku czerwonego wujka. Nowo dodany węzeł jest zaznaczony niebieską obwódką. Aby pozbyć się ustawienia dwóch czerwonych węzłów (ojciec-syn) zmieniamy kolor ojca, dziadka oraz pradziadka dodanego węzła. W tym przypadku pradziadek powinien zmienić kolor na czerwony, jednak mając na uwadze drugą własność drzew RB pradziadek zmienia kolor z powrotem na czarny, gdyż jest korzeniem. Przypadek 2. CZARNY WUJEK, PRAWY SYN kolejność: a - b - c - d Nowo dodany węzeł jest zaznaczony niebieską obwódką. W pierwszej kolejności poddrzewo przechodzi proces rotacji (b-c) tak, że nowy wierzchołek i ojciec zmieniają poziom w drzewie. Po rotacji kolorujemy nowy węzeł na czarno, a stary korzeń na czerwono (d). Jak widać na rysunku przed rotacją wysokość drzewa wynosiła 2, po rotacji zmniejszyła się do 1. Przypadek 3. CZARNY WUJEK, LEWY SYN kolejność: a - b - c

Przypadek 3 jest bardzo zbliżony do przypadku 2. Faktycznie został wykonany podobny zabieg, tylko dla innego węzła. Ponownie dokonano zabiegu rotacji, ale tym razem ojciec został umieszczony na szczycie poddrzewa, a nie nowo dodany wierzchołek. Podobnie jak poprzednio zmieniono kolory odpowiednich węzłów. Wysokość poddrzewa zmniejszyła się o jeden. PRZYKŁAD WSTAWIANIA NOWEGO WĘZŁA DO DRZEWA CZERWONO-CZARNEGO: Oryginalne drzewo. W następnych rysunkach czarne puste liście zostały pominięte ze względu na czytelność schematu. Wstawiamy wierzchołek oznaczony jako 4. Własność drzewa RB została zaburzona czerwony zarówno ojciec jak i syn. Zaznaczono nowy węzeł jako x i jego wujka jako y. y jest czerwony, więc rozważamy przypadek 1. Zmieniono kolor węzła 5, 7 i 8.

W następnym kroku x wskazuje na swojego dziadka 7. Ojciec x jest nadal czerwony, więc nie została przywrócona własność drzewa RB. Oznaczamy wujka x jako y. W tej sytuacji wujek jest czarny, więc rozważamy przypadek 2. x wskazuje teraz na swojego ojca 2, po czym zastosowano rotację lewą. W dalszym ciągu nie jest to drzewo czerwono-czarne.

Zmieniono kolory węzłów 7 i 11 oraz zastosowano rotację prawą. Dopiero tak powstałe drzewo posiada wszystkie własności drzewa RB. Usuwanie. Podobnie, jak w przypadku wstawiania, usuwanie wymaga dodatkowej uwagi w celu zachowania zrównoważenia drzewa. Tym razem, zamiast martwić się o rodzica wstawianego elementu, skupić należy uwagę na kolorze usuwanego węzła. Należy pamiętać, że: - jeżeli usuwany wierzchołek jest czerwony, czarna wysokość drzewa nie jest zakłócona, - jeżeli usuwany wierzchołek jest czarny powoduje on zakłócenie zrównoważenia drzewa i należy naprawić czarną wysokość dla każdej ścieżki w drzewie. Delete(T, v) if v jest liściem then usuń v //zostaje zastąpiony czarnymi pustymi liśćmii if v jest czerwony //nie ma zmiany czarnej wysokości then koniec usuwania if v jest czarny then zrównoważ drzewo wg 4 przypadków poniżej else //v nie jest liściem znajdź najbardziej odpowiednie dziecko u do zamiany zamień v z u usuń v //zostaje zastąpiony czarnymi pustymi liśćmi if v jest czerwony //nie ma zmiany czarnej wysokości then koniec usuwania if v jest czarny then zrównoważ drzewo wg 4 przypadków poniżej Operację usuwania wykonuje się oczywiście tylko przy założeniu, że wierzchołek v istnieje w drzewie T. 4 przypadki, na które należy zwrócić uwagę w przypadku usuwania czarnego wierzchołka. Przypadek 1. CZERWONY BRAT

kolejność: a - b - c - d W tym przypadku usunięcie wierzchołka 20 powoduje, ze w jego miejsce trafia syn 10 (b). Drzewo potrzebuje powtórnego zrównoważenia. Po wykonaniu rotacji lewej (c) wierzchołek x oraz jego brat muszą zostać przekolorowane (d). Przypadek 2. CZARNY BRAT, CZARNY BRATANEK kolejność: a - b - c W tym przypadku po usunięciu węzła 20, węzeł 10 trafia w jego miejsce. W odróżnieniu od przypadku pierwszego, tutaj następuje zmiana wysokości drzewa. Należy pokolorować x na czarno, brata na czerwono, ojca x na czarno, o ile to już nie zostało zrobione. Taki zabieg może powodować zachwianie własności RB drzewa. Należy sprawdzić czy relacje ojciec-dziadek są zachowane w tym przypadku i dalej w górę drzewa. Jest to jeden z najprostszych przypadków usuwania, gdyż zmienia się tylko kolory węzłów, a nie połączenia między nimi. Przypadek 3. CZARNY BRAT, LEWY CZERWONY BRATANEK kolejność: a - b - c - d

Po usunięciu wierzchołka 35, węzeł 40 trafia w jego miejsce. Zgodnie z własnością 5 tak powstała drzewo nie jest drzewem czerwono-czarnym (b). Lewy syna brata x (10) jest czerwony, więc należy wykonać zabieg rotacji prawej (c) wokół brata x. Następnie należy zmienić kolor (d). W dalszym ciągu nie ma gwarancji, że tak zmodyfikowane drzewo jest drzewem RB, więc potrzebna jest jeszcze jedna rotacja, tym razem wokół nowego brata x węzła 10. Ten zabieg jest podobny do sytuacji, gdyby wierzchołek 20 oryginalnie miał czerwonego prawego syna, więc rozważmy przypadek 4. Przypadek 4. CZARNY BRAT, PRAWY CZERWONY BRATANEK kolejność: a - b - c - d Powtórnie, 35 jest usuwany, a 40 wchodzi na jego miejsce. Brat x ma czerwone prawe dziecko (przypadek 3d). Po zabiegu rotacji, prawy bratanek jest na szczycie poddrzewa (c). Potrzebna jest zmiana koloru niektórych węzłów. Należy pokolorować starego brata x (20) oraz nowego brata (30) na czarno. X dostaje kolor czarny, a nowy dziadek (10) kolor taki sam jaki miał rodzic x przed rotacja (30 czerwony). Linki. http://www.eli.sdsu.edu/courses/fall95/cs660/notes/redblacktree/redblack.html http://www.oopweb.com/algorithms/documents/sman/volume/s_rbt.txt - implementacja w C Bibliografia. T.H. Cormen - Wprowadzenie do algorytmów. Wikipedia - encyklopedia internetowa Wyświetleń: 5283 Jacek Zacharek (O użytkowniku) zachar@os.pl Liczba punktów: 75 Użytkownik przyłączył się: 03.05.2005 i opublikował już: 1 artykuł. Copyright Š 2002-2006 by Binboy & Sphere