poglavlje 4: skupovi

83
Poglavlje 4: Skupovi Sastavio: Robert Manger 04.11.2020. Sveučilište u Zagrebu PMF – Matematički odsjek STRUKTURE PODATAKA I ALGORITMI Predavanja 2020/2021

Upload: others

Post on 28-Oct-2021

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Poglavlje 4: Skupovi

Poglavlje 4:

Skupovi

Sastavio: Robert Manger

04.11.2020.

Sveučilište u Zagrebu

PMF – Matematički odsjek

STRUKTURE PODATAKA I

ALGORITMI

Predavanja 2020/2021

Page 2: Poglavlje 4: Skupovi

Sadržaj Poglavlja 4

4.1. (Općeniti) skup

4.2. Rječnik

4.3. Prioritetni red

4.4. Preslikavanje i relacija

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

2

Page 3: Poglavlje 4: Skupovi

Svojstva i primjene skupa (1)

• Skup je kolekcija podataka istog tipa koje

zovemo elementi.

– U jednoj kolekciji ne mogu postojati dva podatka s

istom vrijednošću.

– Unutar kolekcije se ne zadaje nikakav eksplicitni

linearni ili hijerarhijski uređaj među podacima, niti

bilo kakav drugi oblik veza medu podacima.

– Ipak, uzimamo da za same vrijednosti elemenata

postoji neka implicitna (prirodna) relacija totalnog

uređaja.

– Dakle, možemo govoriti o tome koji je element veći,

a koji je manji.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

3

Page 4: Poglavlje 4: Skupovi

Svojstva i primjene skupa (2)

• Primjer korištenja skupova.

– Pretraživanjem baze podataka dobivamo skupove

imena osoba:

A = {osobe s barem 10 godina staža},

B = {osobe s višom stručnom spremom}.

– Tada skup osoba s barem deset godina staža ili

VSS računamo kao A B.

– Skup osoba s barem 10 godina staža i VSS

dobivamo kao A B.

– Slično, B \ A čine osobe s VSS koje još nemaju 10

godina staža.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

4

Page 5: Poglavlje 4: Skupovi

Svojstva i primjene skupa (3)

• Apstraktni tip podataka Set

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

5

Page 6: Poglavlje 4: Skupovi

Svojstva i primjene skupa (4)

• Apstraktni tip podataka Set (nastavak).

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

6

Page 7: Poglavlje 4: Skupovi

Svojstva i primjene skupa (5)

• Ovako zadani apstraktni tip podataka Set dosta je

teško implementirati.

– Ako postignemo efikasno obavljanje jednih operacija,

sporo će se obavljati neke druge operacije.

• Za sada gledamo implementacije napravljene

tako da se spretno obavljaju operacije s više skupova: SeUnion( ), SeIntersection(),

SeDifference( ), SeSubset( ).

– Implementacije koje pogoduju ostalim operacijama

obrađuju se u poglavljima 4.2. i 4.3.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

7

Page 8: Poglavlje 4: Skupovi

Implem skupa pomoću bit-vektora (1)

• Uzimamo da je elementtype = {0,1,2,

..., N−1}, gdje je N dovoljno velika konstanta.

• Skup prikazujemo poljem bitova (ili byte-ova tj. char-ova).

– Bit s indeksom i je 1 (odnosno 0) ako i samo ako i-ti

element pripada (odnosno ne pripada ) skupu.

• Implementacija postaje neupotrebljiva ako je N

velik (trošimo previše memorije na nule).

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

8

Page 9: Poglavlje 4: Skupovi

Implem skupa pomoću bit-vektora (2)

• Varijablu tipa Set inicijaliziramo

– dinamičkim alociranjem memorije za polje, ili

– tako da je poistovjetimo s početnom adresom već

deklariranog polja.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

9

Page 10: Poglavlje 4: Skupovi

Implem skupa pomoću bit-vektora (3)

• Operacije iz apstraktnog tipa podataka Set

mogu se realizirati na očigledni način.

– SeInsert( ), SeDelete( ) i SeMember( )

zahtijevaju konstantno vrijeme.

– SeUnion( ), SeIntersection( ),

SeDifference( ), SeSubset( )

zahtijevaju vrijeme proporcionalno s N.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

10

Page 11: Poglavlje 4: Skupovi

Impl skupa pomoću vezane liste (1)

• Skup prikazujemo kao listu.

– Od dviju razmatranih implementacija liste, bolja je

ona pomoću pointera.

– Naime, veličina skupova dobivenih operacijama , ,

\ može jako varirati.

– Da bi se operacije efikasnije obavljale, dobro je da lista bude sortirana u skladu s <=.

– Pretpostavimo da je tip celltype definiran kao u

poglavlja 2.1.

– Pretpostavljamo sljedeću definiciju tipa Set.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

11

Page 12: Poglavlje 4: Skupovi

Impl skupa pomoću vezane liste (2)

