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



Podobne dokumenty
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:

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

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.

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

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

Wykład 3. Drzewa czerwono-czarne

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

Algorytmy i Struktury Danych

ALGORYTMY I STRUKTURY DANYCH

Listy, kolejki, stosy

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

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

Porządek symetryczny: right(x)

Drzewa poszukiwań binarnych

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

Drzewa poszukiwań binarnych

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Algorytmy i struktury danych. wykład 5

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

Algorytmy i Struktury Danych, 9. ćwiczenia

Podstawy Informatyki. Metody dostępu do danych

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

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

Struktury Danych i Złożoność Obliczeniowa

Sortowanie bąbelkowe

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

Teoretyczne podstawy informatyki

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

DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH.

Podstawy Informatyki. Sprawność algorytmów

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

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

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

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

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

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

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

Struktury danych: stos, kolejka, lista, drzewo

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Tadeusz Pankowski

Drzewa wyszukiwań binarnych (BST)

Teoretyczne podstawy informatyki

Dynamiczne drzewa. Marian M. Kędzierski. 26 listopada Wstęp Euler-Tour Trees Dynamiczna spójność Algorytm Dinica Link-Cut Trees

0-0000, , , itd

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

Programowanie obiektowe

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

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

Lista 0. Kamil Matuszewski 1 marca 2016

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

Algorytmiczna teoria grafów

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy i struktury danych

Sortowanie - wybrane algorytmy

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

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

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

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle

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

Sortowanie. Bartman Jacek Algorytmy i struktury

Definicja pliku kratowego

Wstęp do programowania

Złożoność obliczeniowa zadania, zestaw 2

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

Zaawansowane algorytmy i struktury danych

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.

Algorytmy funkcjonalne i struktury danych

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

V Konkurs Matematyczny Politechniki Białostockiej

Algorytmy i Struktury Danych

Temat: Algorytm kompresji plików metodą Huffmana

Poprawność semantyczna

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

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

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

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

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

1 Układy równań liniowych

Laboratorium nr 7 Sortowanie

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Zasady analizy algorytmów

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

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

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

3. Macierze i Układy Równań Liniowych

Złożoność algorytmów. Wstęp do Informatyki

Łyżwy - omówienie zadania

Lista liniowa dwukierunkowa

a) 7 b) 19 c) 21 d) 34

Abstrakcyjne struktury danych - stos, lista, drzewo

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

Python: JPEG. Zadanie. 1. Wczytanie obrazka

Transkrypt:

