Professional Documents
Culture Documents
ASP9
ASP9
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)
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)
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
# 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