Aisd W07

  • Uploaded by: api-26356906
  • 0
  • 0
  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Aisd W07 as PDF for free.

More details

  • Words: 2,101
  • Pages: 37
Algorytmy i struktury danych Temat: Metody równoważenia drzew BST

Techniki równoważenia drzew BST a)

K

B

B

b)

c) D

B

K

P

D

M

K R

P

D

M Różne drzewa BST zawierające te same dane Algorytmy i struktury danych

M

R

P R 2

Techniki równoważenia drzew BST Ile maksymalnie węzłów może mieć drzewo binarne w zależności od wysokości h?

dla np. n=10 000

h =  log2 (n + 1) = =  log2 10001  =  13,3 = 14

Algorytmy i struktury danych

Wysokość

Węzłów na poziom

Węzłów w drzewie

1

20=1

1= 21-1

2

21=2

3= 22-1

3

22=4

7= 23-1

4

23=8

15= 24-1

...

...

...

11

210=1024

2047= 2111

14

213=8192

...

...

16383= 214 ...-1

h

2h-1

n= 2h-1

...

...

...

...

3

Techniki równoważenia drzew BST

Sposoby równoważenia drzewa BST: 1. Uporządkowanie danych przed tworzeniem drzewa (wybór na korzeń elementu ze środka listy danych) 2. Stałe poprawianie drzewa w miarę wstawiania węzłów (np. z wykorzystaniem rotacji; przykład: drzewa AVL)

Algorytmy i struktury danych

4

Techniki równoważenia drzew BST Tworzenie drzewa po uprzednim posortowaniu jego elementów:  przed utworzeniem drzewa dane porządkowane są w tablicy;  na korzeń drzewa wybierany jest element bliski wartości środkowej; element ten wyznacza podział tablicy na lewą i prawą podtablicę;  lewy następnik korzenia: środek lewej podtablicy; prawy następnik korzenia: środek prawej podtablicy;  otrzymane drzewo jest dobrze zrównoważone ( liczba elementów na drodze od korzenia do dowolnego liścia jest rzędu log2 n );

Algorytmy i struktury danych

5

Techniki równoważenia drzew BST Tworzenie drzewa po uprzednim posortowaniu jego elementów (idea algorytmu): void balance(T data[ ], int first, int last) { if (first<=last) { int middle=(first+last)/2; insert(data[middle]); balance(data, first, middle-1); balance(data, middle+1, last); } } Algorytmy i struktury danych

6

Techniki równoważenia drzew BST Przykład użycia funkcji balance

0 0 0

Strumień danych

5

1

9

8

7

0

2

3

4

6

Strumień uporządkowany

0

1

2

3

4

5

6

7

8

9

5

6

7

8

9

1 1 1

2 2 2

3 3 3

4 4 4

5 5

6 6

7 7

8 8

4

9

1

9

0

7 2

3 0

1

2

3

4

6

9

5 6

Algorytmy i struktury danych

8

5

7

8

9 7

Techniki równoważenia drzew BST Metoda poprawiania struktury drzewa:  zasadnicza wada poprzedniej metody: przed utworzeniem drzewa dane należało posortować;  inny sposób (bez sortowania): rozłożyć niezrównoważone drzewo i złożyć je ponownie;  stosunkowo efektywny może okazać się algorytm DSW (C.Day, Q.Stout, B.Warren):  przekształcenie drzewa w winorośl;  przekształcenie winorośli w drzewo zrównoważone (z wykorzystaniem rotacji).

Algorytmy i struktury danych

8

Techniki równoważenia drzew BST Przekształcenie drzewa w winorośl: UtwórzWinorośl (root, n ) { tmp=root; while ( tmp != 0 ) if ( tmp ma lewy następnik) { obróć następnik w prawo wokół tmp; ustaw tmp na następnik, który stał się poprzednikiem; } else ustaw tmp na jego prawy następnik; }

Algorytmy i struktury danych

9

Techniki równoważenia drzew BST Przykład przekształcenia drzewa w winorośl 5

5 10

10 20 15

10

30

15

25

tmp

20

20 25

