Wykład 3. Drzewa czerwono-czarne

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

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

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

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

Drzewa czerwono-czarne.

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

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

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:

Porządek symetryczny: right(x)

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

Drzewa poszukiwań binarnych

ALGORYTMY I STRUKTURY DANYCH

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

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

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

Algorytmy i struktury danych. wykład 5

Algorytmy i Struktury Danych

Listy, kolejki, stosy

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

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

Drzewa poszukiwań binarnych

Sortowanie bąbelkowe

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

Drzewa wyszukiwań binarnych (BST)

Podstawy Informatyki. Metody dostępu do danych

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

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

Struktury Danych i Złożoność Obliczeniowa

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

Teoretyczne podstawy informatyki

Sortowanie - wybrane algorytmy

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych

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

Tadeusz Pankowski

Struktury danych: stos, kolejka, lista, drzewo

Algorytmy i Struktury Danych, 9. ćwiczenia

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

Algorytmy i Struktury Danych.

Drzewa podstawowe poj

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

ALGORYTMY I STRUKTURY DANYCH

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

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Poprawność semantyczna

Teoretyczne podstawy informatyki

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

Ogólne wiadomości o drzewach

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

Lista liniowa dwukierunkowa

ALGORYTMY I STRUKTURY DANYCH

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

Drzewa AVL definicje

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

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

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

Algorytmy i Struktury Danych. (c) Marcin Sydow. Słownik. Tablica mieszająca. Słowniki. Słownik uporządkowany. Drzewo BST.

Algorytmy i struktury danych

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

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

ALGORYTMY I STRUKTURY DANYCH

Wstęp do programowania

Algorytmy i struktury danych Struktury danych IS/IO, WIMiIP

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

Wykład 2. Poprawność algorytmów

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

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

TEORETYCZNE PODSTAWY INFORMATYKI

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

Definicja pliku kratowego

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

TEORETYCZNE PODSTAWY INFORMATYKI

Drzewo binarne BST. LABORKA Piotr Ciskowski

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

Algorytmy i struktury danych

Podstawowe pojęcia dotyczące drzew Podstawowe pojęcia dotyczące grafów Przykłady drzew i grafów

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

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra

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

Plan wykładu. Klucz wyszukiwania. Pojęcie indeksu BAZY DANYCH. Pojęcie indeksu - rodzaje indeksów Metody implementacji indeksów.

Lista 0. Kamil Matuszewski 1 marca 2016

Metody teorii gier. ALP520 - Wykład z Algorytmów Probabilistycznych p.2

Znajdowanie skojarzeń na maszynie równoległej

Co to są drzewa decyzji

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

Nierówność Krafta-McMillana, Kodowanie Huffmana

Matematyka dyskretna

PODSTAWY INFORMATYKI wykład 6.

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Przykładowe B+ drzewo

0-0000, , , itd

System BCD z κ. Adam Slaski na podstawie wykładów, notatek i uwag Pawła Urzyczyna. Semestr letni 2009/10

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

Transkrypt:

Wykład 3 Drzewa czerwono-czarne 1

Drzewa zbalansowane Wprowadzenie Drzewa czerwono-czarne Definicja, wysokość drzewa Rotacje, operacje wstawiania i usuwania Literatura Cormen, Leiserson, Rivest, Wprowadzenie do algorytmów, rozdz. 14 2

Wprowadzenie Drzewa BST są wygodne do efektywnego implementowania operacji: Search, Successor, Predecessor, Minimum, Maximum, Insert, Delete w czasie O(h), (gdzie h jest wysokością drzewa) Jeśli drzewo jest zbalansowane (ma wtedy wysokość h = O(lg n)), operacje te są najbardziej efektywne. Operacje wstawiania i usuwania elementów mogą powodować, że drzewo przestaje być zbalansowane. W najgorszym przypadku drzewo staje się listą liniową (h = O(n))! 3

