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

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

Drzewa czerwono-czarne.

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

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:

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

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

ALGORYTMY I STRUKTURY DANYCH

Porządek symetryczny: right(x)

Tadeusz Pankowski

Podstawy Informatyki. Metody dostępu do danych

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

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

Drzewa poszukiwań binarnych

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

Sortowanie bąbelkowe

Drzewo binarne BST. LABORKA Piotr Ciskowski

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.

Algorytmy i Struktury Danych, 9. ćwiczenia

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

Listy, kolejki, stosy

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

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

Algorytmy i struktury danych. wykład 5

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

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

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

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

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

Lista liniowa dwukierunkowa

ALGORYTMY I STRUKTURY DANYCH

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

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

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

Bazy danych. Andrzej Łachwa, UJ, /15

Struktury Danych i Złożoność Obliczeniowa

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

Teoretyczne podstawy informatyki

Struktury danych: stos, kolejka, lista, drzewo

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

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

Instrukcje dla zawodników

Definicja pliku kratowego

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Sortowanie. Bartman Jacek Algorytmy i struktury

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

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

Drzewa poszukiwań binarnych

Matematyka dyskretna - 7.Drzewa

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

Ogólne wiadomości o drzewach

Drzewa podstawowe poj

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

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

Wstęp do programowania

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

Algorytmy i Struktury Danych

Teoretyczne podstawy informatyki

Algorytmy i Struktury Danych

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

Programowanie obiektowe

7. Teoria drzew - spinanie i przeszukiwanie

Przykładowe B+ drzewo

Luty 2001 Algorytmy (4) 2000/2001

Drzewa wyszukiwań binarnych (BST)

Niech x 1,..., x n będzie ciągiem zdarzeń. ---

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.

PODSTAWY INFORMATYKI wykład 6.

Programowanie obiektowe

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

Podstawy Informatyki. Wykład 6. Struktury danych

Abstrakcyjne struktury danych - stos, lista, drzewo

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

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

Def. Kod jednoznacznie definiowalny Def. Kod przedrostkowy Def. Kod optymalny. Przykłady kodów. Kody optymalne

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

Algorytmy i Struktury Danych.

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

Indeksy. Wprowadzenie. Indeksy jednopoziomowe indeks podstawowy indeks zgrupowany indeks wtórny. Indeksy wielopoziomowe

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

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

ALGORYTMY I STRUKTURY DANYCH

Łyżwy - omówienie zadania

Algorytmy i struktury danych

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

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

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

Drzewa AVL definicje

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

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

7a. Teoria drzew - kodowanie i dekodowanie

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA

Algorytmy i struktury danych

Egzaminy i inne zadania. Semestr II.

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

0-0000, , , itd

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

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Transkrypt:

Drzewa binarne Każdy węzeł w drzewie posiada pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste. Uporządkowanie. Zakładamy, że klucze są różne. Klucze leżące w lewym poddrzewie danego węzła są mniejsze od klucza w danym węźle, a klucze leżące w prawym poddrzewie są większe. Poszukiwanie klucza jest łatwe. Wstawianie. Nowy klucz (wraz z nowym węzłem) wstawiamy na końcu ścieżki od korzenia od liścia. 8 8 7 Usuwanie. Klucz z liścia lub z węzła posiadającego jednego potomka usuwamy łatwo (podpinamy poddrzewo w miejsce usuwanego węzła). 7 7 6 8 6 8 Aby usunąć klucz z węzła posiadającego dwóch potomków, usuwany klucz zamieniamy na najmniejszy klucz w prawym poddrzewie. Teraz w drzewie mamy dwa równe klucze, z których niżej położony należy usunąć. Węzeł w którym leży klucz do usunięcia posiada co najwyżej jednego potomka.

8 8 0 0 6 9 6 9 7 7 Drzewa czerwono-czarne Liczba operacji przy poszukiwaniu, wstawianiu i usuwaniu jest ograniczona wysokością drzewa. Dlatego zależy nam, aby drzewa były zrównoważone (nie miały równocześnie długich i krótkich ścieżek od korzenia do liści). Jednym z pomysłów na szybkie równoważenie drzewa po operacjach wstawiania i usuwania są drzewa czerwono-czarne. Są to drzewa binarne z dodatkowym polem w każdym węźle oznaczającym kolor (czarny lub czerwony). Zakłada się, że. korzeń jest czarny. czerwony węzeł nie może mieć czerwonego potomka. węzły o adresie zero traktuje się jako czarne liście (potrzebne, aby prosto wyrazić następną własność). na każdej ścieżce od korzenia do liścia leży tyle samo czarnych węzłów Wynika stąd, że najdłuższa ścieżka jest najwyżej dwa razy dłuższa od najkrótszej.

0 0 6 6 8 8 7 9 7 9 Wstawianie i usuwanie zaczynamy jak w przypadku drzewa binarnego. Następnie w razie potrzeby naprawiamy drzewo przemalowując węzły lub wykonując jedną lub dwie rotacje (przekształcenie pokazane na rysunku). Wstawianie. Nowy klucz wstawiamy, jak do zwykłego drzewa binarnego. Nowy węzeł malujemy na czerwono. Jeśli nowy węzeł jest potomkiem czarnego węzła kończymy. W przeciwnym wypadku naprawiamy drzewo (naruszona własność druga, wyjątkowo pierwsza gdy drzewo jest puste). Rozpatrujemy trzy przypadki. Pierwszy przypadek może się powtarzać, kończyć naprawę (być może po przemalowaniu korzenia na czarno) lub prowadzić do drugiego czy też trzeciego przypadku. Drugi przypadek prowadzi do trzeciego, a trzeci od razu kończy naprawę.. Jeśli ojciec i wujek są czerwoni, przemalowujemy ojca i wujka na czarno, a dziadka na czerwono i pytamy, czy przemalowany na czerwono dziadek nie ma czerwonego ojca. W ten sposób przenosimy się dwa poziomy wyżej (wykrzyknik oznacza węzeł sprawiający problem, na początku jest to nowowstawiony węzeł).

