Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Algorytmy i Struktury Danych Drzewa BTS, AVL
Wykład 5 Prowadzący: dr Paweł Drozda
2
Drzewa Reprezentują dane w sposób hierarchiczny Szerokie zastosowanie
bazy danych grafika komputerowa sztuczna inteligencja przetwarzanie tekstu
3
Drzewa korzeń n1 węzeł przodek potomek Poddrzewo n2 n3 n4 n5 n6 n7
liść rodzic (ojciec) n8 n9 n10 n11 dzieci (synowie)
4
Własności drzewa(1) Korzeń: węzeł, który nie ma rodzica
Liść: węzeł, który nie ma dzieci Węzeł wewnętrzny: węzeł nie będący liściem Pojedynczy węzeł jest drzewem, korzeniem i liściem Dzieci danego węzła są zarazem jego poddrzewami Drzewo puste: drzewo bez jakichkolwiek węzłów
5
Własności drzewa(2) Ścieżka od n1 do nk: sekwencja n1,n2,n3,...,nk taka że ni jest rodzicem dla ni+1 Długość ścieżka: liczba tworzących ją węzłów – 1 Jeżeli od węzła a do b istnieje ścieżka, to a jest przodkiem b, a b jest potomkiem a Wysokość węzła: długość najdłuższej ścieżki od tego węzła do jego potomków Wysokość drzewa = wysokość korzenia Głębokość węzła: długość ścieżki łączącej go z korzeniem dr Paweł Drozda
6
Drzewo Książka Rozdział 1 Rozdział 2 Rozdział 3 Podrozdział 1.1
Punkt 2.1.1 Punkt 2.1.2
7
Drzewo
8
Jak uporządkować drzewo?
Czyli w jakiej kolejności odwiedzić wszystkie węzły dokładnie raz uporządkowanie węzłów odwiedzanie węzłów przechodzenie przez drzewo Najważniejsze metody to: preorder inorder postorder
9
Odwiedzanie węzłów W szczególnym przypadku W ogólnym przypadku
dla pustego drzewa wynikiem jest pusta lista węzłów dla drzewa złożonego z jednego węzła otrzymamy jednoelementową listę W ogólnym przypadku przechodzimy przez drzewo rekurencyjnie
10
Odwiedzanie węzłów n T1 T2 Tk ... Preorder(T): Inorder(T):
Preorder(Tk) Inorder(T): Inorder(T1) Inorder(T2) Inorder(Tk) Postorder(T): Postorder(T1) Postorder(T2) Postorder(Tk) n T1 T2 Tk ...
11
Przykład 1 2 3 4 7 6 5 10 9 8 Preorder: 1, 2, 3, 5, 8, 9, 6, 10, 4, 7 Inorder: 2, 1, 8, 5, 9, 3, 10, 6, 7, 4 Postorder: 2, 8, 9, 5, 10, 6, 3, 7, 4, 1
12
Wyrażenia arytmetyczne
(a+b)*(a-c) Liść przybiera wartość „operand” Węzeł wewnętrzny przybiera wartość „operator” n1 n2 n3 n4 n5 n7 n6 * + - b a c n1=n2*n3=(a+b)*(a-c) n2=a+b n3=a-c Preorder: *+ab-ac (not. prefiksowa) Postorder: ab+ac-* (ONP) Inorder: a+b*a-c (not. infiksowa)
13
Operacje RODZIC(T,n) – w drzewie T zwróć węzeł-rodzica węzła n
LEWY_SYN(T,n) – w drzewie T zwróć skrajny lewy węzeł-dziecko węzła n NASTĘPNY_BRAT(T,n) – w drzewie T zwróć węzeł mający tego samego rodzica co n i położony bezpośrednio na prawo od n WARTOŚĆ(T,n) – w drzewie T przyporządkuj węzłowi n pewną wartość KORZEŃ(T) – zwraca węzeł-korzeń drzewa T DODAJ_DZIECKO(T,n) – w drzewie T dodaje węzeł-dziecko do węzła n. Jeżeli n ma wartość NULL to utworzony zostaje korzeń drzewa. Zwraca nowo utworzony węzeł USUŃ_WĘZEŁ(T,n) – jeżeli n jest liściem to zostaje usunięty z drzewa T, w przeciwnym wypadku wynik jest nieokreślony
14
Implementacja drzewa Węzeł wartość LISTA dzieci rodzic wartość
15
Drzewo binarne Każdy rodzic może mieć co najwyżej 2 dzieci
lewe poddrzewo prawe poddrzewo n1 n2 n3 n4 n5 n7 n6
16
Kodowanie Huffmana Własność przedrostka:
Znak prawd. kod a 0.12 000 b 0.4 11 c .15 01 d .08 001 e .25 10 Własność przedrostka: kod danego znaku nie jest początkiem kodu innego znaku np.: = = cad Średnia ilość bitów potrzebna do zakodowania znaku
17
Kodowanie Huffmana a d c e b 1 Znak prawd. kod a 0.12 000 b 0.4 11 c
1 Znak prawd. kod a 0.12 000 b 0.4 11 c .15 01 d .08 001 e .25 10
18
Algorytm Huffmana 1) Weź 2 najrzadsze znaki
2) Do kodu pierwszego dopisz 0 3) Do kodu drugiego dopisz 1 4) Zastąp je nowym znakniem z prawd. = sumie 2 znaków 5) Powtórz kroki 1-4 dopóki nie pozostanie 1 znak
19
Algorytm Huffmana 1 0,6 0,35 0,2 b (0,4) e (0,25) c (0,15) a (0,12)
d (0,08) 0.4* * * * *4 = 2.15
20
Drzewo binarne Drzewo regularne: każdy wierzchołek ma 0 lub 2 synów
Drzewo zrównoważone: na wszystkich poziomach poza ostatnim i przedostatnim każdy wierzchołek ma 2 synów Drzewo uporządkowane: węzły w drzewie są ułożone kolejno od lewej strony
21
Drzewa poszukiwań binarnych
BST (binary search tree) struktura danych umożliwiająca operacje FIND, MIN, MAX, INSERT, DELETE czas wykonania tych operacji: w pełnym drzewie – Θ(lgn) w drzewie zdegenerowanym – Θ(n)
22
Węzeł drzewa BST Rekord Własność drzewa BST: key left right p
dla każdego y = LEWY_POTOMEK(BST,x) KEY(BST,y) ≤ KEY(BST,x) dla każdego y = PRAWY_POTOMEK(BST,x) KEY(BST,x) ≤ KEY(BST,y)
23
2,3,5,6,7,8 6 2 3 7 3 2 5 8 7 6 8 5
24
Wyszukiwanie w BST Odwiedzamy O(h) węzłów SZUKAJ_BST_IT(n,k):
while (n.key<>k AND n<>NULL) do begin if (k<=n.key) then n:=n.left; else n:=n.right; end return n; SZUKAJ_BST(n,k): if (n.key=k OR n=NULL) then return n; if (k<=n.key) then SZUKAJ_BST(n.left,k); else SZUKAJ_BST(n.right,k); Odwiedzamy O(h) węzłów
25
Wartości ekstremalne w BST
minimum SZUKAJ_MIN(n): while(n.left<>NULL) do n:=n.left; return n; maksimum SZUKAJ_MAX(n): while(n.right<>NULL) do n:=n.right; return n; Poprawność procedur wynika z własności drzewa BST
26
Wstawianie nowych elementów
TREE_INSERT(T,z): x:=ROOT(T); y:=x.p; while (x<>NULL) do begin y:=x; if (z.key<x.key) then x:=x.left; else x:=x.right; end if (y=NULL) then ustaw korzeń T na z; else begin if (z.key < y.key) then y.left = z; y.right = z; end
27
Usuwanie węzła 3 przypadki:
węzeł n nie ma dzieci if (n.p.left = n) then n.p.left = null; if (n.p.right = n) then n.p.right = null; węzeł n ma 1 dziecko if (n.left <> null) then dz = n.left; else dz = n.right; if (n.p.left = n) then n.p.left = dz; else n.p.right = dz; węzeł n ma 2 dzieci nast = SZUKAJ_MIN(n.right); if (n.p.left = n) then n.p.left = nast; else n.p.right = nast;
28
Drzewo AVL Def: uporządkowane drzewo BST jest drzewem AVL, jeżeli dla każdego węzła różnica wysokości jego poddrzew wynosi co najwyżej 1 W najgorszym wypadku wysokość drzewa AVL 1.44log(n+2) 6 5 9 12 8 2 3 6 5 9 12 8
29
Wstawianie elementów dl AVL
Wstaw jak do BST Jeśli drzewo utraciło własność AVL to należy je wyważyć wykonując rotację w lewo/w prawo pojedyncza/podwójna
30
Pojedyncza rotacja – w prawo
1 2 -1 1 Drzewo AVL jest drzewem AVL po wykonaniu rotacji Uporządkowane drzewo AVL jest uporządkowanym drzewem AVL po wykonaniu rotacji
31
Podwójna rotacja – w prawo
1 2 ±1 -1 ±1
32
Przykład: 4, 5, 7, 2, 1, 3, 6
33
AVL - usuwanie Usuwamy węzeł (BST), a następnie przywracamy równowagę od węzła do korzenia
34
Porównanie
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.