• Dalje ispisujemo SeIntersection( ).

• Funkcije SeUnion( ), SeDifference( ) i

SeSubset( ) bile bi vrlo slične.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

12

Page 13: Poglavlje 4: Skupovi

Impl skupa pomoću vezane liste (3)

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

13

• Vrijeme

izvršavanja

proporcionalno

je duljini lista.

Page 14: Poglavlje 4: Skupovi

Impl skupa pomoću vezane liste (4)

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

14

• Računanje presjeka skupova

A = {1, 3, 5, 6} i B = {2, 3, 4, 5}.

ah 1 3 65

ac

bh 2 3 54

bc

*chp

cc

Inicijalizacija:

ah 1 3 65

ac

bh 2 3 54

bc

*chp

cc

Prvi korak:

Page 15: Poglavlje 4: Skupovi

Impl skupa pomoću vezane liste (5)

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

15

• Računanje presjeka skupova

A = {1, 3, 5, 6} i B = {2, 3, 4, 5} (nastavak).ah 1 3 65

ac

bh 2 3 54

bc

*chp

cc

Drugi korak:

ah 1 3 65

ac

bh 2 3 54

bc

*chp

cc

Treći korak:

3

Page 16: Poglavlje 4: Skupovi

Sadržaj Poglavlja 4

4.1. (Općeniti) skup

4.2. Rječnik

4.3. Prioritetni red

4.4. Preslikavanje i relacija

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

16

Page 17: Poglavlje 4: Skupovi

Svojstva i primjene rječnika (1)

• U mnogim primjenama nije potrebno pamtiti

više skupova niti obavljati složene operacije

kao što su , , \ .

• Umjesto toga, pamti se jedan skup.

• Nad tim jednim skupom obavljaju se:

– ubacivanja i izbacivanja elemenata,

– provjere nalazi li se zadani element u skupu ili ne.

• Takav skup nazivamo rječnik (dictionary).

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

17

Page 18: Poglavlje 4: Skupovi

Svojstva i primjene rječnika (2)

• Apstraktni tip podataka Dictionary.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

18

Page 19: Poglavlje 4: Skupovi

Svojstva i primjene rječnika (2)

• Primjeri korištenja rječnika.

– Pravopis je popis ispravnih riječi nekog jezika.

• Da bismo ustanovili da li je neka riječ ispravno zapisana,

gledamo postoji li ona u pravopisu.

• Povremeno u pravopis ubacujemo nove riječi ili izbacujemo

zastarjele.

– Neki tekst procesori imaju u sebi spelling checker:

• popis ispravno napisanih riječi,

• program koji usporeduje naš tekst s popisom.

– Višekorisničko računalo prepoznaje korisnike na

osnovi njihovih imena.

• Kod prijavljivanja, korisnik upisuje ime, a stroj provjerava

postoji li ime na popisu.

• Administrator ubacuje nove korisnike ili briše odsutne.SPA-4 STRUKTURE PODATAKA I

ALGORITMI

19

Page 20: Poglavlje 4: Skupovi

Implementacija rječnika pomoću

bit-vektora

• Isto kao u odjeljku 4.1.

• Operacije DiInsert( ),

DiDelete( ) i

DiMember( ) obavljaju

se u vremenu O(1).

• Implementacija postaje

neupotrebljiva ako je elementtype velik.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

20

Page 21: Poglavlje 4: Skupovi

Implement rječnika pomoću liste (1)

• Skup shvatimo kao listu, koja može biti:

– sortirana (u skladu s <=) ili nesortirana,

– prikazana pomoću polja ili pointera (poglavlje 2.1).

• Od četiri moguće varijante detaljnije

promatramo sortiranu listu prikazanu kao polje.

– Ta varijanta je pogodna za “statične” skupove gdje se često obavlja funkcija DiMember( ), a rjeđe

DiInsert( ) ili DiDelete( ).

– Funkcija DiMember( ) tada se može obavljati u

vremenu O(log2 n), gdje je n duljina liste.

– Služimo se algoritmom binarnog traženja.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

21

Page 22: Poglavlje 4: Skupovi

Implement rječnika pomoću liste (2)

• Pretp da je tip List definiran kao u odjeljku

2.1 te da je Dictionary poistovjećen s List.

22

Page 23: Poglavlje 4: Skupovi

Implement rječnika pomoću liste (3)

• Primjeri

za

binarno

traženje

SPA-4

a

d

f

.

.

.

0

1

2

A.last

A.elements

g

l

m

3

4

5

o

r

s

6

7

8

t

v

z

9

10

11

12

x = v

1. [f, l] = [0, 11]; m = 5; A[5] = m v

2. [f, l] = [6, 11]; m = 8; A[8] = s v

3. [f, l] = [9, 11]; m = 10; A[10] = v

x = c

1. [f, l] = [0, 11]; m = 5; A[5] = m c

2. [f, l] = [0, 4]; m = 2; A[2] = f c

