• Nie Znaleziono Wyników

B–drzewa i drzewa PATRICIA

Celem niniejszych zajęć jest dogłębna analiza struktur B–drzewa i drzewa typu PATRICIA. Poniżej zamieszczone są definicje tych struktur i ich ope-racje słownikowe omówione na wykładzie. W części Zadania przedstawiono zadania, które są omawiane na ćwiczeniach.

10.1 B–drzewa

B–drzewem rzędu n nazywamy drzewo o następujących własnościach:

(B.1) każdy węzeł zawiera co najwyżej 2n obiektów

(B.2) każdy węzeł (prócz korzenia) zawiera co najmniej n obiektów

(B.3) każdy węzeł jest albo liściem, albo ma m+1 następników, gdzie m jest liczbą obiektów w węźle

(B.4) wszystkie liście są na jednym poziomie.

Zakładamy, że obiekty w węźle są uporządkowane według ich kluczy.

Wyszukanie elementu w B–drzewie

Dane jest B–drzewo t oraz klucz x ∈ U . Celem jest wyszukanie x w drzewie t.

Metoda postępowania jest następująca. Poczynając od korzenia przeszuku-jemy kolejne węzły drzewa. Niech aktualnie przeszukiwanym węzłem będzie węzeł v.

• Szukamy elementu x w węźle v.

• Jeśli x jest w węźle, to KONIEC: odpowiedź True, wpp przechodzimy do następnego punktu.

59

• Znajdujemy przedział odpowiadający x; niech to będzie przedział (ki, ki+1).

• Jeśli v jest liściem, to KONIEC: odpowiedź False, wpp przechodzimy do kolejnego punktu.

• Jeśli v nie jest liściem, to kontynuujemy proces dla poddrzewa o korze-niu pi.

Wstawianie elementu do B–drzewa

Niech t będzie B–drzewem oraz niech x ∈ U . Celem jest wstawienie x do t tak, by struktura wynikowa była też B–drzewm. Idea postępowania jest następująca.

• Znajdujemy liść v, do którego należy wstawić x.

• Jeśli x jest w węźle v, to KONIEC, wpp przechodzimy do kolejnego punktu.

• Sprawdź, ile obiektów jest w węźle.

• Jeśli w v jest mniej niż 2n obiektów, to wstaw x i KONIEC, wpp przejdź do kolejnego punktu.

• Jeśli w węźle v jest 2n okiektów, to

– tworzymy uporządkowany ciąg z obiektów z v wraz z x,

– tworzymy nowy węzeł w i wstawiamy doń początkowe n elemen-tów ciągu, końcowe n elemenelemen-tów pozostaje w v, zaś element środ-kowy wstawiamy do ojca (co może spowodować dalszy podział węzłów).

Własność 10.1 B–drzewo rośnie “w górę” od liści do korzenia.

Usuwanie elementu z B–drzewa

Podobnie jak poprzednio, niech t będzie B–drzewem oraz niech x ∈ U . Celem jest usunięcie x z drzewa t (jeśli x występuje w tym drzewiem) tak, by strujtura wynikowa była też B–drzewem. Przy usuwaniu obiektu z B–drzewa postępujemy następująco

• Znajdujemy węzeł v zawierający obiekt x.

• Jeśli v jest liściem, to usuwamy z niego x (może wystąpić niedomiar!).

• Jeśli v nie jest liściem, to

10.2. DRZEWA PATRICIA 61

• znajdujemy maksymalny obiekt y w bezpośrednio lewym pod-drzewie v (ewentualnie minimalny obiekt w bezpośrednio prawym poddrzewie). Obiekt ten jest w liściu w.

• przenosimy element y z węzła w do v wstawiając go w miejsce x oraz usuwamy y z liścia w.

Zatem zawsze usuwamy obiekt z liścia!

Idea algorytmu jest następująca.

• Wyznaczamy liść zawierający usuwany obiekt.

• Jeśli w liściu w jest m > n elementów, to usuwamy element z w i KONIEC, wpp przechodzimy do następnego punktu.

• Jeśli w liściu w jest dokładnie n elementów, to po usunięciu x pozosta-nie n−1 kluczy i jest pozosta-niedomiar! Wówczas rozważmy węzeł w0 będący bezpośrednio lewym (lub prawym) bratem.

• Jeśli w liściu w0 jest m0 > n elementów, to

– tworzymy uporządkowany ciąg długości k = m0+n z elementów węzła w0, elementów węzła w oraz elementu w ojcu dzielącego te węzły

– bk2c początkowych elementów pozostawiamy w w0, ostatnie bk2c elementów przesuwamy do w, a element środkowy przenosimy do ojca.

– Jeśli w liściu w0 jest dokładnie n elementów, to łącznie z elemen-tami węzła w oraz elementem dzielącym w ojcu jest ich 2n.

– do węzła w0przenosimy n−1 elementów z w oraz element dzielący z ojca.

– usuwamy węzeł w

