1 / 34

Algorytmy i Struktury Danych Drzewa BTS, AVL

Algorytmy i Struktury Danych Drzewa BTS, AVL. Wykład 5 Prowadzący: dr Paweł Drozda. Drzewa. Reprezentują dane w sposób hierarchiczny Szerokie zastosowanie bazy danych grafika komputerowa sztuczna inteligencja przetwarzanie tekstu. korzeń. węzeł. przodek. potomek. liść. Drzewa. n 1.

doctor
Download Presentation

Algorytmy i Struktury Danych Drzewa BTS, AVL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algorytmy i Struktury DanychDrzewa 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. korzeń węzeł przodek potomek liść Drzewa n1 Poddrzewo n2 n3 n4 n5 n6 n7 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 nijest 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 Podrozdział 1.1 Podrozdział 2.1 Podrozdział 2.2 Podrozdział 2.3 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 • 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. Preorder(T): n Preorder(T1) Preorder(T2) ... Preorder(Tk) Inorder(T): Inorder(T1) n Inorder(T2) ... Inorder(Tk) Postorder(T): Postorder(T1) Postorder(T2) ... Postorder(Tk) n n T1 T2 Tk ... Odwiedzanie węzłów

  11. 1 2 3 4 5 6 7 8 9 10 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. * n1 + - n2 n3 n6 n7 n4 n5 a b a c Wyrażenia arytmetyczne (a+b)*(a-c) Liść przybiera wartość „operand” Węzeł wewnętrzny przybiera wartość „operator” 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. rodzic rodzic rodzic wartość wartość wartość LISTA dzieci LISTA dzieci LISTA dzieci Implementacja drzewa Węzeł

  15. n1 n2 n3 n5 n6 n4 n7 Drzewo binarne • Każdy rodzic może mieć co najwyżej 2 dzieci • lewe poddrzewo • prawe poddrzewo

  16. Kodowanie Huffmana Własność przedrostka: kod danego znaku nie jest początkiem kodu innego znaku np.: 01000001 = 01 000 001 = cad Średnia ilość bitów potrzebna do zakodowania znaku

  17. 0 1 1 0 1 0 c e b 0 1 a d Kodowanie Huffmana

  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. 1 0,6 0,35 0,2 Algorytm Huffmana b (0,4) e (0,25) c (0,15) a (0,12) d (0,08) 0 10 110 1110 1111 0.4*1 + 0.25*2 + 0.15*3 + 0.12*4 + 0.08*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,8 6 2 3 7 3 8 2 5 7 6 8 5

  24. 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; Wyszukiwanie w BST Odwiedzamy O(h) węzłów

  25. minimumSZUKAJ_MIN(n):while(n.left<>NULL) do n:=n.left;return n; maksimumSZUKAJ_MAX(n):while(n.right<>NULL) do n:=n.right;return n; Wartości ekstremalne w BST Poprawność procedur wynika z własności drzewa BST

  26. 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; else y.right = z; end Wstawianie nowych elementów

  27. Usuwanie węzła • 3 przypadki: • węzeł n nie ma dzieciif (n.p.left = n) then n.p.left = null;if (n.p.right = n) then n.p.right = null; • węzeł n ma 1 dzieckoif (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 dziecinast = SZUKAJ_MIN(n.right);if (n.p.left = n) then n.p.left = nast;else n.p.right = nast;

  28. 6 5 9 6 5 9 2 12 12 8 8 3 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 AVL1.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 1 2 -1 0 0 0 0 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 0 ±1 0 -1 0 ±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

More Related