3. [f, l] = [0, 1]; m = 0; A[0] = a c

4. [f, l] = [1, 1]; m = 1; A[0] = d c

5. [f, l] = [1, 0]; m = 0; nema

STRUKTURE PODATAKA I

ALGORITMI

23

Page 24: Poglavlje 4: Skupovi

Implement rječnika pomoću liste (4)

• Da bi se čuvala sortiranost, DiInsert( )

mora ubaciti novi element na “pravo” mjesto,

što može zahtijevati O(n) prepisivanja.

• Slično vrijedi i za DiDelete( ).

• Ako se često obavljaju DiInsert( )i

DiDelete( ) a rjeđe DiMember( ), tada

su pogodnije ostale tri varijante korištenja liste.

– Kod tih varijanti može se izbjeći prepisivanje prilikom

ubacivanja i izbacivanja.

– Ipak, vrijeme u najgorem slučaju za pojedinu

operaciju je i dalje O(n) (zbog traženja u listi).

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

24

Page 25: Poglavlje 4: Skupovi

Imp rječnika pomoću hash-tablice (1)

• Implementaciju rječnika pomoću bit-vektora

možemo gledati kao bijekciju oblika: elementtype→ memorija.

– Takva implementacija je u jednu ruku idealna, jer se funkcije DiInsert( ), DiDelete( ),

DiMember( ) izvršavaju u vremenu O(1).

– S druge strane, ta implementacija je obično

neupotrebljiva, jer zauzima prevelik komad memorije.

• Kompromisno rješenje je umjesto bijekcije

promatrati surjekciju na manji komad memorije.

– Tada se doduše više različitih elemenata može

preslikati na istu adresu.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

25

Page 26: Poglavlje 4: Skupovi

Imp rječnika pomoću hash-tablice (2)

• Hash-funkcija h( ) je potprogram koji

surjektivno preslikava elementtype na skup

cijelih brojeva izmedu 0 i B−1, gdje je B konstanta.

• Hash-tablica je polje od B klijetki koje zovemo

pretinci. Indeksi pretinaca su 0,1,2,...,B-1.

• Implementacija rječnika pomoću hash-tablice:– Element x spremimo u pretinac s indeksom h(x).

– Kasnije ga u istom pretincu i tražimo.

• Kad se dogodi da više različitih elemenata

moramo spremiti u isti pretinac to se zove kolizija.

• Razne varijante implementacije razlikuju se po

građi pretinca tablice i načinu rješavanja kolizije.SPA-4 STRUKTURE PODATAKA I

ALGORITMI

26

Page 27: Poglavlje 4: Skupovi

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

27

• Neka je elementtype skup svih

nizova znakova duljine 10, tada možemo definirati ovakav h( ):

Imp rječnika pomoću

hash-tablice (3)

Page 28: Poglavlje 4: Skupovi

Imp rječnika pomoću hash-tablice (4)

• Otvoreno haširanje. – Pretinac je građen kao vezana lista. – Kad god treba novi element x ubaciti u i-ti pretinac,

tada se i-ta vezana lista produlji još jednim zapisom.

– Kapacitet jednog pretinca je promjenjiv.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

28

Page 29: Poglavlje 4: Skupovi

Imp rječnika pomoću hash-tablice (5)

• Definicije u C-u za otvoreno haširanje.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

29

Page 30: Poglavlje 4: Skupovi

Imp rječnika pomoću hash-tablice (6)

• Definicije u C-u za otvoreno haširanje (nastavak).

STRUKTURE PODATAKA I

ALGORITMI

30

Page 31: Poglavlje 4: Skupovi

Imp rječnika pomoću hash-tablice (7)

• Definicije u C-u za otvoreno haširanje (drugi nast).

STRUKTURE PODATAKA I

ALGORITMI

31

Page 32: Poglavlje 4: Skupovi

Imp rječnika pomoću hash-tablice (8)

• Zatvoreno haširanje.

– Pretinac ima fiksni kapacitet. Zbog jednostavnosti

uzimamo da u jedan pretinac stane jedan element.

– Hash-tablica je polje klijetki tipa elementtype.

– Ako trebamo ubaciti element x, a klijetka h(x) je

već puna, tada pogledamo na alternativne lokacije: hh(1,x), hh(2,x), ...

sve dok ne nađemo jednu praznu.

– Najčešće se hh(i,x) zadaje kao

hh(i,x) = (h(x)+i) % B;

to se onda zove “linearno” haširanje.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

32

Page 33: Poglavlje 4: Skupovi

Imp rječnika pomoću hash-tablice (9)

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

33

• Primjer zatvorene

hash-tablice.

– B jednak 8.

– Ubacujemo elemente

a, b, c, d

(u tom redoslijedu).

– Hash-funkcija h( )

redom daje

vrijednosti

3,0,4,3.

– Radi se o linearnom

haširanju.

Page 34: Poglavlje 4: Skupovi

