21
Algoritmi i strukture podataka Stabla 1 Algoritmi i strukture podataka (450&550) Stabla Algoritmi i strukture podataka 2 Sadržaj Uvod Binarna stabla Stablo proračuna Stablo za pretraživanje AVL stabla Kosa stabla B stabla

Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

  • Upload
    others

  • View
    65

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 1

Algoritmi i strukture podataka (450&550)

Stabla

Algoritmi i strukture podataka 2

Sadržaj

Uvod

Binarna stabla

Stablo proračuna

Stablo za pretraživanje

AVL stabla

Kosa stabla

B stabla

Page 2: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 2

Algoritmi i strukture podataka 3

Stabla

Za velike količine ulaznih podataka linearno vrijeme pristupa ((N)) kod vezanih listi je problem .

Stabla vrlo korištena apstrakcija, tj. ADT, kod kojeg je u većini slučajeva vrijeme pristupa (logN).

Stablo se definira kao skup međusobno povezanih čvorova, pri čemu se početni čvor naziva root.

Root čvor sadrži pokazivače na čvorove istog tipa tzv. podstabla.

Ukoliko su svi pokazivači u root čvoru NULL, stablo je prazno.

- roditelj

- djeca

Algoritmi i strukture podataka 4

Stabla

A

JIH

GFEDCB

K NML

P Q

A je root čvor

čvorovi bez djece su listovi (B, C, H, I, K, L, M, N, P, Q)

čvorovi s istim roditeljem su braća (npr. K, L i M su potomci od F)

Do svakog čvora postoji samo jedan put (npr. do P put je: A->E->J->P)

Dubina stabla je duljina puta od root čvora do najudaljenijeg lista (3 za primjer sa slike).

Dubina root čvora je 0.

Page 3: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 3

Algoritmi i strukture podataka 5

Stabla

Implementacija stabla:typedef struct CvorStablo * Stablo;

struct CvorStablo {

TipElement El;

Stablo PrvoDijete;

Stablo NextBrat;

};

Algoritmi i strukture podataka 6

Stabla - primjer/studenti*

prog*knjige*

k1.pdf

tina*ana*ivo*

zad1.cpr.c

k2.doc arhit*strukture*

vjezbe*pred*

arhit*strukture*

/studenti*ivo*

knjige*k1.pdfk2.pdf

prog*pr.c

ana*zad1.c

tina*pred*

strukture*arhit*

vjezbe*strukture*arhit*

Page 4: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 4

Algoritmi i strukture podataka 7

Preorder ispis stabla

/studenti*

prog*knjige*

k1.pdf

tina*ana*ivo*

zad1.cpr.c

k2.doc arhit*strukture*

vjezbe*pred*

arhit*strukture*

1

2

3

Preorder:

prvo se ispiše root čvor

zatim se ispisuju njegova djeca s lijeva na desno.

Ukoliko djeca nisu listovi na njih se primjenjuju ista pravila.

Ovaj ispis daje točnu strukturu direktorija

/studenti*ivo*

knjige*k1.pdfk2.pdf

prog*pr.c

ana*zad1.c

tina*pred*

strukture*arhit*

vjezbe*strukture*arhit*

Algoritmi i strukture podataka 8

Postorder ispis stabla

Postorder:

prvo se ispišu podstabla djece s lijeva na desno,

pa tek onda root čvor.

Korištenjem ovog ispisa može se izračunati veličina direktorija.

1

2

3 4

k1.pdf 8k2.pdf 20

knjige* 29prog* 1pr.c 5

ivo* 36zad1.c 10

ana* 11strukture* 1arhit* 1

pred* 3strukture* 1arhit* 1

vjezbe* 3tina* 7

/studenti* 54

5 6

7

8

9

10

11 12

13

14 15

Page 5: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 5

Algoritmi i strukture podataka 9

Binarna stabla

Stablo kod kojeg svaki čvor ima najviše dvoje djece.

Najčešće je dubina binarnog stabla znatno manja od broja elemenata tj. dubina je najčešće (√N), dok je za poseban slučaj (binarna stabla pretraživanja) (log(N)).

Najgori slučaj binarnog stabla gdje je dubina N-1:

