wyklad2 drukuj


Drzewa. Przykład.
Drzewo ukorzenione o wysokości = 4.
Drzewo to spójny graf bez cykli. Drzewo ukorzenione, to
7
drzewo, w którym jeden z wierzchołków jest wyróżniony -
wierzchołek ten nazywamy korzeniem. Wierzchołki drzew
2 11 5
nazywamy też węzłami.
10 8 3 9
Rozważmy dowolny węzeł x drzewa ukorzenionego T o korzeniu r.
Ponieważ T jest spójne, to istnieje ścieżka łącząca x z r w T , a
4 6 15
ponieważ T nie zawiera cykli, taka ścieżka jest jedyna. Jej długość
1
(ilość krawędzi) nazywamy głębokością węzła x. Największa
głębokość węzła to wysokość drzewa.
Głębokość 0 (korzeń): 7;
Każdy węzeł y na ścieżce z r do x nazywamy przodkiem węzła x. Głębokość 1: 2, 11, 5;
Jeśli y jest przodkiem x, to x jest potomkiem węzła y. Zbiór Głębokość 2: 10, 8, 3, 9;
wszystkich potomków x wraz z łączącymi je krawędziami tworzy Głębokość 3: 4, 6, 15;
poddrzewo o korzeniu x. Głębokość 4: 1.
Poddrzewo o korzeniu w węzle 8 zawiera węzły 8, 6, 15 i 1.
Drzewa binarne.
Jeżeli węzeł y jest bezpośrednim poprzednikiem węzła x na ścieżce
Drzewo binarne to drzewo ukorzenione, w którym każdy węzeł na
od korzenia, to mówimy, że y jest ojcem x, a x jest synem y.
co najwyżej dwóch synów: lewego i prawego.
Poddrzewo, którego korzeń jest lewym (prawym) synem węzła x
Korzeń jest jedynym węzłem drzewa, który nie ma ojca.
nazywamy lewym (prawym) poddrzewem x.
Jeśli dwa węzły mają tego samego ojca, to nazywamy je braćmi.
7
Węzeł, który nie ma syna, nazywamy liściem.
2 5
Węzeł, który nie jest liściem, jest węzłem wewnętrznym.
10 8 3 9
4 6 15 11
Liczba synów węzła x nazywa się stopniem x.
1
Pełne drzewo binarne to drzewo binarne, w którym wszystkie
liście mają tą samą głębokość, a wszystkie węzły wewnętrzne mają
Lemat 2.2
stopień dwa.
Drzewo binarne o n węzłach ma wysokość co najmniej log n .
Uwaga
Na tym wykładzie log oznacza logarytm przy podstawie 2.
Dowód. Oznaczmy wysokość drzewa przez h. Zauważmy, że ilość
węzłów w naszym drzewie jest nie większa niż ilość węzłów w
drzewie pełnym, o tej samej wysokości. Stąd i z Lematu 2.1 mamy:
Lemat 2.1 2h+1 - 1 e" n,
Pełne drzewo binarne o wysokości h ma 2h+1 - 1 węzłów.
h e" log(n + 1) - 1.
Dowód. Korzeń ma dwóch synów o głębokości 1, z których każdy
ma dwóch synów o głębokości 2, itd. Liczba węzłów o głębokości i
Pozostaje zauważyć, że log(n + 1) - 1 e" log n , bo
wynosi zatem 2i, a liczba wszystkich węzłów
log(n + 1) e" log(n + 1) > log n e" log n , a dwie liczby
h całkowite różnią się o co najmniej 1.

2i = 2h+1 - 1.
i=0
Reprezentowanie drzew ukorzenionych. Przeglądanie drzewa binarnego.
Załóżmy, że mamy dane drzewo binarne T i chcemy wypisać
wszystkie jego klucze. Procedura TREE-PRINT(x) wypisuje
Do reprezentowania drzew w pamięci komputera możemy użyć wszystkie klucze z poddrzewa o korzeniu x.
struktur wskaznikowych, podobnie jak dla list.
TREE-PRINT(x)
Węzły drzewa reprezentujemy w postaci rekordów. Zakładamy, że 1. begin