Koszt zamortyzowany Jeśli mamy ciąg operacji, to koszt zamortyzowany jednej z nich jest sumarycznym kosztem wykonania wszystkich operacji podzielonym przez liczbę operacji. Inaczej mówiąc jest to, dla danego ciągu operacji, "średni" koszt jednej z nich. Zauważmy, że nie mówimy tu nic o prawdopodobieństwie - model jest deterministyczny. Na przykład w algorytmie Najbliższy-Mniejszy-Sąsiad rozważmy ciąg operacji : while Koszt pojedynczej operacji może być liniowy, również sumaryczny koszt ciągu tych operacji jest liniowy. Zatem pesymistyczny koszt jednej operacji jest tutaj liniowy, natomiast zamortyzowany koszt jednej operacji jest ograniczony przez stałą. W tym przypadku wiemy, że każde sprawdzenie z wynikiem negatywnym odbywa się tylko raz dla danej wartości. Możemy powiedzieć, że księgujemy koszt operacji elementom o tej własności. Nieformalna metoda księgowania kosztów polega na rozdzielaniu (księgowaniu) kosztu, a następnie szacowaniu sumarycznej złożoności poprzez sumowanie wszystkich zaksięgowanych kosztów. Operacje pożyczają w pewnym sensie fundusze na pokrycie kosztów z różnych źródeł. Metoda ta będzie wykorzystana do analizy algorytmu dla interesującego problemu Find-Union. Typowym przykładem liczenia kosztu w sposób zamortyzowany jest analiza generacji reprezentacji binarnych kolejnych liczb naturalnych od 0 do przez dodawanie jedynki. W jednym kroku zastępujemy najdłuższy ciąg jedynek od końca zerami, następnie wstawiamy jedną jedynkę. Ponieważ w sumie wstawiliśmy jedynek w ciągu operacji, to zamortyzowana liczba operacji zamiany zera na jedynkę wynosi 1. Zasada magazynu. W ostatnim przykładzie możemy powiedzieć, że analizowaliśmy koszt tzw. metodą magazynu. W każdej operacji koszt jest proporcjonalny do liczby przedmiotów włożonych do magazynu lub do liczby przedmiotów wyjętych z magazynu. Magazyn początkowo jest pusty. Wtedy całkowity koszt jest proporcjonalny do liczby przedmiotów włożonych. W przypadku generowania liczb binarnych do magazynu wkładamy nowe jedynki, a wyjmujemy te jedynki, które zamieniamy na zera. Potencjał - Fundusz Ubezpieczeń Kosztów Algorytmicznych Metodę magazynu można uogólnić na tzw. metodę potencjału. Niech będzie pewną liczbą naturalną (włączając zero) odpowiadającą potencjałowi po wykonaniu -tej operacji. Wyglądałoby to mniej tajemniczo, gdybyśmy zamiast pisali. Niech będzie rzeczywistym kosztem wykonania i-tej operacji. Zakładamy, że potencjał jest początkowo zero, nigdy nie jest ujemny oraz że: oraz. Wtedy całkowity koszt jest tego samego rzędu co magazynu jest w tym sensie potencjałem.. W naszych poprzednich przykładach rozmiar Można powiedzieć obrazowo, że potencjał jest kapitałem Funduszu Ubezpieczeń Kosztów Algorytmicznych. Jeśli wszystkie wpłaty są takie same, to koszt zamortyzowany jednej operacji jest wpłatą (składką), którą ta operacja wpłaca do funduszu. Operacja najpierw wpłaca swoją składkę, a następnie pobiera z funduszu tyle, żeby proporcjonalnie (być może z dokładnością do stałego współczynnika) zapłacić za swój koszt wykonania. Dzięki temu, że wiele operacji pobiera z funduszu znacznie mniej niż wpłaca, niektóre operacje mogą jednorazowo pobrać dużą kwotę, którą płacą za koszt wykonania. Istotne jest jedynie, żeby Fundusz nie

zbankrutował i kapitał nie zszedł poniżej zera. Możliwa jest również sytuacja, gdy Fundusz startuje z kapitałem początkowym. Wtedy kapitał ten wlicza się do całkowitego kosztu algorytmu, który się dodaje do sumy składek. Rozważmy przykłady ilustrujące wykorzystanie potencjału. Najistotniejsze jest określenie składek. Tablica dynamiczna Przypuśćmy, że mamy dynamiczną tablicę. W każdym momencie wiemy, ile elementów w tablicy jest aktywnych, elementy nieaktywne zaznaczamy. W każdej operacji, jeśli liczba elementów nieaktywnych jest mniejsza od wielkości tablicy, to tworzymy tablicę dwa razy mniejszą i tam przepisujemy elementy aktywne. Starą tablicę zwalniamy. W przeciwnym wypadku jeśli chcemy dodać element, który spowoduje przepełnienie tablicy, to całą tablicę kopiujemy do tablicy dwa razy większej. Początkowo tablica ma rozmiar 1. Zakładamy, że operacją dominującą jest kopiowanie aktywnego elementu do nowej tablicy. Jeśli mamy operacji, to całkowity koszt kopiowania jest liniowy. Wystarczy w każdej operacji dać składkę 4 jednostek do Funduszu (potencjału). Wtedy koszt jednej dużej operacji przepisywania zamortyzuje się zmianą potencjału. Zastąpienie kolejki dwoma stosami Jedną kolejkę Q można zastąpić dwoma stosami. Jeśli pierwszy element stosu lub kolejki w reprezentacji poziomej jest w ciągu na pierwszej pozycji (tzn. pobieramy, stawiamy za ), oraz, to dla pewnego mamy: Inaczej mówiąc, pierwszy element kolejki jest na wierzchołku drugiego stosu, a ostatni element kolejki jest na wierzchołku pierwszego stosu. Operacja wstawiania do Q odpowiada wstawieniu elementu do, operacja pobrania z Q odpowiada pobraniu elementu z S2 z tym, że jeśli jest pusty, to przepisujemy najpierw wszystkie elementy z S1 do S2. Niech operacją dominującą będzie jedna operacja stosowa (wstawienie lub pobranie pojedynczego elementu ze stosu). Wtedy ciąg operacji kolejkowych, startujących od pustej kolejki, ma koszt liniowy w tej implementacji. Wystarczy, że każda operacja wkłada do Funduszu składkę 3 jednostek. Dowód tego pozostawiamy jako ćwiczenie. Zastąpienie kolejki dwustronnej trzema stosami Rozważmy podobny problem - z tym, że nasza kolejka jest dwustronna, możemy wkładać i pobierać element z każdego z dwóch końców kolejki. Wtedy możemy taką kolejkę zastąpić trzema stosami tak, że teraz również każda operacja kolejkowa będzie mieć zamortyzowany koszt stały. Elementy kolejki trzymamy w dwóch stosach S1, S2 tak, jak poprzednio. Niezmiennikiem jest to, że oba stosy są niepuste, lub mają w sumie co najwyżej jeden element. Zapewniamy zachodzenie niezmiennika wykorzystując trzeci stos. W momencie, gdy jeden ze stosów ma więcej niż jeden element, a drugi jest pusty, korzystając z trzeciego stosu, doprowadzamy do reprezentacji aktualnej kolejki przez stosy S1 i S2 tak, aby miały one tę samą liczbę elementów (z dokładnością do 1). Pozostawiamy jako ćwiczenie dowód (metodą potencjału) tego, że zamortyzowany koszt jest stały..