Implementacija stabla:typedef struct CvorStablo * Stablo;

struct CvorStabla {

TipElement El;

Stablo Lijevo;

Stablo Desno;

};

Algoritmi i strukture podataka 10

Stablo proračuna (expression tree)

Jedna od implementacija stabla gdje su operandi listovi, a čvorovi sadrže operacije.

Ako su operandi binarni, onda je to binarno stablo.

Za izraz (a+b*c)+((d*e+f)*g) stablo proračuna bi bilo:

+

+ *

g+*a

f*cb

ed

Page 6: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 6

Algoritmi i strukture podataka 11

Ispis stabla proračuna - inorder Stablo proračuna se ispisuje u sljedećem redoslijedu:

ispis lijevog podstabla rekurzivno (podstablo se ispisuje u zagradama),

ispis operatora,

ispis desnog podstabla rekurzivno (podstablo se ispisuje u zagradama).

INORDER prolazak kroz stablo rezultira infix izrazom.

1

2

3

4

5 7

6

89

10

11

12

13

14

15

16

17

18

( a + ( b * c ) ) + ( ( ( d * e ) + f ) * g )1 2 3 4 5 6 7 4 1 8 9 10 11 12 13 14 11 15 16 10 17 18 9

Algoritmi i strukture podataka 12

Ispis stabla proračuna - postorder Stablo proračuna se ispisuje u sljedećem redoslijedu:

ispis lijevog podstabla rekurzivno,

ispis desnog podstablo rekurzivno,

ispis operatora.

1

23

4 5

9

11

10

8

12

16

14

a b c * + d e * f + g * +2 4 5 6 7 11 12 13 14 15 16 17 18

6

7

13

15

17

18

POSTORDER ispis rezultira postfix izrazom.

Page 7: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 7

Algoritmi i strukture podataka 13

Ispis stabla proračuna - preorder Stablo proračuna se ispisuje u sljedećem redoslijedu:

ispis operatora,

ispis lijevog podstabla rekurzivno,

ispis desnog podstabla rekurzivno.

+ + a * b c * + * d e f g

PREORDER ispis rezultira jednom vrstom postfix izraza koja se manje koristi.

Algoritmi i strukture podataka 14

Stvaranje stabla proračuna

U stvaranju stabla proračuna kreće se od postfix izraza iz kojeg se čita jedan po jedan simbol, alocira se prostor za taj simbol.

Ako je simbol:

operand, pokazivač na taj čvor se stavlja na stog,

operator sa stoga se skidaju dva pokazivača (adrese prethodnih čvorova ili podstabala), prvi postaje desno dijete, a drugi lijevo

Primjer za: a + b * c + (d * e + f) * g => a b c * + d e * f + g *+

Page 8: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 8

Algoritmi i strukture podataka 15

Stvaranje stabla proračuna

a b c * + d e * f + g * +

* +

* +

a *

cb

ed+

*a

cb

Algoritmi i strukture podataka 16

Stvaranje stabla proračuna

a b c * + d e * f + g * +

* +

+

*a

cb

g+

f*

ed

+

*a

cb g+

f*

ed

*

Page 9: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 9

Algoritmi i strukture podataka 17

Binarna stabla za pretraživanje (binary search tree)

Jedna od važnih primjena binarnih stabala je za pretraživanje.

Binarno stablo je binarno stablo za pretraživanje ako za svaki čvor X vrijedi:

sve vrijednosti u lijevom podstablu su manje od vrijednosti X,

sve vrijednosti u desnom podstablu su veće od vrijednosti X.

Algoritmi i strukture podataka 18

Binarna stabla za pretraživanje - implementacija

Zbog rekurzivne definicije stabla , sve funkcije su rekurzivne.

Page 10: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 10

Algoritmi i strukture podataka 19

Stablo StvoriPrazno(Stablo S)

Funkcija StvoriPrazno se koristi uglavnom za inicijalizaciju i ona briše sve elemente stabla ukoliko postoje.

Kao argument uzima adresu elementa kojeg treba izbrisati ili inicijalizirati.

Stvori prazno stablo za primjere:

StvoriPrazno