Imp rječnika pomoću hash-tablice (10)

• Prazne pretince u zatvorenoj tablici poznajemo po tome što sadrže rezerviranu vrijednost EMPTY.

• Traženje elementa x u zatvorenoj tablici:– Gledamo pretince h(x), hh(1,x), hh(2,x), ...

sve dok ne nađemo x ili EMPTY.

– Ovaj postupak je ispravan samo ako nema izbacivanja

elemenata.

• Da bismo ipak mogli izbacivati iz zatvorene tablice, uvodimo i rezerviranu vrijednost: DELETED.

• Poništavanje elementa u zatvorenoj tablici:– Umjesto njega u dotični pretinac upišemo DELETED.

– Taj pretinac kasnije se može upotrijebiti kod novog

ubacivanja kao da je prazan.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

34

Page 35: Poglavlje 4: Skupovi

Imp rječnika pomoću hash-tablice (11)

• Definicije u C-u za zatvoreno haširanje:

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

35

Page 36: Poglavlje 4: Skupovi

Imp rječnika pomoću hash-tablice (12)

• Definicije u C-u za zatvoreno haširanje (nastavak):

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

36

Page 37: Poglavlje 4: Skupovi

Imp rječnika pomoću hash-tablice (13)

• Hash-tablica mora biti dobro dimenzionirana u

odnosu na rječnik koji se pohranjuje. – Neka je n broj elemenata u rječniku. Preporučuje se:

• da kod otvorenog haširanja bude n ≤ 2·B,

• a kod zatvorenog haširanja n ≤ 0,9 ·B.

• Također je važno da h( ) jednoliko

raspoređuje vrijednosti na pretince.

• Ako je sve to ispunjeno, tada bilo koja od operacija DiInsert( ), DiDelete( ),

DiMember( ) zahtijeva svega nekoliko čitanja.

• Ako se tablica previše napuni, treba je prepisati

u novu, veću.SPA-4 STRUKTURE PODATAKA I

ALGORITMI

37

Page 38: Poglavlje 4: Skupovi

Implem rječnika pomoću bin stabla (1)

• Binarno stablo T je binarno stablo traženja ako:

– Čvorovi od T su označeni podacima nekog tipa na

kojem je definiran totalni uređaj.

– Neka je i bilo koji čvor od T. Tada su oznake svih

čvorova u lijevom pod-stablu od i manje od oznake od i.

– Također, oznake svih čvorova u desnom pod-stablu od i

su veće ili jednake od oznake od i.

• Ideja implementacije: rječnik prikazujemo binarnim

stablom traženja.

– Svakom elementu rječnika odgovara točno jedan čvor

binarnog stabla i obratno.

– Element rječnika služi kao oznaka odgovarajućeg čvora

binarnog stabla.SPA-4 STRUKTURE PODATAKA I

ALGORITMI

38

Page 39: Poglavlje 4: Skupovi

Implem rječnika pomoću bin stabla (2)

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

39

• Prikaz skupa A =

{5,7,10,12,14,15,18}

pomoću binarnog

stabla traženja.

– Prikaz nije

jedinstven.

– Obilaskom

binarnog stabla

algoritmom Inorder( )

dobivamo elemente

skupa u sortiranom

redoslijedu.

Page 40: Poglavlje 4: Skupovi

Implem rječnika pomoću bin stabla (3)

• Samo binarno stablo može se prikazati pomoću

pointera (vidi poglavlje 3.2). Tada su potrebne

sljedeće definicije:

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

40

• Operacija DiMakeNull( ) je trivijalna, svodi se

na pridruživanje vrijednosti NULL pointeru.

element

lijevo

dijete

desno

dijete

Page 41: Poglavlje 4: Skupovi

Implem rječnika pomoću bin stabla (4)

• Operacija DiMember( ) se zahvaljujući

svojstvima binarnog stabla traženja lako

implementira rekurzijom:

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

41

Page 42: Poglavlje 4: Skupovi

Implem rječnika pomoću bin stabla (5)

• Operacija DiInsert( ) radi slično. Ona poput

DiMember( ) traži mjesto u binarnom stablu

gdje bi morao biti novi element, te ubacuje novi

čvor na to mjesto.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

42

Page 43: Poglavlje 4: Skupovi

Implem rječnika pomoću bin stabla (6)

• Nešto je složenija operacija DiDelete(x,&A).

Imamo tri slučaja:

– x je u listu.

Tada jednostavno izbacimo list iz stabla.

– x je u čvoru koji ima samo jedno dijete.

Nadomjestimo čvor od x s njegovim djetetom.

– x je u čvoru koji ima oba djeteta.

Nađemo najmanji element y u desnom pod-stablu

čvora od x. Izbacimo čvor od y (jedan od dva

prethodna slučaja). U čvor od x spremimo y umjesto

x.SPA-4 STRUKTURE PODATAKA I

ALGORITMI

43

Page 44: Poglavlje 4: Skupovi

