You are on page 1of 27

REDOVI PRIORITETA

 Predstavlja skup čijim elementima su pridružene specijalne


vrednosti u obliku celih ili realnih brojeva - prioriteti.
 Operacije koje se izvršavaju su:
 ubacivanje novog elementa,
 pronalaženje i izbacivanje elementa s najmanjim (ili
najvećim) prioritetom.
Primer

 Pacijenti ulaze u čekaonicu, iz koje odlaze lekaru na pregled. Prvi


na redu za lekara nije onaj koji je prvi ušao, već onaj čije je stanje
najteže ili onaj koji ima prednost (prioritet), na primer trudnice.
 U računaru se formira red prioriteta programa (procesa) koji
čekaju na izvršavanje. Svakom programu je pridružen prioritet.
Procesor uzima iz reda program s najvećim prioritetom (najveća
ili najmanja pridružena vrednost), te ga izvršava.
Apstraktni tip podataka
PRIORITY_QUEUE
 Problem svodimo na jednostavniji problem ubacivanja elemenata
u skup, te izbacivanja najmanjeg elementa.
 Umesto originalnih elemenata x, posmatramo uređene parove
(prioritet(x), x).
 Za uređene parove definišemo redosled: (prioritet(x1), x1) je
manji-ili-jednak od (prioritet(x2), x2) ako je ( prioritet(x1) manji od
prioritet(x2) ) ili ( prioritet(x1) jednak prioritet(x2) i x1 manji-ili-
jednak od x2).
 Ovo omogućava jednostavnu definiciju apstraktnog tipa.
Apstraktni tip podataka
PRIORITY_QUEUE
elementtype - bilo koji tip s uređenjem <=.
PRIORITY_QUEUE - podatak ovog tipa je konačni skup čiji elementi su
(međusobno različiti) podaci tipa elementtype.
MAKE_NULL(&A)- funkcija pretvara skup A u prazan skup.
EMPTY(A)- funkcija vraća “istinu” ako je A prazan skup, inače vraća
“laž”.
INSERT(x,&A)- funkcija ubacuje element x u skup A, tj. menja A u
A ∪ {x}.
DELETE_MIN(&A)- funkcija iz skupa A izbacuje najmanji element. Nije
definisana ako je A prazan skup.
Implementacija prioritetnog reda pomoću
sortirane vezane liste

 Prikazujemo prioritetni red kao listu.


 Najbolja je sortirana vezana lista.
 DELETE_MIN( )pronalazi i izbacuje prvi element u listi, pa se brzo
izvršava.
 INSERT( ) mora ubaciti novi element na “pravo mesto”, što znači da
mora pročitati u proseku pola liste. Zato INSERT( )ima vreme
izvršavanja srazmerno broju elemenata u redu.
Implementacija prioritetnog reda pomoću
binarnog stabla pretrage

 U potpunosti isto kao za rečnik.


 Mogu se upotrebiti isti potprogrami INSERT( ), DELETE_MIN( ),
MAKE_NULL( ).
 Funkcija EMPTY( )je trivijalna.
Implementacija prioritetnog reda pomoću
hipa (heap)

 Potpuno binarno stablo T je hip (heap), ako su ispunjeni sledeći


uslovi:
 čvorovi od T su označeni podacima nekog tipa nad kojim je
definisano totalno uređenje.
 Neka je i bilo koji čvor od T . Tada je oznaka od i manja ili jednaka
od oznake bilo kojeg deteta od i.
Implementacija prioritetnog reda pomoću
hipa (heap)

 Ideja implementacije je sledeća:


 Prioritetni red prikazujemo hipom.
 Svakom elementu reda odgovara tačno jedan čvor hipa i obratno.
 Element reda služi kao oznaka odgovarajućeg čvora hipa -
kažemo da je element “smešten” u tom čvoru.
 Svi čvorovi hipa će imati različite oznake, iako se to ne zahteva u
definiciji hipa.
Implementacija prioritetnog reda pomoću
hipa (heap)

 Prikaz prioritetnog reda: A = {3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17}
pomoću hipa. Prikaz nije jedinstven. Iz svojstava hipa sledi da je
najmanji element u korenu.

5 9

6 8 12 15

17 13 10 11 14
Implementacija prioritetnog reda pomoću
hipa (heap)
 Operacija DELETE_MIN( ) vraća element iz korena.
 Koren ne možemo samo tako izbaciti (stablo bi se raspalo).
 Izbacujemo zadnji čvor na zadnjem nivou, a njegov element stavimo
u koren.
 Time se sigurno pokvarilo svojstvo hipa.
 Popravljanje se obavlja ovako: zamenimo element u korenu i manji
element u korenovom detetu, zatim zamenimo element u detetu i
manji element u detetovom detetu, . . . , itd, dok je potrebno.
 Niz zamena ide najdalje do nekog lista.
Implementacija prioritetnog reda pomoću
hipa (heap)

 Učinak funkcije DELETE_MIN( ) na prethodni hip:

14 5

5 9 6 9

6 8 12 15 13 8 12 15