każdy rekord ma pole key, tj. klucz. Pozostałe pola służą do 2. if x = NIL then
przechowywania wskazników do innych węzłów. 3. begin
4. wypisz key[x];
W każdym węzle drzewa binarnego przechowujemy wskazniki do
5. TREE-PRINT(left[x]);
ojca oraz lewego i prawego syna, odpowiednio w polach p, left i
6. TREE-PRINT(right[x]);
right. Jeśli p[x] = NIL, to x jest korzeniem drzewa. Jeśli węzeł x
7. end
nie ma lewego (prawego) syna to left[x] = NIL (right[x] = NIL).
8. end.
W dodatkowej zmiennej root pamiętamy wskaznik do korzenia
drzewa. Jeżeli root = NIL to drzewo jest puste. TREE-PRINT jest procedurą rekurencyjną (wywołuje samą siebie).
Najpierw wypisywany jest klucz korzenia x, potem klucze z lewego
poddrzewa, a następnie z prawego. Żeby wypisać wszystkie klucze
T , należy wykonać TREE-PRINT(root).
Przykład. Drzewa o dowolnym stopniu węzła.
Metodę reprezentowania drzew binarnych można uogólnić na
Procedura TREE-PRINT wypisze klucze drzewa
drzewa, w których stopień (liczba synów) każdego węzła jest nie
większa niż pewna stała k; pola left i right należy wtedy zastąpić
7
polami child1, . . . , childk. Metody tej nie da się zastosować, gdy
stopień węzła nie jest ograniczony. Co gorsza, jeżeli stała k jest
2 5
duża, a większość węzłów ma mały stopień, to przy takiej
10 8 3 9
reprezentacji marnuje się dużo pamięci.
4 6 15 11
Rozwiązaniem tego problemu jest reprezentacja  na lewo syn, na
prawo brat , która umożliwia przedstawienie drzewa o dowolnym
1
stopniu węzła w postaci drzewa binarnego.
Zamiast wskazników do wszystkich synów, każdy węzeł ma tylko
w następującej kolejności: 7, 2, 10, 4, 8, 6, 15, 1, 5, 3, 11, 9
dwa wskazniki:
Ćwiczenie.
left-child[x] wskazuje na pierwszego syna x,
W jakiej kolejności będą wypisane klucze, jeżeli w procedurze
TREE-PRINT zamienimy miejscami wiersze (a) 4. i 5.? (b) 4. i 6.? right-sibling[x] wskazuje na następnego, znajdującego się na
prawo brata x.
Drzewo o węzłach stopnia d" 3:
Reprezentacja pełnego drzewa binarnego.
7
Pełne drzewo binarne o n węzłach wygodnie jest reprezentować w
postaci tablicy A[1 . . . n] w następujący sposób. Pole A[1] jest
2 11 5
korzeniem drzewa, A[2] i A[3] są węzłami o głębokości 1, itd.
10 8 3 1 9
A[1]
4 6 15
A[2] A[3]
A[4] A[5] A[6] A[7]
To samo drzewo w reprezentacji  na lewo syn, na prawo brat :
A[8] A[9] A[10] A[11] A[12] A[13] A[14] A[15]
7
Mając dany indeks i węzła, łatwo obliczyć indeksy jego ojca p(i) i
2 11 5
synów left(i), right(i):
10 8 3 1 9
p(i) = i/2 , left(i) = 2i, right(i) = 2i + 1.
4 6 15


Wyszukiwarka

Podobne podstrony:
wyklad3 drukuj
wyklad10 drukuj
wyklad6 drukuj
wyklad12 drukuj
wyklad8 drukuj
wyklad9 drukuj
wyklad5 drukuj
wyklad1 drukuj
wyklad13 drukuj
wyklad14 drukuj
wyklad7 drukuj
wyklad11 drukuj
wyklad4 drukuj
Sieci komputerowe wyklady dr Furtak
Wykład 05 Opadanie i fluidyzacja

więcej podobnych podstron