Drzewa zbalansowane Staramy się znaleźć takie metody operowania na drzewie, żeby pozostawało ono zbalansowane. Jeżeli operacja Insert lub Delete spowoduje utratę zbalansowania drzewa, będziemy przywracać tę własność w czasie co najwyżej O(lgn) tak aby nie zwiększać złożoności. Potrzebujemy zapamiętywać dodatkowe informacje, aby to osiągnąć. Najbardziej popularne struktury danych dla binarnych drzew zbalansowanych to: Drzewa czerwono-czarne: o wysokości co najwyżej 2(lg n + 1) Drzewa AVL: różnica wysokości dla poddrzew wynosi co najwyżej 1. 4

Drzewa czerwono-czarne: definicja Drzewem czerwono-czarnym (RB tree) nazywany drzewo poszukiwań binarnych, dla którego każdy węzeł posiada dodatkowy bit koloru (albo czerwony albo czarny) o następujących własnościach: 1. Każdy węzeł posiada kolor czerwony lub czarny. 2. Korzeń jest koloru czarnego. 3. Każdy liść (null) jest czarny. 4. Dla czerwonego węzła obydwoje dzieci są czarne. 5. Każda ścieżka od ustalonego węzła do liścia musi zawierać tą samą ilość czarnych węzłów. Definicja: Czarną wysokością węzła bh(x), nazywamy ilość czarnych węzłów na ścieżce prowadzącej od tego węzła do dowolnego liścia. 5

Przykład 3 26 3 17 41 2 2 14 2 21 2 30 1 47 2 10 16 19 1 1 23 1 1 28 1 38 null null 1 7 12 1 1 15 null null 1 20 null null null null 35 39 1 1 1 3 null null null null null null null null null null null null null Obok węzłów ich czarna wysokość (węzły null mają czarną wysokość 0) 6

Wysokość w drzewie czerwono-czarnym Lemat: drzewo czerwono-czarne o n wewnętrznych węzłach ma wysokość co najwyżej 2 lg(n +1) Dowód: dowiedziemy najpierw, że: dla każdego węzła x poddrzewo o korzeniu w x zawiera co najmniej 2 bh(x) 1 węzłów wewnętrznych. Dowiedziemy tego przez indukcję względem wysokości węzła dla h = 0, węzeł jest liściem, wtedy bh(x) = 0. Stąd poddrzewo o korzeniu w x zawiera 2 0 1= 0 węzłów wewnętrznych. 7

Wysokość w drzewie czerwono-czarnym Krok indukcyjny: niech x będzie węzłem wewnętrznym o wysokości h > 0, posiada więc dwóch potomków, oznaczmy ich y i z. Wtedy jeśli: y jest czarny bh(y) = bh(x) 1 y jest czerwony bh(y) = bh(x) Stąd: bh(y) bh(x) 1 Możemy teraz wykorzystać założenie indukcyjne dla y ponieważ jego wysokość ( nie czarna wysokość!) jest mniejsza od wysokości x. Stąd poddrzewo, o korzeniu w y zawiera co najwyżej 2 bh(x) 1 1 wewnętrznych węzłów. Mnożąc to przez 2 (dla oby potomków) i dodając 1, dostajemy ilość wewnętrznych węzłów dla poddrzewa o korzeniu w x nie przekraczającą (2 bh(x) 1 1) + (2 bh(x) 1 1) + 1 = 2 bh(x) 1. 8

Wysokość w drzewie czerwono-czarnym Niech teraz h będzie wysokością drzewa, o korzeniu w x. Dowiedliśmy poprzednio, że n 2 bh(x) 1 Z własności 4. drzewa RB mamy przynajmniej połowa węzłów na ścieżce od korzenia do liścia (nie licząc korzenia) musi być czarna (w drzewie nie może być sąsiednich czerwonych węzłów!) Stąd czarna wysokość drzewa wynosi co najmniej h/2, więc ilość węzłów wewnętrznych n wyniesie: n 2 h/2 1 Daje to : n +1 2 h/2 lg (n +1) 2 lg h/2 h 2 lg (n+1) 9