17 13 10 11 17 14 10 11
Implementacija prioritetnog reda pomoću
hipa (heap)
 Operacija INSERT( ) stvara novi čvor na prvom slobodnom mestu
zadnjeg nivoa i u njega smešta novi element.
 Time se sigurno pokvarilo svojstvo hipa.
 Popravljanje se obavlja ovako: zamenimo element u novom čvoru I
element u roditelju novog čvora, zatim zamenimo element u roditelju I
element u roditeljevom roditelju, . . . , itd, dok je potrebno.
 Niz zamena ide najdalje do korena.
Implementacija prioritetnog reda pomoću
hipa (heap)

 Rezultat ubacivanja elementa 4 u prethodni hip:

3 3

5 9 5 4

6 8 12 15 6 8 9 15

17 13 10 11 14 4 17 13 10 11 14 12
PRESLIKAVANJE
 Predstavlja pridruživanje među podacima koje treba pamtiti.
 Matematički pojam “funkcije” ili “preslikavanja”.
 Definicija:
Preslikavanje M je skup uređenih parova oblika (d, r), gde su
svi d-ovi podaci jednog tipa, a svi r-ovi podaci drugog tipa.
Pritom, za zadati d, u M postoji najviše jedan par (d, r). Prvi tip
nazivamo domen ili oblast definisanosti (domain), a drugi tip
zovemo kodomen ili oblast vrednosti (range). Ako za zadati d
preslikavanje M sadrži par (d, r), tada taj jedinstveni r
označavamo kao r = M(d) i kažemo da je M(d) definisano. Ako
za zadati d preslikavanje M ne sadrži par (d, r), kažemo da M(d)
nije definisano.
Primeri

 Telefonski imenik je preslikavanje čiji domen čine imena ljudi, a


kodomen telefonski brojevi. Imena se mogu ubacivati i izbacivati,
a brojevi se mogu menjati. Slični primeri: rečnik stranih reči,
indeks pojmova, sadržaj knjige.
 Svaki saradnik neke firme opisan je zapisom u kojem se nalaze
podaci poput imena i prezimena, datuma rođenja, zanimanja i sl.
Zapisi (saradnici) se razlikuju na osnovu matičnog broja
saradnika. Reč je o preslikavanju čiji domen čine matični brojevi,
a kodomen ostali podaci o saradniku.
 Matematički pojam “vektor dužine n” može se interpretirati kao
preslikavanje čiji domen je skup {1, 2, . . .,n}, a kodomen (na pr.)
skup realnih brojeva. Slični primeri: matrica, polje.
Apstraktni tip podataka MAPPING

domain - bilo koji tip (domen).


range - bilo koji tip (kodomen).
MAPPING - podatak tipa MAPPING je preslikavanje čiji domen čine
podaci tipa domain, a kodomen podaci tipa range.
MAKE_NULL(&M)- funkcija pretvara preslikavanje M u nul-
preslikavanje, tj. takvo koje nije nigde definisano.
ASSIGN(&M,d,r)- funkcija definiše M(d) tako da bude M(d)
jednako r, bez obzira da li je M(d) pre bilo definisano ili nije.
DEASSIGN(&M,d)- funkcija uzrokuje da M(d) postane nedefinisano,
bez obzira da li je M(d) bilo pre definisano ili nije.
COMPUTE(M,d,&r)- ako je M(d)definisano, tada funkcija vraća
“istinu” i pridružuje varijabli r vrednost M(d), inače funkcija
vraća “laž”.
Implementacija preslikavanja

 Za implementaciju preslikavanja koriste se iste strukture podataka kao


za rečnik, dakle: polje, lista, heš tabela, binarno stablo pretrage.
 U skladu s definicijom, preslikavanje M smeštamo kao skup uređenih
parova oblika (d,M(d)), gde d prolazi svim podacima za koje je M(d)
definisano.
 Mesto uređenog para (d,M(d)) u strukturi se određuje samo na osnovu
d, tj. onako kao kad bi se smeštao sam d. To omogućuje da kasnije
pronađemo par (d,M(d)) na osnovu zadatog d.
 Operacije MAKE_NULL( ), ASSIGN( ), DEASSIGN( ), COMPUTE( )
iz ATP MAPPING implementiraju se analogno kao MAKE_NULL( ),
INSERT( ), DELETE( ), MEMBER( ) iz ATP DICTIONARY.
RELACIJA

 Predstavlja pridruživanje među podacima koje je opštije od


preslikavanja.
 Definicija:
Binarna relacija R je skup uređenih parova oblika (d1, d2), gde
se kao d1 pojavljuju podaci jednog tipa, a kao d2 podaci drugog
tipa. Ova dva tipa nazivamo prvi odnosno drugi domen
(domains). Ako relacija R za zadate d1 i d2 sadrži uređeni par
(d1, d2), tada kažemo da je d1 u relaciji R sa d2 i pišemo d1 R d2.
U protivnom, kažemo da d1 nije u relaciji R sa d2 i pišemo
d1 R d2.
Primeri

 Studenti upisuju izborne predmete. Time se uspostavlja relacija