Rotacja drzewa w informatyce operacja polegająca na lokalnej zmianie struktury binarnego drzewa poszukiwań (BST) z zachowaniem porządku wierzchołków. Rotacje stosuje się w drzewach BST do uzyskania wyważenia drzewa i minimalizacji jego wysokości, co prowadzi do zmniejszenia kosztu operacji na drzewie. Przebieg rotacji Rotacja odbywa się wokół krawędzi (x,y) drzewa. Jeżeli x jest rodzicem y (jest wyżej w drzewie), a y jest jego lewym synem, mówimy o prawej rotacji (rotacji w prawo), jeżeli jest prawym synem o lewej rotacji (rotacji w lewo). Pseudokod W poniższym pseudokodzie P oznacza wierzchołek leżący wyżej w drzewie, Q wierzchołek leżący niżej (lewego syna P), a rotacja odbywa się w prawo względem krawędzi (P,Q) (sytuacja przy rotacji lewej jest symetryczna). Prawy i lewy są wskaźnikami na synów wierzchołka. Lewa i prawa rotacja wokół krawędzi (P, Q) Pseudokod prawej rotacji Q = P.lewy P.lewy = Q.prawy Q.prawy = P P = Q Po wykonaniu rotacji należy zapewnić, że ojciec wierzchołka P, jeśli istnieje, wskazuje po rotacji na Q jako na swojego odpowiedniego syna. Własności i zastosowanie Rotacja odbywa się w czasie stałym i powoduje zmniejszenie głębokości jednego z węzłów drzewa oraz jednego z jego poddrzew (węzeł P i poddrzewo A na rysunku powyżej) oraz zwiększenie głębokości innego wierzchołka i jednego z jego poddrzew (Q i C). Ta własność powoduje przydatność rotacji do zmniejszania głębokości (równoważenia) drzewa BST. Dlatego rotacje stosuje się w algorytmach równoważących drzewa BST (np. drzewa AVL, czerwono-czarne lub splay). Przykładem takiego algorytmu jest algorytm DSW. Wykonanie rotacji nie zmienia kolejności przechodzenia wierzchołków drzewa w kolejności inorder. Lewa i prawa rotacja są swoimi odwrotnościami (tzn. wykonanie lewej, a potem prawej rotacji na tym samym węźle sprowadza drzewo do stanu początkowego).