Implem rječnika pomoću bin stabla (7)

• Primjerice, brisanjem čvora s oznakom 14 iz

stabla s lijeva dobivamo stablo s desna.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

44

Page 45: Poglavlje 4: Skupovi

Implem rječnika pomoću bin stabla (8)

• Ili brisanjem čvora s oznakom 10 iz stabla s lijeva

dobivamo stablo s desna. – Najmanja oznaka u desnom pod-stablu od 10 je 12.

– Izbacimo čvor od 12.

– U čvor koji sadrži 10 upišemo 12 i time izbrišemo 10.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

45

Page 46: Poglavlje 4: Skupovi

Implem rječnika pomoću bin stabla (9)

• Izbacivanja se spretno može zapisati ako uvedemo pomoćnu funkciju DiDeleteMin(&A).

– Ona iz nepraznog binarnog stabla A izbacuje čvor s

najmanjim elementom te vraća taj najmanji element.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

46

Page 47: Poglavlje 4: Skupovi

Impl rječnika pomoću bin stabla (10)

• Evo i operacije DiDelete( ).

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

47

Page 48: Poglavlje 4: Skupovi

Impl rječnika pomoću bin stabla (11)

• Vrijeme izvršavanja za DiMember( ),

DiInsert( ),

DiDelete( )

ograničeno je

visinom stabla.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

48

• Neka rječnik ima n elemenata.

– Visina stabla varira između log2(n+1)−1 i n−1.

– Ekstremni slučajevi su potpuno binarno stablo i

“ispruženo” stablo - lanac.

Page 49: Poglavlje 4: Skupovi

Impl rječnika pomoću bin stabla (12)

• Vrijeme izvršavanja za operacije varira između

O(log n) i O(n). Koja ocjena je vjerodostojnija?

• Može se dokazati da vrijedi sljedeći teorem:

Neka je binarno stablo traženja od n čvorova stvoreno

od praznog binarnog stabla n-strukom primjenom operacije DiInsert( ). Pritom je bilo koji redoslijed

ubacivanja elemenata jednako vjerojatan. Tada očekivano vrijeme izvršavanja za DiInsert( ),

DiDelete( ) ili DiMember( ) iznosi O(log n).

• Postoje složenije vrste binarnih stabala traženja,

na primjer AVL-stabla, gdje vrijeme za operacije u

najgorem slučaju također iznosi O(log n).SPA-4 STRUKTURE PODATAKA I

ALGORITMI

49

Page 50: Poglavlje 4: Skupovi

Sadržaj Poglavlja 4

4.1. (Općeniti) skup

4.2. Rječnik

4.3. Prioritetni red

4.4. Preslikavanje i relacija

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

50

Page 51: Poglavlje 4: Skupovi

Svojstva i primjene prior reda (1)

• U nekim algoritmima pojavljuje se skup čijim

elementima su pridruženi prioriteti. Operacije su: – ubacivanje novog elementa,

– izbacivanje elementa s najmanjim prioritetom.

Takav skup nazivamo prioritetni red.

• Primjeri.– Pacijenti ulaze u čekaonicu, te iz nje odlaze liječniku.

• Prvi na redu onaj čije je stanje najteže.

– Tramvaj vozi gradom• Putnici izlaze na svojim izlaznim stanicama.

– U računalu se formira prioritetni red programa (procesa)

koji čekaju na izvođenje.• OS uzima iz reda program s najmanjim prioritetom te ga izvodi.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

51

Page 52: Poglavlje 4: Skupovi

Svojstva i primjene prior reda (2)

• Spomenute probleme svodimo na jednostavniji

problem ubacivanja elemenata u skup, te

izbacivanja najmanjeg elementa.

– Naime, umjesto originalnih elemenata x, promatramo

uređene parove (prioritet(x),x).

– Za uređene parove definiramo leksikografski uređaj:

(prioritet(x1),x1) ≤ (prioritet(x2),x2) ako je

• prioritet(x1) < prioritet(x2) ili

• prioritet(x1) = prioritet(x2) i x1 ≤ x2.

• Ova dosjetka opravdava sljedeću definiciju

apstraktnog tipa podataka.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

52

Page 53: Poglavlje 4: Skupovi

Svojstva i primjene prior reda (3)

• Apstraktni tip podataka PriorityQueue.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

53

Page 54: Poglavlje 4: Skupovi

Implementacija prioritetnog reda

pomoću liste

• Prioritetni red prikazujemo kao listu. Od raznih

varijanti najbolja se čini sortirana vezana lista.

– PrDeleteMin( ) pronalazi i izbacuje prvi element

u listi, pa ima vrijeme O(1).

– PrInsert( ) mora ubaciti novi element na “pravo

mjesto”, pa mora pročitati u prosjeku pola liste.

– Zato PrInsert( ) ima vrijeme O(n), gdje je n broj

elemenata u redu.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

54

Page 55: Poglavlje 4: Skupovi