S != NULL

StvoriPrazno(S->L);

StvoriPrazno(S->D);

free(S);

return NULL;//Kraj

Da

Ne

Algoritmi i strukture podataka 20

Pozicija TraziMin (Stablo S) Pozicija TraziMax (Stablo S)

TraziMin

NULL==S

return S;

return NULL;

Kraj

Da

Ne

NULL == S->LDa

return TraziMin(S->L);

Ne

TraziMax

NULL!=S

return S;

Kraj

Da

Ne

NULL!=S->DDa

S = S->D;

Ne

Page 11: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 11

Algoritmi i strukture podataka 21

Pozicija Trazi(tipElement X, Stablo S)

Funkcija Trazi vraća pokazivač na element s vrijednošću X, tj. NULL ako ne postoji.

Kao argument uzima traženu vrijednost i adresu elementa od kojeg se započinje potraga.

Trazi

NULL==S

return Trazi(X, S->L);

return NULL;

Kraj

Da

Ne

X<S->El

return S;

Da

X>S->El return Trazi(X, S->D);Da

Ne

Ne

Algoritmi i strukture podataka 22

Stablo Dodaj (tipElement X, Stablo S)

Funkcija Dodaj se koristi za umetanje elementa u stablo i pri tome stablo i dalje treba zadovoljavati uvjete stabla za pretraživanje.

6

82

41

3

6

82

41

3 5

dodaj5

Page 12: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 12

Algoritmi i strukture podataka 23

Stablo Dodaj (tipElement X, Stablo S)

Dodaj

NULL==S

S->L = Dodaj(X, S->L);

S = mallc();

Kraj

Da

Ne

X < S->El

return S;

Da

X > S->ElDa

Ne

Ne

S->El = X;S->L = NULL;S->D = NULL;

S->D = Dodaj(X, S->D);

Algoritmi i strukture podataka 24

Stablo Izbrisi (tipElement X, Stablo S)

Brisanje stabla:

brisanje lista;

brisanje čvora s jednim djetetom,

brisanje čvora s dvoje djece.

6

82

brisanje lista

6

82

briši2

1. pronađi čvor

2. izbrisati vezu s roditeljem

3. osloboditi prostor

6

8

Page 13: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 13

Algoritmi i strukture podataka 25

Stablo Izbrisi (tipElement X, Stablo S)

Brisanje stabla:

brisanje lista;

brisanje čvora s jednim djetetom,

brisanje čvora s dvoje djece.

6

82

41

3

brisanje čvora s jednim djetetom

briši4

1. pronađi čvor

2. uspostavi vezu između njegovog roditelja i djeteta

3. osloboditi prostor

6

82

41

3

6

82

31

Algoritmi i strukture podataka 26

Stablo Izbrisi (tipElement X, Stablo S)

Brisanje stabla:

brisanje lista;

brisanje čvora s jednim djetetom,

brisanje čvora s dvoje djece.

6

82

51

3

4

brisanje čvora s dvoje djece

briši2

1. pronađi čvor

2. zamjeni njegovu vrijednost s vrijednošću najmanjeg elementa u desnom podstablu (ili najvećeg u lijevom)

3. izbriši element koji je sadržavao najmanju vrijednost u desnom podstablu (ili najvećeg u lijevom)

6

83

51

3

4

6

83

51

4

6

82

51

3

4

Page 14: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 14

Algoritmi i strukture podataka 27

Stablo Izbrisi (tipElement X, Stablo S)

Primjer: Iz zadanog stabla izbrisati čvorove: 1, 4, 2, ali tako da se svaki put kreće od početnog stabla.

Algoritmi i strukture podataka 28

Ispis elemenata binarnog stabla

Postoji nekoliko da se ispišu elementi stabla:

inorder:

lijevo podstablo, trenutni čvor, desno podstablo;

postorder:

lijevo podstablo, desno podstablo, trenutni čvor;

preorder:

trenutni čvor, lijevo podstablo, desno podstablo;

level order :

svi čvorovi dubine D se obrađuju prije čvorova dubine D+1.

Kako implementirati funkcije za ove ispise?

Page 15: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 15

Algoritmi i strukture podataka 29