čiji domeni su skup studenata i skup predmeta. Možemo se pitati
koje sve predmete je upisao zadati student, kao i koji sve studenti
su upisali zadati predmet. Slični primeri: ljudi i časopisi, filmovi i
bioskopi, odredišta i avionske kompanije.
 Proizvodi se sastavljaju od delova (vijaka, ploča, ležajeva, ...).
Pitamo se koji su sve delovi potrebni za zadati proizvod, kao i u
kojim se sve proizvodima pojavljuje zadati deo. Slični primeri:
programi sastavljeni od potprograma, kokteli sastavljeni od pića.
Apstraktni tip podataka RELATION

domain1 - bilo koji tip (prvi domen).


domain2 - bilo koji tip (drugi domen).
set1 – podatak tipa set1 je konačan skup podataka tipa domain1.
set2 – podatak tipa set2 je konačan skup podataka tipa domain2.
RELATION - podatak tipa RELATION je binarna relacija čiji prvi
domen čine podaci tipa domain1, a drugi domen podaci tipa
domain2.
MAKE_NULL(&R)- funkcija pretvara relaciju R u nul-relaciju, tj. takvo
kojoj ni jedan podatak nije ni sa jednim u relaciji.
RELATE(&R,d1,d2)- funkcija postavlja da bude d1 R d2, bez
obzira da li je to već bilo ili nije.
UNRELATE(&M,d1,d2)- funkcija postavlja da bude d1 R d2, bez
obzira da li je to već bilo ili nije.
Apstraktni tip podataka RELATION

COMPUTE2(R,d1,&S2)- za zadati d1 funkcija skupu S2 pridružuje


kao vrednost {d2 | d1 R d2}.
COMPUTE1(R,&S1,d2)- za zadati d2 funkcija skupu S1 pridružuje
kao vrednost {d1 | d1 R d2}.
Implementacija relacije

 Za implementaciju relacije koriste se iste strukture podataka kao za


rečnik, dakle: polje, lista, heš tablica, binarno stablo pretrage.
 U skladu s definicijom, preslikavanje R smeštamo kao skup
uređenih parova oblika (d1,d2), takvih da je d1 R d2.
 Operacije MAKE_NULL( ), RELATE( ), UNRELATE( ), iz ATP
RELATION implementiraju se analogno kao MAKE_NULL( ),
INSERT( ), DELETE( ) iz ATP DICTIONARY.
 Da bi se operacije COMPUTE1( ) i COMPUTE2( ) mogle efikasno
obavljati, potrebne su male modifikacije strukture.
Implementacija relacije pomoću
bit-matrice
 Nastaje na osnovu implementacije skupa pomoću bit-vektora.
 Jednodimenzionalno polje (vektor) presložimo u dvodimenzionalno
(matricu). Uzimamo da je domain1 = {0, 1, . . ., N1−1},
a domain2 = {0, 1, . . ., N2−1}, gde su N1 i N2 dovoljno
velike int konstante.
 Relaciju prikazujemo dvodimenzionalnim poljem bitova ili char-
ova sledećeg oblika:

# define N1
# define N2 /* dovoljno velike konstante */
typedef char[N2] *RELATION; /* pocetna adresa char polja
velicine N1 x N2 */
Implementacija relacije pomoću
bit-matrice
 (i, j)-ti bit je 1 (odnosno 0) ako i samo ako je i-ti podatak u
relaciji sa j-tim podatkom.
 Operacije COMPUTE2(R,i,&S2) odnosno COMPUTE1(R,&S1,j)
svode se na čitanje i-tog reda, odnosno j-te kolone matrice.

...
R
...
Implementacija relacije pomoću liste
 Nastaje na osnovu implementacije skupa pomoću vezane liste.
 Umesto jedne vezane liste sa svim uređenim parovima (d1, d2),
imamo mnogo malih listi koje odgovaraju rezultatima operacija
COMPUTE2( ), COMPUTE1( ).
 Jedan uređeni par (d1, d2) prikazan je zapisom tipa:
typedef struct cell_tag {
domain1 element1;
domain2 element2;
struct cell_tag *next1;
struct cell_tag *next2;
} celltype;
 Jedan zapis je istovremeno uključen u:
 vezanu listu prve vrste: povezuje sve zapise sa istim d1;
 vezanu listu druge vrste: povezuje sve zapise sa istim d2.
Implementacija relacije pomoću liste
 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 čiji domen je domain1 (odnosno domain2), a
kodomen pointeri na celltype.
 Operacija COMPUTE2( ) (odnosno COMPUTE1( )) svodi se na
primenu preslikavanja, tj. pronalaženje pointera za zadati d1
(odnosno d2) i na prolazak odgovarajućom vezanom listom prve
(odnosno druge) vrste.
Implementacija relacije pomoću liste
 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.

počeci za
liste druge vrste

počeci za
liste prve
vrste
0 1 0 3

1 2 1 3

2 1 2 3 2 4

You might also like