Statyczne operacje dla drzewa RB Operacje Max, Min, Search, Successor oraz Predecessor dla drzewa RB zajmują czas O(lg n). Dowód: operacje takie mogą być przeprowadzanie analogicznie, jak dla drzew BST, ponieważ nie modyfikują one drzewa (kolor węzła może być przy nich ignorowany). Dla drzew BST umiemy takie operacje przeprowadzać w czasie O(h) gdzie h jest wysokością drzewa, a z lematu dostajemy wysokość drzewa O(lg n). 10

Dynamiczne operacje dla drzewa RB Operacje Insert oraz Delete modyfikują drzewo. Po przeprowadzeniu takiej operacji drzewo może przestać być zbalansowane, oraz stracić własności drzewa RB. Dla utrzymania struktury RB, musimy niekiedy zmieniać kolory węzłów i ponownie balansować drzewo, zmieniając położenie poddrzew. Ponowne balansowanie odbywa się przy pomocy rotacji, a następnie przekolorowaniu węzłów (jeśli zajdzie taka potrzeba). 11

Rotacje Rotacja w prawo y x x δ Rotacja w lewo α y α β β δ α x β i x y δ α x y i β y δ 12

Rotacje mogą przywrócić własność RB y Rotacja w prawo x x δ α y α β Konflikt: dwa sąsiednie węzły czerwone β δ Rotacja rozwiązuje konflikt! 13

Left-Rotate Left-Rotate(T,x) y right[x] right[x] left[y] parent[left[y]] x parent[y] parent[x] if parent[x] = null then root[t] y else if x = left[parent[x]] then left[parent[x]] y left[y] x else right[parent[x]] y parent[x] y Inicjuj y Zamień lewe poddrzewo y na prawe poddrzewo x Przyłącz ojca x jako ojca y Przyłącz x jako lewego syna y 14

Przykład: Left-Rotate (1) 7 4 11 x 3 6 9 18 y 2 14 19 12 17 22 20 15

Przykład: Left-Rotate (2) 7 4 11 x 2 3 6 α 9 14 18 19 y 12 17 β 20 22 δ 16

Przykład: Left-Rotate (3) 7 4 18 y 3 6 11 x 19 2 9 α 14 12 17 β 20 22 δ 17

Przykład: Left-Rotate (4) 7 4 18 y 3 6 11 x 19 2 9 14 22 12 17 20 18

Rotacje Zachowują własność drzewa BST. Zajmują stały czas O(1) stała ilość operacji na wskaźnikach. Rotacje w lewo i w prawo są symetryczne. 19

Operacja wstawiania (INSERT) (1) Nowy węzeł wstawiamy tak, jak do zwykłego drzewa BST i kolorujemy na czerwono. Jeśli własności drzewa RB zostały zaburzone, to naprawiamy drzewo poprzez zamianę kolorów i odpowiednie rotacje. Które z własności mogą zostać zaburzone? 1. Każdy węzeł jest czerwony lub czarny OK 2. Korzeń jest czarny? 3. Każdy liść (null) jest czarny OK 4. Obydwaj potomkowie czerwonego węzła są czarni? 5. Każda ścieżka od węzła do liścia ma tę samą ilość czarnych węzłów OK 20

Operacja wstawiania (INSERT) (2) Zaburzenia i metody ich naprawy: 2. jeśli wstawiany węzeł x jest korzeniem przekolorujemy go na czarno OK 4. co zrobić, kiedy ojciec jest również czerwony? Rozpatrzymy trzy przypadki dla wstawianego węzła: przypadek 1: stryj wstawionego węzła jest też czerwony przypadek 2: stryj jest czarny, a wstawiany węzeł jest prawym potomkiem przypadek 3: stryj jest czarny, a wstawiany węzeł jest lewym potomkiem 21

przypadek 1: stryj wstawionego węzła jest też czerwony Jeżeli z ma zarówno czerwonego ojca (B) i stryja (D), zmieniamy kolor ojca i stryja na czarny, a dziadka (C) na czerwony: dziadek[z] ojciec[z] z A α ß B C D γ δ ε Zmiany koloru stryj[z] B A α ß C D γ δ ε - jeżeli C jest nowym korzeniem kolorujemy go na czarno - Jeżeli dziadek C dalej zaburza własności drzewa naprawiamy dalej drzewo (w C) 22