AVL stabla – Adelson-Velskii i Landis

AVL stablo je balansirano binarno stablo pretraživanja.

Balansirano stablo je stablo kod kojeg za svaki čvor vrijedi da se duljina lijevog i desnog podstabla razlikuju najviše za 1.

Duljina praznog stabla je –1, a stabla sa samo root čvorom 0.

Prednost ovog pristupa je u tome što je duljina AVL stabla ≈ logN, pa sve operacije za pretraživanje su O(logN)

Problem je ubacivanje novog člana i brisanje, jer to može uzrokovati balansiranje stabla.

5

82

41

3

7

7

82

41

3 5

Algoritmi i strukture podataka 30

AVL stabla – Umetanje novog elementa

Kod umetanja novog elementa treba voditi računa da stablo ostane balansirano.

Kod umetanja promjena balansiranosti se može desiti samo onim čvorovima koji se nalaze između umetnutog i root čvora.

Promjenu balansiranosti može izazvati:

ubacivanje u lijevo podstablo lijevog djeteta,

ubacivanje u desno podstablo desnog djeteta,

ubacivanje u desno podstablo lijevog djeteta,

ubacivanje u lijevo podstablo desnog djeteta.

jednostruka rotacija

dvostruka rotacija

Page 16: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 16

Algoritmi i strukture podataka 31

AVL stabla – Jednostruka rotacija

lijevo podstablo lijevog djeteta

desno podstablo desnog djeteta

Algoritmi i strukture podataka 32

AVL stabla – Jednostruka rotacija Zadatak je kreirati AVL stablo a unosi se 3, 2, 1, 4, 5, 6, 7

dodaj3 2

31

2

31

5

4

dodaj2

dodaj4

dodaj1

dodaj6

dodaj5

dodaj7

Page 17: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 17

Algoritmi i strukture podataka 33

AVL stabla – Dvostruka rotacija

lijevo-desna dvostruka rotacija

desno-lijeva dvostruka rotacija

Algoritmi i strukture podataka 34

AVL stabla – Dvostruka rotacija U AVL stablo iz prošlog primjera treba dodati 16, 15, 14, 13, 12, 11, 10, 8, 9

4

62

31 5 7

dodaj16

dodaj15

dodaj13

dodaj14

dvostrukar.

dvostrukar.

Page 18: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 18

Algoritmi i strukture podataka 35

AVL stabla – Dvostruka rotacija4

72

31 6 5

145

13

16

7

154

62

3

14 16

51 13

7

154

62

3

13 16

51 12 14

11

7

154

62

3

13 16

51 12 14

7

134

62

3

12 15

1451 11 16

dodaj12

jednostrukar.

jednostrukar.

dodaj11

jednostrukar.

dodaj10

Algoritmi i strukture podataka 36

AVL stabla – Dvostruka rotacija

dodaj8

dodaj9

dvostrukar.

7

134

62

3

12 15

1451 11

10

16

7

134

62

3

11 15

1451 10 12

8

16

jednostrukar.

Page 19: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 19

Algoritmi i strukture podataka 37

AVL stabla – Dvostruka rotacija

Algoritmi i strukture podataka 38

AVL stabla - implementacija

Page 20: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 20

Algoritmi i strukture podataka 39

StabloAVL DodajAVL (tipElement X, StabloAVL S)

Algoritmi i strukture podataka 40

PozicijaAVL JednostrukaRL (PozicijaAVL K2)

JednostrukaRL

K2->visina = Max(Visina(K2->L), Visina(K2->D)) +1;

Kraj

NePositionAVL K1;

K1 = K2->L;K2->L = K1->D;

K1->D = K2;

K1->visina = Max(Visina(K1->L), K2->visina) +1;

return K1;

Page 21: Algoritmi i strukture podataka (450&550). semestar/Algoritmi i strukture podataka... · Algoritmi i strukture podataka Stabla 2 Algoritmi i strukture podataka 3 Stabla Za velike količine

Algoritmi i strukture podataka

Stabla 21

Algoritmi i strukture podataka 41

PozicijaAVL DvostrukaRD (PozicijaAVL K3)

Stabla

Kraj