. Jeśli ojciec jest czerwony, a wujek czarny (lub brak wujka) i linia łącząca z dziadkiem załamuje się, wykonujemy rotację i przechodzimy do trzeciego przypadku.. Jeśli ojciec jest czerwony, a wujek czarny i linia łącząca z dziadkiem jest prosta, wykonujemy rotację i kończymy. Usuwanie. Węzeł usuwamy tak, jak ze zwykłego drzewa binarnego. Jeśli faktycznie usuwany węzeł jest czerwony, kończymy. W przeciwnym wypadku naprawiamy drzewo (naruszona własność czwarta, wyjątkowo pierwsza). Naprawę zaczynamy od węzła który znalazł się w miejscu faktycznie usuniętego węzła. Jeśli jest to czerwony węzeł, wystarczy przemalować go na czarno. W przeciwnym wypadku rozpatrujemy przypadki. Pierwszy przypadek po rotacji zamienia się na drugi, trzeci lub czwarty przypadek. W drugim przypadku przemalowanie kończy naprawę lub przenosi problem poziom wyżej. Trzeci przypadek po rotacji zamienia się na przypadek czwarty, a czwarty przypadek po rotacji kończy naprawę drzewa.. Jeśli brat jest czerwony, wykonując rotację, otrzymujemy przypadek drugi, trzeci bądź czwarty.

. Jeśli brat jest czarny i czarni są bratankowie, przemalowując węzły, przenosimy problem na ojca. Jeśli ojciec jest czerwony, przemalowujemy go na czarno i kończymy naprawę.. Jeśli brat jest czarny, a bliższy bratanek czerwony, wykonujemy rotację i przechodzimy do czwartego przypadku.. Jeśli brat jest czarny, a dalszy bratanek czerwony, wykonujemy rotację i kończymy naprawę. Uwaga. Kolory żółty i zielony na lewym i prawym rysunku oznaczają ten sam kolor (czerwony lub czarny).

B-drzewa B-drzewa są jeszcze jednym przykładem struktury wskaźnikowej.. Każdy węzeł B-drzewa posiada t miejsc na przechowywanie kluczy, t miejsc na adresy dzieci oraz zmienną mówiącą, ile faktycznie kluczy występuje w danym węźle. Parametr t jest ustaloną liczbą.. Liście nie przechowują adresów. Węzeł będący liściem nigdy nie zamienia się na węzeł wewnętrzny.. Korzeń może zawierać od jednego klucza do t kluczy. Pozostałe węzły zawierają od t kluczy do t kluczy. Liczba adresów przechowywanych w węźle jest o jeden większa od liczby kluczy w węźle.. Możemy myśleć, że adresy w danym węźle porozdzielane są kluczami. Uporządkowanie kluczy jest takie samo, jak uporządkowanie kluczy w drzewie binarnym. Klucze w węźle uporządkowane są rosnąco. Poddrzewa zawierają klucze o pośrednich wartościach.. Wszystkie liście leżą na tym samym poziomie (wzrost i zmniejszanie wysokości drzewa odbywa się przy korzeniu). 6. Poszukiwanie klucza jest oczywiste. 7. Wstawianie wymaga czasem operacji rozbijania węzła, natomiast usuwanie wymaga czasem pożyczenia klucza od brata lub sklejenia dwóch węzłów. 8. Rozbijanie pełnego węzła (możliwe, jeśli ojciec nie jest pełny). 6

9. Aby rozbić pełny korzeń, tworzymy nowy korzeń. Jest to jedyny moment, w którym rośnie wysokość drzewa. 0. Klucze wstawimy w liściach (w przypadku pustego drzewa, tworzymy korzeń będący jednocześnie liściem). Aby wstawić klucz, schodzimy od korzenia do liścia. Na wszelki wypadek wszystkie pełne węzły napotkane po drodze rozbijamy. Dzięki temu na pewno będziemy mogli rozbić pełny liść i znaleźć miejsce na nowy klucz. Opisany algorytm wymaga tylko jednego przejścia od korzenia do liścia.. Pożyczanie od brata.. Jeśli musimy powiększyć węzeł, a nie możemy pożyczyć od żadnego z braci, sklejamy węzeł z bratem (operacja odwrotna do rozbijania). Sklejenie jest możliwe, o ile ojciec nie nie zawiera minimalnej liczby kluczy. Jeśli chcemy skleić dzieci korzenia zawierającego jeden klucz, z korzenia i dwóch jego dzieci tworzymy nowy korzeń. Jest to jedyny moment, w którym maleje wysokość drzewa, poza oczywistym przypadkiem usuwania jedynego klucza z drzewa. 7

. Usuwanie węzła wewnętrznego poprzedzone jest skopiowaniem w miejsce usuwanego klucza największego klucza z lewego poddrzewa (lub najmniejszego klucza z prawego poddrzewa). Największy klucz w lewym poddrzewie leży w liściu i należy go usunąć.. Aby usunąć węzeł z liścia, schodzimy od korzenia do liścia, dbając, aby żaden węzeł po drodze nie był minimalny. Napotkane minimalne węzły powiększamy pożyczając lub jeśli to niemożliwe, sklejając węzły. Dzięki temu na pewno będziemy mogli powiększyć w razie potrzeby liść, z którego usuwamy klucz. Opisany algorytm wymaga tylko jednego przejścia od korzenia do liścia. Chciałbym podziękować Pani Joannie za wykonanie ładnych rysunków. 8