– rekurencyjnie usuwamy element z ojca (może to doprowadzić do dalszego łączenia węzłów).

Własność 10.2 B–drzewo maleje “od góry” od korzenia do liści.

10.2 Drzewa Patricia

Drzewem PATRICIA nazywamy drzewo binarne o własnościach:

(P1) w każdym węźle zapisany jest klucz zakodowany binarnie

(P2) z każdym węzłem związany jest atrybut bit o własności: klucze wszyst-kich węzłów z prawego poddrzewa mają na tym bicie mają 1, zaś klucze wszystkich węzłów z lewego poddrzewa mają na tym bicie 0

(P3) jeśli w jest następnikiem węzła v, to bit rozgałęziający w węzle w jest mniejszy od bitu rozgałęziającego w węźle v

Wyszukanie elementu

Dane jest drzewo t typu PATRICIA oraz klucz x ∈ U . Celem jest wyszukanie tego klucza w drzewie. Idea metody jest następująca. Poczynając od korzenia przeglądamy kolejne węzły drzewa w porządku następującym:

• Niech v będzie aktualnie odwiedzanym węzłem drzewa o bicie rozga-łęziającym i. Jeśli x ma na i–tym bicie 1, przechodzimy do prawego poddrzewa, a jeśli jest to 0, przechodzimy do lewego poddrzewa.

• Proces kontynuujemy do chwili, gdy bit rozgałęziający następnika bę-dzie nie niższy od bitu rozgałęziającego węzła poprzedzającego – ozna-cza to, że węzeł następnika jest węzłem identyfikującym dla x.

• Jeśi x jest kluczem węzła identyfikującego, to zwracamy True, wpp False.

Wstawianie elementu do drzewa PATRICIA

Dane jest drzewo t typu PATRICIA oraz element x ∈ U . Celem jest wstawie-nie x do drzewa t tak, by wynikowa struktura było też drzewem PATRICIA.

Idea metody jest następująca:

• Wyznaczyć węzeł v identyfikujący dla klucza x.

• Jeśli węzeł jest już w drzewie, to KONIEC; wpp przejdź do następnego punktu.

• Wyznacz najwyższy bit, na którym różnią się x oraz klucz węzła v.

Niech to będzie bit nb.

• Utwórz nowy węzeł w i wstaw do niego klucz x; jako bit rozgałęziający przyjmij wartość nb.

• Po ścieżce poszukiwań węzła v wyznacz miejsce wstawienia węzła w:

poprzedni węzeł (prev ) ma bit rozgałęziający większy od nb, następny (next ) mniejszy od nb.

• Wstaw w pomiędzy węzły prev i next.

• Jeśli na bicie nb klucz x ma 1, to dowiąż na prawo w do w (wiązanie identyfikujące), wpp dowiąż na lewo.

10.3. ZADANIA: 63 Usuwanie elementu z drzewa PATRICIA

Dane jest drzewo t typu PATRICIA oraz element x ∈ U . Celem jest usunięcie tego klucz z drzewa (o ile istnieje w drzewie) tak, by wynikowa struktura była też drzewem PATRICIA. Idea postępowania jest następująca.

• Znaleźć węzeł v identyfikujący dla klucza x.

• Jeśli v nie zawiera klucza x, to KONIEC: brak klucza w drzewie; wpp przejdź do następnego punktu.

• Niech prev będzie bezpośrednim poprzednikiem węzła v (według wią-zań identyfikujących).

• Przełączyć wiązanie od ojca węzła prev do drugiego następnika tego węzła (pierwszym jest v).

• Przenieść klucz węzła prev do węzła v.

• Usunąć węzeł prev.

10.3 Zadania:

1. Zilustruj proces konstrukcji B–drzewa rzędu 2 dla kolejno wstawianych kluczy: F, S, Q, K, C, L, H, T, V, W, M, R, N, P, A, B, X, Y, D.

2. Ile maksymalnie elementów ma B–drzewo rzędu r = 2 i wysokości h?

3.

4. Dane jest B–drzewo rzędu 2 postaci:

12

30 50

85 10

1 99

70

4 7 25 31 34 46 48 51 55 63 75 78

Wstawić kolejno: 5, 9, 40, 72, a następnie usunąć 46, 50.

5. Do początkowo pustego B–drzewa rzędu r = 2 wstawiamy kolejno klu-cze 1, 2, . . . , n, n ∈ N. Ile węzłów ma wynikowe B–drzewo?

Dla podanego ciągu kluczy zbudować drzewo PATRICIA:

A = 00001, C = 00011, G = 00111, S = 10011, H = 01000, X = 11000, E = 00101, I = 01001, M = 01101, R = 10010, N = 01110, P = 10000.

6. Rozważmy drzewo PATRICIA zbudowane w poprzednim zadaniu. Usu-nąć z tego drzewa kolejno S, N , R, P i H.

7. Czy drzewo PATRICIA jest drzewem BST? Odpowiedź uzasadnić.

Ćwiczenia 11

Powiązane dokumenty