Implementacija prioritetnog reda

pomoću binarnog stabla traženja

• Prioritetni red prikazujemo binarnim stablom.

– Sasvim isto kao za rječnik (vidi odjeljak 4.2).

– Mogu se upotrijebiti preimenovani potprogrami DiInsert( ), DiDeleteMin( ),

DiMakeNull( ).

– Funkcija PrEmpty( ) je trivijalna.

– Očekivano vrijeme izvršavanja za operaciju PrInsert( ) ili PrDeleteMin( ) iznosi

O(log n), gdje je n broj elemenata u redu.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

55

Page 56: Poglavlje 4: Skupovi

Imp prioritetnog reda pomoću hrpe (1)

• Potpuno binarno stablo T je hrpa (heap), ako su

ispunjeni sljedeći uvjeti:

– Čvorovi od T označeni su podacima nekog tipa na

kojem je definiran totalni uređaj.

– Neka je i bilo koji čvor od T. Tada je oznaka od i ≤ od

oznake bilo kojeg djeteta od i.

• Ideja implementacije: prioritetni red prikazujemo

hrpom.

– Svakom elementu reda odgovara točno jedan čvor

hrpe i obratno.

– Element reda služi kao oznaka odgovarajućeg čvora

hrpe.SPA-4 STRUKTURE PODATAKA I

ALGORITMI

56

Page 57: Poglavlje 4: Skupovi

Imp prioritetnog reda pomoću hrpe (2)

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

57

• Prikaz prioritetnog reda:

A = {3,5,6,8,9,10,11,12,13,14,15,17} pomoću hrpe.

– Prikaz nije

jedinstven.

– Najmanji

element

mora biti u

korijenu.

Page 58: Poglavlje 4: Skupovi

Imp prioritetnog reda pomoću hrpe (3)

• Obavljanje operacije PrDeleteMin( ).

– Vraćamo element iz korijena.

– Izbacujemo zadnji čvor na zadnjoj razini, a njegov

element stavimo u korijen. Time se sigurno pokvarilo

svojstvo hrpe.

– Popravak svojstva hrpe obavlja se ovako:

• zamijenimo element u korijenu i manji element u korijenovom

djetetu,

• zatim zamijenimo element u djetetu i manji element u

djetetovom djetetu,

• itd, dok je potrebno.

Niz zamjena ide najdalje do nekog lista.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

58

Page 59: Poglavlje 4: Skupovi

Imp prioritetnog reda pomoću hrpe (4)

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

59

• Učinak PrDeleteMin()

na hrpu s

prethodne slike.

Page 60: Poglavlje 4: Skupovi

Imp prioritetnog reda pomoću hrpe (5)

• Obavljanje operacije PrInsert( ).

– Stvaramo novi čvor na prvom slobodnom mjestu

zadnje razine, stavljamo novi element u taj novi čvor.

Time se možda pokvarilo svojstvo hrpe.

– Popravak svojstva hrpe obavlja se ovako:

• zamijenimo element u novom čvoru i element u roditelju

novog čvora,

• zatim zamijenimo element u roditelju i element u

roditeljevom roditelju,

• ..., itd., dok je potrebno.

Niz zamjena ide najdalje do korijena.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

60

Page 61: Poglavlje 4: Skupovi

Imp prioritetnog reda pomoću hrpe (6)

• Učinak

ubacivanja

elementa 4

hrpu sa

slike na

slajdu 54.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

61

Page 62: Poglavlje 4: Skupovi

Imp prioritetnog reda pomoću hrpe (7)

• Da bismo implementaciju razradili do kraja,

potrebno je odabrati strukturu za prikaz hrpe.

• S obzirom da je hrpa potpuno binarno stablo,

možemo koristiti prikaz pomoću polja (odjelj 3.2).

• Dakle, potrebne su nam sljedeće definicije:

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

62

Page 63: Poglavlje 4: Skupovi

Imp prioritetnog reda pomoću hrpe (8)

• Funkcija PrInsert( ) tada izgleda ovako:

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

63

Page 64: Poglavlje 4: Skupovi

Imp prioritetnog reda pomoću hrpe (9)

• Funkcija PrDeleteMin( ) izgleda ovako:

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

64

Page 65: Poglavlje 4: Skupovi

Imp prioritetnog reda pomoću hrpe(10)

• PrMakeNull( ) i PrEmpty( ) su trivijalni.

• PrInsert( ) i PrDeleteMin( ) obilaze

jedan put u potpunom binarnom stablu. Zato je

njihovo vrijeme izvršavanja u najgorem slučaju

O(log n), gdje je n broj elemenata u redu.

• Ovo je bolja ocjena nego za implementaciju

pomoću binarnog stabla traženja, gdje smo imali

logaritamsko vrijeme samo u prosječnom slučaju.

• Prednost binarnog stabla traženja pred hrpom je

mogućnost efikasnog implementiranja dodatnih