23

23

25 40

23

30 28

23

15

15 20

30

40 tmp

10

10

20

28

5

5

tmp 15

25 23

5

25 40 tmp

30

28 28

Algorytmy i struktury danych

28 30 40 tmp 40 10

Techniki równoważenia drzew BST

Złożoność tworzenia winorośli  Przypadek optymistyczny (drzewo jest już winoroślą): pętla while wykonuje się n razy, nie są wykonywane żadne rotacje (tylko n instrukcji podstawienia); zatem T(n)=O(n)  Przypadek pesymistyczny (korzeń nie ma prawego dziecka): pętla while wykonuje się 2n – 1 razy, w tym wykonywanych jest n-1 rotacji; zatem: T(n)=O(n)

Algorytmy i struktury danych

11

Techniki równoważenia drzew BST Tworzenie drzewa zrównoważonego m = 2  log2 ( n +1 ) − 1; UtwórzDrzewoZrównoważone( n ) { wykonaj n-m rotacji w lewo, zaczynając od korzenia winorośli; while (m>1) { m=m/2; wykonaj m rotacji w lewo, zaczynając od korzenia winorośli; } }

Algorytmy i struktury danych

12

Techniki równoważenia drzew BST Przykład tworzenia drzewa zrównoważonego 5 10

10

20 20

5

15 20

15

23

5

28

40 10 5

30

28

40

30

25

30

28

25

Algorytmy i struktury danych

15 23

25

23

winorośl: n=9 m=23-1=7 n-m=9-7=2

25

10

20

30 23 28

40

15 drzewo zrównoważone

40 13

Techniki równoważenia drzew BST Złożoność przekształcania winorośli w drzewo zrównoważone  liczba rotacji w ramach pętli while:

( 2  log2 ( n +1 )  −1 − 1 ) + ... + 15 + 7 + 3 + 1 = =

 log 2 ( n +1 )  −1

∑( 2 i =1

i

− 1 ) = n −  log 2 ( n + 1 )

q n −1 Sn = a1 q −1

 łączna liczba rotacji:

n − m + ( n −  log 2 ( n + 1 ) ) =

= 2 n − m −  log 2 ( n + 1 )

Algorytmy i struktury danych

T(n)=O(n) 14

Techniki równoważenia drzew BST

Złożoność równoważenia drzewa •

Przekształcenie drzewa niezrównoważonego w winorośl: O(n)



Przekształcenie winorośli w drzewo zrównoważone: O(n) T(n) = max { O(n), O(n) } = O(n)

Algorytmy i struktury danych

15

Techniki równoważenia drzew BST Metoda poprawiania drzewa w miarę wstawiania węzłów Idea: elementy (dane), które wykorzystywane są najczęściej przesuwane są w górę drzewa (blisko korzenia) •

Drzewa samonaprawiające się



Ukosowanie (ang. splaying) drzewa

Algorytmy i struktury danych

16

Techniki równoważenia drzew BST Drzewa samonaprawiające się Idea: Przy sięganiu do elementu następuje korekta struktury drzewa poprzez: a) pojedynczą rotację (wokół poprzednika) b) przesunięcie elementu do korzenia

Algorytmy i struktury danych

17

Rotacja ◆

Lewa rotacja (lub „rotacja w lewo”) węzła y wokół węzła x ✦

Polega na obrocie węzła y wokół wyróżnionego węzła x przeciwnie do ruchu wskazówek zegara;



W wyniku rotacji węzeł y staje się nowym korzeniem poddrzewa, węzeł x zostaje jego lewym synem, a lewy syn węzła y zostaje prawym synem węzła x;



Można ją wykonać, jeżeli prawy syn węzła y nie jest NULL;

x α

y x

y β

Algorytmy i struktury danych

γ

α

γ β 18

Rotacja ◆

Prawa rotacja (lub „rotacja w prawo”) węzła x wokół węzła y: ✦

Polega na obrocie węzła x wokół wyróżnionego węzła y zgodnie z ruchem wskazówek zegara;



