poglavlje 4: skupovi
TRANSCRIPT
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
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
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
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
Svojstva i primjene skupa (3)
• Apstraktni tip podataka Set
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
5
Svojstva i primjene skupa (4)
• Apstraktni tip podataka Set (nastavak).
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
6
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
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
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
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
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
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
Impl skupa pomoću vezane liste (3)
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
13
• Vrijeme
izvršavanja
proporcionalno
je duljini lista.
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:
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
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
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
Svojstva i primjene rječnika (2)
• Apstraktni tip podataka Dictionary.
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
18
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
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
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
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
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
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
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
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
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)
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
Imp rječnika pomoću hash-tablice (5)
• Definicije u C-u za otvoreno haširanje.
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
29
Imp rječnika pomoću hash-tablice (6)
• Definicije u C-u za otvoreno haširanje (nastavak).
STRUKTURE PODATAKA I
ALGORITMI
30
Imp rječnika pomoću hash-tablice (7)
• Definicije u C-u za otvoreno haširanje (drugi nast).
STRUKTURE PODATAKA I
ALGORITMI
31
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
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.
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
Imp rječnika pomoću hash-tablice (11)
• Definicije u C-u za zatvoreno haširanje:
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
35
Imp rječnika pomoću hash-tablice (12)
• Definicije u C-u za zatvoreno haširanje (nastavak):
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
36
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
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
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.
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
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
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
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
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
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
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
Impl rječnika pomoću bin stabla (10)
• Evo i operacije DiDelete( ).
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
47
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.
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
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
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
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
Svojstva i primjene prior reda (3)
• Apstraktni tip podataka PriorityQueue.
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
53
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
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
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
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.
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
Imp prioritetnog reda pomoću hrpe (4)
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
59
• Učinak PrDeleteMin()
na hrpu s
prethodne slike.
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
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
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
Imp prioritetnog reda pomoću hrpe (8)
• Funkcija PrInsert( ) tada izgleda ovako:
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
63
Imp prioritetnog reda pomoću hrpe (9)
• Funkcija PrDeleteMin( ) izgleda ovako:
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
64
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
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
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
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
Svojstva i primjene preslikavanja (3)
• Apstraktni tip podataka Mapping.
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
69
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
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.
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
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.
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
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
Svojstva i primjene relacije (3)
• Apstraktni tip podataka Relation.
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
76
Svojstva i primjene relacije (4)
• Apstraktni tip podataka Relation (nastavak).
SPA-4 STRUKTURE PODATAKA I
ALGORITMI
77
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
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 */
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
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
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
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