operacija.SPA-4 STRUKTURE PODATAKA I

ALGORITMI

65

Page 66: Poglavlje 4: Skupovi

Sadržaj Poglavlja 4

4.1. (Općeniti) skup

4.2. Rječnik

4.3. Prioritetni red

4.4. Preslikavanje i relacija

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

66

Page 67: Poglavlje 4: Skupovi

Svojstva i primjene preslikavanja (1)

• Koji put je potrebno je pamtiti pridruživanja među

podacima koja se mogu opisati matematičkim

pojmom “funkcije” (“preslikavanja”).

• Preslikavanje M je skup uređenih parova oblika

(d, r), gdje su svi d-ovi podaci jednog tipa, a svi r-

ovi podaci drugog tipa. Pritom, za zadani d, u M

postoji najviše jedan par (d, r).

– Prvi tip nazivamo domena (domain), a drugi tip

zovemo kodomena (range).

– Ako za zadani d preslikavanje M sadrži par (d, r), tada

taj jedinstveni r označavamo s r = M(d) i kažemo da je

M(d) definirano.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

67

Page 68: Poglavlje 4: Skupovi

Svojstva i primjene preslikavanja (2)

• Primjeri preslikavanja.– Rječnik stranih riječi

• (strana riječ → prijevod).

– Telefonski imenik • (prezime i ime → telefonski broj)

– Indeks pojmova u knjizi • (pojam → redni broj stranice)

– Sadržaj knjige • (naslov poglavlja → redni broj stranice)

– Popis korisnika računala • (imena → lozinke)

– Zapisi u bazi podataka• (primarni ključ → ostali podaci)

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

68

Page 69: Poglavlje 4: Skupovi

Svojstva i primjene preslikavanja (3)

• Apstraktni tip podataka Mapping.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

69

Page 70: Poglavlje 4: Skupovi

Svojstva i primjene preslikavanja (4)

• Za implementaciju preslikavanja koriste se iste

strukture podataka kao za rječnik, dakle: polje,

lista, hash tablica, binarno stablo traženja.

– Preslikavanje M pohranjujemo kao skup uređenih

parova oblika (d,M(d)).

– Mjesto uređenog para (d,M(d)) u strukturi određuje se

kao kad bi se pohranjivao sam d.

– To omogućuje da kasnije pronađemo par (d,M(d)) na

osnovi zadanog d.

– MaMakeNull( ), MaAssign( ),

MaDeassign( ), MaCompute( ) implementiraju

se analogno kao DiMakeNull( ),

DiInsert( ), DiDelete( ), DiMember().

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

70

Page 71: Poglavlje 4: Skupovi

Primjeri implementacije preslikav (1)

• Promatramo preslikavanje M čija domena je tip int,

a kodomena tip float.

• M je zadano sljedećom

tablicom. Za brojeve d koji

se ne pojavljuju u tablici

M(d) nije definirano.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

71

• M shvaćamo kao skup

M = {(3, 2,18), (8, 1,12), . . ., (25, 6,64)}.

• Taj skup dalje shvaćamo kao rječnik i

prikazujemo ga na načine iz odjeljka 4.2.

Page 72: Poglavlje 4: Skupovi

Primjeri implementacije preslikav (2)

• Npr. koristimo prikaz pomoću zatvorene hash-tablice s B

pretinaca.– U svaki pretinac stane jedan par

(d,M(d)).

– Hash-funkcija h( ) preslikava

domenu od M na skup {0, 1, 2 ,..., B−1}.

– Par (d,M(d)) sprema se u pretinac h(d), te se traži u istom pretincu.

– Konkretno, uzimamo B = 8,

h(x) = x % 8.

– U slučaju kolizije primjenjujemo

linearno haširanje.SPA-4 STRUKTURE PODATAKA I

ALGORITMI

72

Page 73: Poglavlje 4: Skupovi

Primjeri implementacije preslikav (3)

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

73

• Dalje, M možemo

prikazati pomoću

binarnog stabla traženja.

– Čitavi parovi (d,M(d))

smještaju se u čvorove

binarnog stabla.

– No grananje u binarnom

stablu provodi se samo

na osnovi d.

– Dakle, vrijedi uređaj za

oznake čvorova: • (d1,M(d1)) ≤ (d2,M(d2)) ako i

samo ako je d1 ≤ d2.

Page 74: Poglavlje 4: Skupovi

Svojstva i primjene relacije (1)

• Često treba pamtiti pridruživanja koja su

općenitija od onih obuhvaćenih pojmom

“preslikavanje”. Tada govorimo o relaciji.

• Binarna relacija R je skup uređenih parova

oblika (d1,d2), gdje se kao d1 pojavljuju podaci

jednog tipa, a kao d2 podaci drugog tipa.

– Ova dva tipa nazivamo prva odnosno druga

domena (domains).

– Ako relacija R za zadani d1 i d2 sadrži uređeni par