W wyniku rotacji węzeł x staje się nowym korzeniem poddrzewa, węzeł y zostaje jego prawym synem, a prawy syn węzła x zostaje lewym synem węzła y;



Można ją wykonać, jeżeli lewy syn węzła x nie jest NULL;

y

x α

x

γ β

Algorytmy i struktury danych

α

y β

γ 19

Techniki równoważenia drzew BST Ilustracja idei: sięgnięcie do węzła D P F D A

P Q

H

D A

E

Q F

E

H

a) rotacja w prawo węzła R

Algorytmy i struktury danych

20

Techniki równoważenia drzew BST Ilustracja idei: sięgnięcie do węzła R P F D A

Q H

E

D

P D A

Q

A F

F E

P

H

E

Q H

a) przesunięcie węzła R do korzenia (metodą podwójnej rotacji w prawo) Algorytmy i struktury danych

21

Techniki równoważenia drzew BST Ukosowanie (1985) 

Jest to modyfikacja strategii naprawiania drzewa poprzez przenoszenie do korzenia.



Korekta struktury drzewa następuje poprzez stosowanie pojedynczych rotacji parami, w kolejności zależnej od powiązania dziecka, rodzica i rodzica rodzica.



Wyróżnia się trzy przypadki (dostęp do węzła R, którego rodzicem jest Q, którego z kolei rodzicem jest P: •

Rodzic Q węzła R jest korzeniem.



Układ jednorodny: węzeł R jest lewym dzieckiem Q, zaś Q jest lewym dzieckiem P (lub kiedy w obu relacjach chodzi o prawe dziecko).



Układ niejednorodny: węzeł R jest lewym dzieckiem Q, zaś Q jest prawym dzieckiem P (lub kiedy R jest prawym dzieckiem, natomiast Q lewym).

Algorytmy i struktury danych

22

Techniki równoważenia drzew BST Ukosowanie – przykład (po sięgnięciu do węzła B) B

Q B A

R C

A

Q C

R

Przypadek 1. Rodzic węzła R jest korzeniem (rotacja w prawo węzła R) Algorytmy i struktury danych

23

Techniki równoważenia drzew BST Ukosowanie – przykład (po sięgnięciu do węzła F) P

K

F

F

Q A

L

F A

K

P G

L

A Q

K P

G

G

L

Q

Przypadek 2. Układ jednorodny (rotacja w prawo węzła K oraz rotacja w prawo węzła F) Algorytmy i struktury danych

24

Techniki równoważenia drzew BST Ukosowanie – przykład (po sięgnięciu do węzła N) P K A

P Q

N

N M

K O

A

N K

Q O

A

P M

O

Q

M

Przypadek 2. Układ niejednorodny (rotacja w lewo węzła N oraz rotacja w prawo węzła N) Algorytmy i struktury danych

25

Techniki równoważenia drzew BST Idea algorytmu ukosowania (przenoszenia węzła do korzenia) Ukosowanie ( P, Q, R ) { while (R nie jest korzeniem) if (rodzic R jest korzeniem) wykonaj pojedyncze ukosowanie: rotację R wokół jego rodzica; else if (R jest ze swoimi przodkami w układzie jednorodnym) wykonaj ukosowanie jednorodne: najpierw rotuj Q wokół P, potem R wokół Q; else // R jest ze swoimi przodkami w układzie niejednorodnym wykonaj ukosowanie niejednorodne: najpierw rotuj R wokół Q, potem R wokół P; } Algorytmy i struktury danych

26

Techniki równoważenia drzew BST Przykład ukosowania (po dostępie do węzła E) P N K I

A

Q

N

O L

J

E

P

F

E

E Q

A I

O

A

F

I

J

P K J

K

F

N

L

O

Q

L

Stan po drugiej parze rotacji

Stan po pierwszej parze rotacji Algorytmy i struktury danych

27

Techniki równoważenia drzew BST Przykład ukosowania c.d. (dostęp do węzła K) E

K

A

N

E

I F

P K J

O

N

A Q

I F

L J

P O

Q

L

Algorytmy i struktury danych

28

Algorytmy i struktury danych Temat: Zastosowania drzew binarnych  Drzewa wyrażeń arytmetycznych

Binarne drzewa wyrażeń  Jednym z zastosowań drzew binarnych jest jednoznaczny zapis wyrażeń arytmetycznych lub logicznych (bez używania nawiasów);  Drzewa wyrażeń konstruuje się, wykorzystując następujące założenia: ◆ każdy liść zawiera operand (argument) wyrażenia; ◆ każdy węzeł wewnętrzny zawiera operator np.: *, /, +, - itp.; ◆ wyrażenie powstaje w wyniku realizacji procedury przechodzenia drzewa jedną z trzech metod: ✦ ✦ ✦

bezpośredniej (inorder), z wyprzedzeniem (preorder), z opóźnieniem (postorder).

Algorytmy i struktury danych

30

Binarne drzewa wyrażeń Przykład drzewa wyrażeń + –

5

2

* 3

Algorytmy i struktury danych

4

Wynik przejścia drzewa metodą: ✦bezpośrednią (inorder): = -5 2–3*4+5 ✦z wyprzedzeniem = -5 (preorder): +–2*34= 5 -5 ✦z opóźnieniem (postorder): 234*–5+

31

Binarne drzewa wyrażeń Mnemotechniczna metoda przechodzenia drzewa:  wyruszamy z korzenia, okrążając drzewo w kierunku przeciwnym do ruchu wskazówek zegara;  staramy się być jak najbliżej mijanych węzłów (niektóre węzły odwiedzamy wielokrotnie);  chcą otrzymać listę węzłów odpowiadającą kolejności:  preorder, należy wypisywać każdy węzeł przy pierwszym jego odwiedzeniu;  postorder, należy wypisywać każdy węzeł przy ostatnim jego odwiedzeniu;  inorder, należy wypisywać każdy węzeł przy pierwszym jego odwiedzeniu jeżeli jest liściem, natomiast przy drugim odwiedzeniu, jeżeli jest węzłem wewnętrznym. Algorytmy i struktury danych

32

Binarne drzewa wyrażeń Mnemotechniczna metoda przechodzenia drzewa: Wynik przejścia drzewa:

+

+ – 2 – * 3 * 4 * – + 5 + –

5  Kolejność preorder: + – 2 * 3 4 5

2

* 3

 Kolejność postorder: 2 3 4 * – 5 +

4

 Kolejność inorder:

2–3 *4 + 5

UWAGA Niezależnie od metody każdy liść odwiedzany jest dokładnie jeden raz (i w tej samej kolejności) Algorytmy i struktury danych

33

Binarne drzewa wyrażeń Z uwagi na sposób przechodzenia drzewa wyróżniamy notację wyrażeń:  przedrostkową (prefiksową), np. + – 2 * 3 4 5  wzrostkową (infiksową), np. 2 – 3 * 4 + 5  przyrostkową (postfiksową), znanej jako notacja polska odwrotna, np. 2 3 4 * – 5 +

Algorytmy i struktury danych

34

Binarne drzewa wyrażeń Przykłady drzew wyrażeń Zapis wyrażenia metodą: ✦wzrostkową (inorder):

*

2 – 3 * 4 + 5 = -9 – 2

+ 3

4

✦przedrostkową

5

(preorder): * – 2 3 + 4 5 = -9 ✦przyrostkową

(postorder): 2 3 – 4 5 + * = -9

Algorytmy i struktury danych

35

Binarne drzewa wyrażeń Przykłady drzew wyrażeń Zapis wyrażenia metodą: ✦wzrostkową (inorder):

– 2

+ * 3

Algorytmy i struktury danych

5 4

2 – 3 * 4 + 5 = -15 ✦przedrostkową (preorder): – 2 + * 3 4 5 = -15 ✦przyrostkową (postorder): 2 3 4 * 5 + – = -15

36

Algorytmy i struktury danych

37

Related Documents

Aisd W07
November 2019 6
Aisd Statement
June 2020 8
Aisd W02
November 2019 14
Aisd W12
November 2019 28
Aisd W11
November 2019 10
Aisd W7
November 2019 16