Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Algorytmy i Struktury Danych Drzewa BTS, AVL WYKŁAD 5 PROWADZĄCY: DR PAWEŁ DROZDA.

Podobne prezentacje


Prezentacja na temat: "Algorytmy i Struktury Danych Drzewa BTS, AVL WYKŁAD 5 PROWADZĄCY: DR PAWEŁ DROZDA."— Zapis prezentacji:

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 n1n1 n2n2 n3n3 n4n4 n5n5 n6n6 n8n8 n9n9 n7n7 n 10 n 11 korzeń liść węzeł Poddrzewo rodzic (ojciec) dzieci (synowie) przodek potomek

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) dr Paweł Drozda Ścieżka od n 1 do n k : sekwencja n 1,n 2,n 3,...,n k taka że n i jest rodzicem dla n i+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

6 Drzewo Książka Rozdział 1Rozdział 2Rozdział 3 Podrozdział 1.1 Podrozdział 2.1Podrozdział 2.2Podrozdział 2.3 Punkt 2.1.1Punkt 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  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 Preorder(T):  n  Preorder(T 1 )  Preorder(T 2 ) ...  Preorder(T k ) Inorder(T):  Inorder(T 1 )  n  Inorder(T 2 ) ...  Inorder(T k ) Postorder(T):  Postorder(T 1 )  Postorder(T 2 ) ...  Postorder(T k )  n n T1T1 T2T2 TkTk...

11 Przykład 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 n1n1 n2n2 n3n3 n4n4 n5n5 n7n7 n6n6 * +- baca (a+b)*(a-c) Liść przybiera wartość „operand” Węzeł wewnętrzny przybiera wartość „operator” Preorder: *+ab-ac (not. prefiksowa) Postorder: ab+ac-* (ONP) Inorder: a+b*a-c (not. infiksowa) n 3 =a-cn 2 =a+b n 1 =n 2 *n 3 =(a+b)*(a-c)

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 wartość LISTA dzieci rodzic wartość LISTA dzieci rodzic wartość LISTA dzieci rodzic Węzeł

15 Drzewo binarne Każdy rodzic może mieć co najwyżej 2 dzieci  lewe poddrzewo  prawe poddrzewo n1n1 n2n2 n3n3 n4n4 n5n5 n7n7 n6n6

16 Kodowanie Huffmana Znakprawd.kod a b0.411 c.1501 d e.2510 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 ad ceb Znakprawd.kod a b0.411 c.1501 d e.2510

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 b (0,4)a (0,12)c (0,15)d (0,08)e (0,25) 0,2 0,35 0, * * * * *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  key  left  right  p Własność drzewa BST:  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,

24 Wyszukiwanie w BST 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); 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; 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

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)

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 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 0±10±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


Pobierz ppt "Algorytmy i Struktury Danych Drzewa BTS, AVL WYKŁAD 5 PROWADZĄCY: DR PAWEŁ DROZDA."

Podobne prezentacje


Reklamy Google