(d1,d2), tada kažemo da je d1 u relaciji R s d2 i pišemo

d1 R d2.SPA-4 STRUKTURE PODATAKA I

ALGORITMI

74

Page 75: Poglavlje 4: Skupovi

Svojstva i primjene relacije (2)

• Primjeri korištenja relacija.

– Studenti upisuju izborne kolegije. Gledamo odnos

između studenata i kolegija.

• Slični primjeri: filmovi i dvorane, zračne luke i avio-kompanije.

– Veliki programski sustav sastoji se od mnogo

programa i još više potprograma. Gledamo odnos

između programa i uključenih potprograma.

• Slični primjeri: odnos između proizvoda i sastavnih dijelova, ili

odnos između koktela i sastavnih pića.

– Računalna mreža sastavljena je od paketnih sklopki

koje su povezane telekomunikacijskim vezama.

Gledamo strukturu povezanosti među sklopkama.

• Sličan primjer: gradovi povezani cestama.SPA-4 STRUKTURE PODATAKA I

ALGORITMI

75

Page 76: Poglavlje 4: Skupovi

Svojstva i primjene relacije (3)

• Apstraktni tip podataka Relation.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

76

Page 77: Poglavlje 4: Skupovi

Svojstva i primjene relacije (4)

• Apstraktni tip podataka Relation (nastavak).

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

77

Page 78: Poglavlje 4: Skupovi

Svojstva i primjene relacije (5)

• Za implementaciju relacije koriste se iste

strukture podataka kao za rječnik.

– Relaciju R pohranjujemo kao skup uređenih parova

oblika (d1, d2 ) takvih da je d1 R d2 .

– Operacije ReMakeNull( ), ReRelate( ),

ReUnrelate( ) implementiraju se analogno kao

DiMakeNull( ), DiInsert( ) odnosno

DiDelete( ).

– Da bi se mogle efikasno obavljati i operacije ReCompute1( ), ReCompute2( ), potrebne

su male modifikacije i nadopune strukture.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

78

Page 79: Poglavlje 4: Skupovi

Implem relacije pomoću bit-matrice(1)

• Nastaje na osnovi implementacije skupa

pomoću bit-vektora (vidi odjeljak 4.1). – Jednodimenzionalno polje (vektor) presložimo u

dvodimenzionalno (matricu).– Uzimamo da je domain1 = {0,1,...,N1−1}, a

domain2 = {0,1,...,N2−1}, gdje su N1 i N2

dovoljno velike int konstante.

– Relaciju prikazujemo dvodimenzionalnim poljem bitova ili char-ova sljedećeg oblika:

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

79

# define N1 …

# define N2 … /* dovoljno velike konstante */

typedef char Relation[N1][N2];

/* tip za char polje veličine N1 x N2 */

Page 80: Poglavlje 4: Skupovi

Implem relacije pomoću bit-matrice(2)

– (i, j)-ti bit je 1 (odnosno 0) ako i samo ako je i-ti

podatak u relaciji s j-tim podatkom.

– Operacije ReCompute2(R,i,&S2) odnosno

ReCompute1(R,&S1,j) svode se na čitanje

i-tog retka odnosno j-tog stupca polja.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

80

Page 81: Poglavlje 4: Skupovi

Implem relacije pomoću multiliste (1)

• Podsjeća na implementaciju skupa

pomoću vezane liste (vidi odjeljak 4.1).

– Umjesto jedne vezane liste sa svim parovima (d1, d2),

imamo mnogo malih listi koje odgovaraju rezultatima operacija ReCompute2( ), ReCompute1( ).

– Jedan uređeni par (d1, d2) prikazan je zapisom

sljedećeg tipa:

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

81

Page 82: Poglavlje 4: Skupovi

Implem relacije pomoću multi-liste (2)

– Jedan zapis je istovremeno uključen u:• vezanu listu prve vrste: povezuje sve zapise s istim d1;

• vezanu listu druge vrste: povezuje sve zapise s istim d2.

– Za povezivanje listi prve odnosno druge vrste služi pointer next1 odnosno next2.

– Liste mogu biti sortirane i nesortirane.

– Pointer na početak liste prve (odnosno druge) vrste

zadaje se preslikavanjem čija:• domena je domain1 (odnosno domain2)

• a kodomena pointeri na celltype.

– ReCompute2( )(odn ReCompute1( )) svodi se na

• primjenu preslikavanja, dakle pronalaženje pointera za zadani

d1 (odnosno d2).

• prolazak vezanom listom prve (odnosno druge) vrste.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

82

Page 83: Poglavlje 4: Skupovi

Implem relacije pomoću multi-liste (3)

• Na slici je prikazana relacija

R = {(0, 1), (0, 3), (1, 2), (1, 3), (2, 1), (2, 3), (2, 4)}.

• Dva preslikavanja prikazana su kao polja pointera.

SPA-4 STRUKTURE PODATAKA I

ALGORITMI

83