przypadek 2: stryj wstawionego węzła jest czarny, a z jest prawym potomkiem Jeżeli z jest prawym potomkiem czerwonego węzła A i ma czarnego stryja D, przeprowadzamy rotację lewą dla A: C Lewa rotacja C ojciec[z] α z A ß B γ D δ ε stryj[z] B A α ß D γ δ ε to doprowadza do sytuacji opisanej przez przypadek 3 23

przypadek 3: stryj wstawionego węzła jest czarny, a z jest lewym potomkiem Jeżeli z jest lewym potomkiem czerwonego ojca B i ma czarnego stryja D, przeprowadzamy prawą rotację w C i zmieniamy kolor B i C: dziadek[z] ojciec[z] z A B α ß C D Prawa rotacja Zmiana koloru stryj[z] γ δ ε α ß γ A B C D δ ε Po takiej operacji nie ma już zaburzenia własności drzewa RB! 24

RB: wstawianie Aby wstawić nowy węzeł z do drzewa RB, należy: 1. Wstawić nowy węzeł z nie zważając na kolory. 2. Kolorujemy z na czerwono. 3. Naprawiamy otrzymane drzewo stosując, w razie potrzeby, przypadki 1,2 i 3 Złożoność czasowa tej operacji wynosi O(lg n) 25

RB: Insert-Fixup (pseudokod) RB-Insert-Fixup(T,z) while color[parent[z]] = red do y z s uncle if color[y] = red then do Case 1 else do if z = right[parent[z]] then do Case 2 do Case 3 color[root[t]] black 26

RB: Insert-Fixup 1. Węzeł wstawiany jest czerwony 2. Jeśli parent[z] jest korzeniem drzewa, kolorujemy do na czarno 3. Jeżeli własności drzewa zostały zaburzone to tylko jedna własność może być niespełniona i jest to albo wł. 2, albo wł. 4. Własność 2: korzeń drzewa jest czerwony Własność 4: zarówno z, jak i jego ojciec (parent[z]) są czerwoni 27

Przykład (1) 11 2 14 1 7 15 ojciec[z] 4 5 8 stryj[z] z Zaburzenie: czerwony węzeł z oraz jego ojciec Przyp. 1: stryj z jest czerwony zmieniamy kolor 28

Przykład (2) 11 ojciec[z] 2 14 stryj[z] 1 7 z 15 5 8 4 Zaburzenie: czerwony węzeł z oraz jego ojciec Przyp. 2: stryj z jest czarny i z jest prawym potomkiem rotacja w lewo 29

Przykład (3) 11 ojciec[z] 7 14 stryj[z] z 2 8 15 1 5 4 Zaburzenie: czerwony węzeł z oraz jego ojciec Przyp. 3: stryj z jest czarny i z jest lewym potomkiem potomkiem rotacja w prawo + zmiana koloru 30

Przykład (4) 7 2 11 1 5 8 14 4 15 Dostajemy poprawne drzewo RB Nie ma potrzeby dalszych działań! 31

RB: usuwanie (1) Korzystamy ze standardowej operacji usuwania dla BST. Jeżeli zaburzymy własności drzewa RB, to naprawiamy je wykorzystując rotacje i zmiany kolorów węzłów. Jakie własności drzewa mogą zostać zaburzone? 1. Każdy węzeł ma kolor czarny lub czerwony OK 2. Korzeń jest czarny? 3. Każdy liść (null) jest czarny OK 4. Obaj potomkowie czerwonego węzła są czarni? 5. Każde ścieżka od wybranego węzła do liścia zawiera tyle samo węzłów czarnych? 32

RB: usuwanie (2) Zaburzenia: Mogą zostać zaburzone własności 2, 4, 5. Mamy cztery przypadki: Przypadek 1: brat w węzła x jest czerwony (x sklejony węzeł) Przypadek 2: brat w węzła x jest czarny, podobnie jak obaj potomkowie w Przypadek 3: brat w węzła x jest czarny, lewy potomek w jest czerwony, prawy - czarny Przypadek 4: brat w węzła x jest czarny, obaj potomkowie w są czerwoni. 33