Podwójna rotacja W niektórych algorytmach (np. drzewach o ograniczonym zrównoważeniu oraz drzewach splay) używa się również procedury podwójnej rotacji. W przypadku lewej podwójnej rotacji najpierw wykonuje się prawą rotację na prawym poddrzewie, a potem lewą rotację na wyjściowym węźle. Drzewo czerwono-czarne Drzewo czerwono-czarne rodzaj samoorganizującego się binarnego drzewa poszukiwań - struktury danych stosowanej w informatyce najczęściej do implementacji tablic asocjacyjnych. Została ona wynaleziona przez Rudolfa Bayera w 1972 roku, który nazwał je symetrycznymi binarnymi B-drzewami. Współczesną nazwę oraz dokładne zbadanie ich właściwości zawdzięcza się pracy "A dichromatic framework for balanced trees" z 1978 roku autorstwa Leo J. Guibasa oraz Roberta Sedgewicka. Drzewa czerwono-czarne są skomplikowane w implementacji, lecz charakteryzują się niską złożonością obliczeniową elementarnych operacji takich, jak wstawianie, wyszukiwanie czy usuwanie elementów z drzewa. Problem Podstawowe binarne drzewo poszukiwań pozwala na szybkie wyszukiwanie porównywalnych danych, np. liczb dzięki zorganizowaniu ich w formę drzewa binarnego, przez co czas wykonywania elementarnych operacji jest uzależniony od średniej głębokości h takiego drzewa i wynosi O(h). Jednak drzewo takie nie posiada żadnych mechanizmów, które dążą do jego zrównoważenia, przez co nietrudno jest uzyskać słabo rozgałęzioną strukturę o dużej głębokości. Czas wykonywania operacji będzie wtedy niewiele lepszy, niż dla zwykłych list [2]. Drzewo czerwono-czarne jest rozszerzeniem podstawowej struktury o algorytm równoważenia wykonywany po każdej operacji INSERT oraz DELETE. W przypadku tej struktury elementy-liście nie przechowują żadnych informacji, dlatego często w ich miejsce wprowadza się dla zaoszczędzenia pamięci i uproszczenia kodu pojedynczego wartownika. Właściwości Przykład drzewa czerwono-czarnego W drzewie czerwono-czarnym z każdym węzłem powiązany jest dodatkowy atrybut, kolor, który może być czerwony lub czarny. Oprócz podstawowych własności drzew poszukiwań binarnych, wprowadzone zostały kolejne wymagania, które trzeba spełniać: 1. Każdy węzeł jest czerwony lub czarny. 2. Korzeń jest czarny.

3. Każdy liść jest czarny (Można traktować nil jako liść). 4. Jeśli węzeł jest czerwony, to jego synowie muszą być czarni. 5. Każda ścieżka z ustalonego węzła do liścia liczy tyle samo czarnych węzłów. Wymagania te gwarantują, że najdłuższa ścieżka od korzenia do liścia będzie co najwyżej dwukrotnie dłuższa, niż najkrótsza. Wynika to wprost z własności: 1. Zgodnie z własnością 4, żadna ścieżka nie zawiera dwóch czerwonych węzłów pod rząd, jednak może zawierać czarne. Stąd najkrótsza ścieżka od węzła X zawiera wyłącznie n czarnych węzłów. 2. Zgodnie z własnością 5, druga ścieżka wychodząca z węzła X musi zawierać także n czarnych węzłów. Jedynym sposobem, aby miała ona inną łączną długość, jest umieszczenie pomiędzy każdą parą węzłów czarnych węzła czerwonego. 3. Zgodnie z własnością 3, liść kończący obie ścieżki musi być czarny. Jeżeli węzeł X jest czarny, wtedy w ścieżce możemy rozmieścić co najwyżej n-1 węzłów czerwonych, w przeciwnym zaś razie będziemy mieli w niej n czerwonych węzłów (wliczając w to sam X). Zatem łączna długość drugiej ścieżki może wynieść co najwyżej 2n, gdzie n jest długością pierwszej ścieżki zbudowanej wyłącznie z węzłów czarnych. Można udowodnić, że dla n węzłów głębokość drzewa czerwono-czarnego h wyniesie najwyżej 2 log (n+1), przez co elementarne operacje będą wykonywać się w czasie O(log n) Operacje Efekt działania rotacji w lewo i w prawo Podstawowymi operacjami służącymi do reorganizacji drzewa są operacje rotacji w lewo oraz rotacji w prawo przedstawione na rysunku obok. Rotacja w lewo powoduje spłynięcie danego węzła na lewo w dół i wysunięcie do góry jego prawego syna. Rotacja w prawo zachodzi w drugą stronę - węzeł spływa w prawo, zaś w górę wyciągany jest jego lewy syn. Ze schematu widać, że podczas rotacji nie trzeba przepinać poddrzew a oraz c, natomiast poddrzewo b przenoszone jest między węzłami, zależnie od kierunku rotacji. Można przyjąć, że każda rotacja wykonuje się w czasie O(1). Rotacja w prawo węzła X jest wykonalna, jeżeli jego lewy syn istnieje. Odpowiednio, możemy wykonać rotację w lewo, jeżeli X posiada prawego syna. Obie rotacje są operacjami odwracalnymi. Na poziomie rotacji nie uwzględniamy kolorowania węzłów, jest ono poprawiane później niezależnie. Wstawianie Wstawianie elementu do drzewa składa się z trzech kroków: 1. Umieszczenie elementu za pomocą standardowego algorytmu dla drzew poszukiwań binarnych. 2. Pokolorowanie nowego węzła na czerwono. 3. Przywrócenie własności czerwono-czarnych. Przywracanie własności rozpoczynamy ze wskaźnikiem z, który początkowo wskazuje na czerwony węzeł, który właśnie dodaliśmy. Kończymy je, gdy rodzic węzła z będzie czarny, zatem podczas każdej iteracji wiemy także, że rodzic jest czerwony. W algorytmie musimy rozważyć sześć przypadków, przy czym wystarczy rozpatrywać tylko

