Algorytmy i Struktury Danych Drzewa BTS, AVL

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

description

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. - PowerPoint PPT Presentation

Transcript of Algorytmy i Struktury Danych Drzewa BTS, AVL

Page 1: Algorytmy i Struktury Danych Drzewa BTS, AVL

Algorytmy i Struktury Danych

Drzewa BTS, AVL

WYKŁAD 5PROWADZĄCY: DR PAWEŁ DROZDA

Page 2: Algorytmy i Struktury Danych Drzewa BTS, AVL

Drzewa

Reprezentują dane w sposób hierarchicznySzerokie zastosowanie

bazy danych grafika komputerowa sztuczna inteligencja przetwarzanie tekstu

Page 3: Algorytmy i Struktury Danych Drzewa BTS, AVL

Drzewa

n1

n2 n3

n4 n5 n6

n8 n9

n7

n10 n11

korzeń

liść

węzeł

Poddrzewo

rodzic (ojciec)

dzieci (synowie)

przodek

potomek

Page 4: Algorytmy i Struktury Danych Drzewa BTS, AVL

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

Page 5: Algorytmy i Struktury Danych Drzewa BTS, AVL

dr Paweł Drozda

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

Page 6: Algorytmy i Struktury Danych Drzewa BTS, AVL

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

Page 7: Algorytmy i Struktury Danych Drzewa BTS, AVL

Drzewo

Page 8: Algorytmy i Struktury Danych Drzewa BTS, AVL

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

Page 9: Algorytmy i Struktury Danych Drzewa BTS, AVL

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

Page 10: Algorytmy i Struktury Danych Drzewa BTS, AVL

Odwiedzanie węzłów

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...

Page 11: Algorytmy i Struktury Danych Drzewa BTS, AVL

Przykład

1

2 3 4

765

1098

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

Page 12: Algorytmy i Struktury Danych Drzewa BTS, AVL

Wyrażenia arytmetyczne

n1

n2 n3

n4 n5 n7n6

*

+ -

ba ca

(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)

n3=a-cn2=a+b

n1=n2*n3=(a+b)*(a-c)

Page 13: Algorytmy i Struktury Danych Drzewa BTS, AVL

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

Page 14: Algorytmy i Struktury Danych Drzewa BTS, AVL

Implementacja drzewa

wartość

LISTA dzieci

rodzic

wartość

LISTA dzieci

rodzic

wartość

LISTA dzieci

rodzic

Węzeł

Page 15: Algorytmy i Struktury Danych Drzewa BTS, AVL

Drzewo binarne

Każdy rodzic może mieć co najwyżej 2 dzieci lewe poddrzewo prawe poddrzewo

n1

n2 n3

n4 n5

n7

n6

Page 16: Algorytmy i Struktury Danych Drzewa BTS, AVL

Kodowanie Huffmana

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.: 01000001 = 01 000 001 = cad

2.22*25.03*08.02*15.02*4.03*12.0

Średnia ilość bitów potrzebna do zakodowania znaku

Page 17: Algorytmy i Struktury Danych Drzewa BTS, AVL

Kodowanie Huffmana

a d

c e b

0

0

0

0

1

11

1

Znak prawd. kod

a 0.12 000

b 0.4 11

c .15 01

d .08 001

e .25 10

Page 18: Algorytmy i Struktury Danych Drzewa BTS, AVL

Algorytm Huffmana

1) Weź 2 najrzadsze znaki2) Do kodu pierwszego dopisz 03) Do kodu drugiego dopisz 14) Zastąp je nowym znakniem z prawd. = sumie

2 znaków5) Powtórz kroki 1-4 dopóki nie pozostanie 1

znak

Page 19: Algorytmy i Struktury Danych Drzewa BTS, AVL

Algorytm Huffmana

b (0,4) a (0,12)c (0,15) d (0,08)e (0,25)

0,2

0,35

0,6

1

0 10 110 1110 1111

0.4*1 + 0.25*2 + 0.15*3 + 0.12*4 + 0.08*4 = 2.15

Page 20: Algorytmy i Struktury Danych Drzewa BTS, AVL

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

Page 21: Algorytmy i Struktury Danych Drzewa BTS, AVL

Drzewa poszukiwań binarnych

BST (binary search tree)struktura danych umożliwiająca operacje

FIND, MIN, MAX, INSERT, DELETEczas wykonania tych operacji:

w pełnym drzewie – Θ(lgn) w drzewie zdegenerowanym – Θ(n)

Page 22: Algorytmy i Struktury Danych Drzewa BTS, AVL

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)

Page 23: Algorytmy i Struktury Danych Drzewa BTS, AVL

2,3,5,6,7,8

6

3 7

2 5 8

3

6

7

5

2

8

Page 24: Algorytmy i Struktury Danych Drzewa BTS, AVL

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) dobegin if (k<=n.key) then n:=n.left; else n:=n.right;endreturn n;

Odwiedzamy O(h) węzłów

Page 25: Algorytmy i Struktury Danych Drzewa BTS, AVL

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

Page 26: Algorytmy i Struktury Danych Drzewa BTS, AVL

Wstawianie nowych elementów

TREE_INSERT(T,z):x:=ROOT(T);y:=x.p;while (x<>NULL) dobegin 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;elsebegin if (z.key < y.key) then y.left = z; else y.right = z;end

Page 27: Algorytmy i Struktury Danych Drzewa BTS, AVL

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 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;

Page 28: Algorytmy i Struktury Danych Drzewa BTS, AVL

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)

6

5 9

128

6

5 9

1282

3

Page 29: Algorytmy i Struktury Danych Drzewa BTS, AVL

Wstawianie elementów dl AVL

Wstaw jak do BSTJeśli drzewo utraciło własność AVL to należy

je wyważyć wykonując rotację w lewo/w prawo pojedyncza/podwójna

Page 30: Algorytmy i Struktury Danych Drzewa BTS, AVL

Pojedyncza rotacja – w prawo

Drzewo AVL jest drzewem AVL po wykonaniu rotacji

Uporządkowane drzewo AVL jest uporządkowanym drzewem AVL po wykonaniu rotacji

0

1

1

2

-1

00

0

Page 31: Algorytmy i Struktury Danych Drzewa BTS, AVL

Podwójna rotacja – w prawo

1

20

-1

0

±1

0

±1

Page 32: Algorytmy i Struktury Danych Drzewa BTS, AVL

Przykład: 4, 5, 7, 2, 1, 3, 6

Page 33: Algorytmy i Struktury Danych Drzewa BTS, AVL

AVL - usuwanie

Usuwamy węzeł (BST), a następnie przywracamy równowagę od węzła do korzenia

Page 34: Algorytmy i Struktury Danych Drzewa BTS, AVL

Porównanie