Przykład (1) usuwane z 2 7 11 1 5 8 14 4 15 sklejane x 34

Przykład (2) 7 4 11 1 5 8 14 15 Nie ma zaburzeń! 35

Przypadek 1: brat x jest czerwony Przypadek 1 przekształca się w jeden z pozostałych przypadków poprzez zamianę kolorów węzłów B i D oraz zastosowanie lewej rotacji: x A α ß B D C γ δε E ζ Rotacja w lewo Zmiana koloru w brat[x] x A α ß B γ C D δ E ε ζ w brat[x] Nie ma zmiany czarnej wysokości! 36

Przypadek 2: brat x i obaj jego potomkowie są czarni Przypadek 2 przenosimy problem o jeden poziom wyżej zmieniając kolor D na czerwony: B Zmiana koloru B nowe x x A α ß C D γ δε E w brat[x] ζ A α ß D C γ δε E ζ Zmniejszamy o 1 czarną wysokość potomków D! 37

Przypadek 3: brat x jest czarny, a jego potomkowie czerwony i czarny Przypadek ten przechodzi w przypadek 4 przez zamianę koloru węzłów C i D oraz prawą rotacje: Prawa rotacja Zmiana kolorów x A α ß B C D γ δε E w brat[x] ζ x A α ß Nie ma zmian czarnej wysokości! B γ C δ D ε nowy w E ζ 38

Przypadek 4: brat x jest czarny, a jego prawy potomek czerwony Zaburzenie można usunąć poprzez zamianę kolorów oraz rotację w lewo: Rotacja w lewo x A α ß B D C E γ δε Zmiana kolorów w brat[x] ζ A B C D α ßγ δ ε E ζ Czarna wysokość węzłów poniżej A zwiększa się o 1! 39

RB-Delete Aby usunąć węzeł x z drzewa RB należy: 1. Usuwamy węzeł x tak, jak z drzewa BST nie zważając na kolory. 2. Naprawiamy drzewo (jeśli jest taka potrzeba) stosując przypadki 1, 2, 3, i 4, aż do naprawienia drzewa Złożoność takiej operacji wynosi O(lg n) 40

RB-Delete-Fixup (pseudokod) RB-Delete-Fixup(T, x) while x root[t] and color[x] = black do if x = left[parent[x]] po tym dostajemy przyp. 2 then w x s brother if color[w] = red then do Case 1 if color[w] = black and color[right[w]]= black and color[left[w]]= black then do Case 2. else if color[w] = black and color[right[w]] = black then do Case 3 if color[w] = black and color[right[w]] = red then do Case 4 x przechodzi na parent[x] po tym dostajemy przyp. 4 else to samo dla x = right[parent[x]] color[x] black po tym dostajemy x = root[t]. 41

Złożoność RB-Delete Jeśli zajdzie przyp. 2 w następstwie przyp. 1, to nie wchodzimy ponownie do pętli ojciec x jest czerwony po wykonaniu przyp. 2. Jeśli wykonane zostają przyp. 3 lub 4 również nie wchodzimy ponownie do pętli. Jedyny sposób wielokrotnego wykonywania pętli to otrzymywanie przypadku 2 w następstwie przyp. 2. Stąd wchodzimy do pętli co najwyżej O(h) razy. Daje to złożoność O(lg n). 42

Drzewa RB - podsumowanie Pięć prostych zasad kolorowania gwarantuje, że wysokość drzewa nie przekroczy 2(lg n + 1) = O(lg n) Wstawianie i usuwanie odbywa się na takiej samej zasadzie jak dla zwykłych drzew BST Operacje te mogą zaburzać własności drzewa RB. Przywracanie tych własności odbywa się poprzez rotacje i przekolorowanie niektórych węzłów We wszystkich przypadkach wymagany jest czas co najwyżej O(lg n). 43