trzy. Druga trójka jest ich symetrycznym odbiciem, a my wybieramy odpowiedni przypadek zależnie od tego, czy z jest lewym, czy prawym synem swego rodzica. Poniżej rozpatrzymy jedynie przypadki, gdy ojciec z jest lewym synem swojego ojca. Możliwe są wtedy następujące sytuacje: 1. Brat ojca (stryj) węzła z jest czerwony. 2. Stryj węzła z jest czarny i z jest prawym synem. 3. Stryj węzła z jest czarny i z jest lewym synem. Aby rozwiązać pierwszy przypadek, kolorujemy zarówno ojca, jak i jego brata na czarno, a następnie przesuwamy z na ich ojca, którego kolorujemy na czerwono: z.parent.color = black; // kolorujemy ojca na czarno z.parent.parent.right.color = black; // kolorujemy prawego brata ojca na czarno z = z.parent.parent; // przenosimy się dwa poziomy do góry do ojca ojca. z.color = red; // i kolorujemy go na czerwono Przypadki 2 i 3 nie wykluczają się wzajemnie, a wręcz przeciwnie. Przypadek 2 możemy bowiem rozwiązać, sprowadzając go do przypadku 3: ustawiamy z na ojca dotychczasowego z i wykonujemy jego rotację w lewo: z = z.parent; left-rotate(z); // przesuwamy się na ojca // wykonujemy rotacje w lewo Rozwiązanie przypadku 3 polega na przekolorowaniu ojca z na czarno, jego ojca na czerwono i wykonaniu na tymże ojcu ojca rotacji w prawo: z.parent.color = black; // ojciec na czarno z.parent.parent.color = red; // jego ojciec na czerwono right-rotate(z.parent.parent); // rotacja w prawo ojca ojca. Wskaźnika z już nie przesuwamy. Zauważmy, że po rozwiązaniu przypadku 3 element z jest czerwony, zaś jego ojciec czarny, co oznacza jednocześnie zakończenie przywracania własności czerwono-czarnych. Przypadki dla sytuacji, gdy ojciec z jest prawym synem swego ojca wyglądają analogicznie. Należy jedynie odwrócić kolejność wszystkich operacji (lewo prawo, prawo lewo). Usuwanie Do usuwania węzła z wykorzystujemy standardowy algorytm usuwania elementu z drzewa poszukiwań binarnych z wprowadzoną jedną modyfikacją. Jeśli usuwany węzeł y (mający zawsze co najwyżej jednego syna x) jest czarny, drzewo traci właściwości czerwono-czarne, które muszą zostać przywrócone: jeśli y.color == BLACK wtedy delete-restore(x); remove(y); Procedura delete-restore() przywraca własności czerwono-czarne przed wykonaniem fizycznego usunięcia, zaczynając od jedynego syna usuwanego węzła y. Jeśli y nie miał synów, x jest wtedy czarnym wartownikiem. Mogą zajść trzy przypadki: 1. Jeśli y był korzeniem, wtedy nowym korzeniem zostaje węzeł czerwony, co narusza własność 2. 2. Jeśli x oraz y.parent były czerwone, naruszamy własność 4, gdyż czerwony węzeł będzie mieć czerwonego syna. 3. Usunięcie y sprawia, że wszystkie przechodzące przez niego ścieżki będą mieć o jeden czarny węzeł mniej, co narusza własność 5.