Upload
danilo-prisunjak
View
43
Download
6
Embed Size (px)
Citation preview
Algoritmi i strukture podataka
Opis kursa• ALGORITMI
– naredba– blok naredbi– razgranate strukture– ciklične strukture
• STRUKTURE PODATAKA– promenljive (statičke i dinamičke)– nizovi– liste– stek– redovi
• SORTIRANJA
UvodUvod
Algorithms + Data Structures = Programs
Dva osnovna gradivna bloka za implementaciju programskih sistema
Struktura podataka – opis načina organizacije podataka
Algoritam – opis načina obrade podataka
O algoritmimaO algoritmima Osobine
jedan ili više ulaza i izlaza nedvosmislenost i ostvarljivost naredbi konačno vreme izvršavanja
Determinističko ponašanje (ali i pseudoalgoritmi)
Mera efikasnosti – vremenska i prostorna složenost
Najčešće u pseudojeziku
Implementacija algoritama (jezik, mašina)Uvod
O strukturama podatakaO strukturama podataka
Modelira objekte i podatke iz problema
Elementarni, primitivni tipovi
Složeni, struktuirani tipovi logička struktura fizička struktura
Osnovni načini struktuiranja homogeni - nizovi nehomogeni - zapisi
Uvod
Uvod O strukturama podataka
Alg
ori
tmi i st
rukt
ure
podata
ka
ZapisZapis
Agregacija elemenata različitog tipa (polja)
Tretira se kao logička celina
Koristi se u implementaciji dinamičkih struktura datoteka
Operacije obično nad poljima
Uvod O strukturama podataka
Alg
ori
tmi i st
rukt
ure
podata
ka
ZapisZapis
Smeštanje u memorijia) kontinualna alokacija poljab) vezivanje polja za početak
reči
marka
snaga
snagagodina
godinamarka
a1
a1
a)
b)
100 110 114
112 116100
Podele strukturaPodele strukturaA
lgori
tmi i st
rukt
ure
podata
ka
Po relacijama elemenata linearne nelinearne
Po mogućnosti promene veličine statičke dinamičke
Po mestu čuvanja unutrašnje (u operativnoj
memoriji) spoljašnje (datoteke)
Uvod O strukturama podataka
Uvod O strukturama podataka
Memorijska reprezentacijaMemorijska reprezentacija
Sekvencijalna
Fizički i logički poredak isti
Pristup elementima direktan
Obično za linearne strukture
a)
b)
Uvod O strukturama podataka
Memorijska reprezentacijaMemorijska reprezentacija
Ulančana
Fizički i logički poredak različiti
Pristup elementima indirektan
Koristi pokazivački mehanizam
Obično za nelinearne strukture
Programska naredbaProgramska naredba
• Osnovna jedinica obrade je naredba• Jednostaven (proste) naredbe se sastoje
od izraza i eventualno znaka ; (C, Java)• Složene naredbe određuju redosled
izvršavanja naredbi• U složenim programskim jezicima
upravljačke strukture:• sekvence• selekcije• petlje• skokovi
Blok naredbi
•Početak se označava sa {, a kraj sa }•Sekvenca je upravljačka struktura sa nizom
sukcesivnih naredbi
{
naredba1;
naredba2;
....
}
Razgranate strukture
• IF i IF-ELSE struktura• izbor jedne od dve naredbe if (izraz) naredba1 [else naredba2]• izraz ≠ 0 naredba1• izraz = 0 naredba2
bez else – uslovni preskoknačini pisanja
Primeri if – else
if (a>b) {t=a; a=b; b=t;}
if (mesec == 12){ mesec=1; ++godina;}else ++mesec;
if – else
• naredbe u if-u mogu biti i složene upravljačke naredbe
• odsustvo završne reči – problem kod ugneždenih if sa jednim else
• else tada pripada najbližem ranije neuparenom if-u
if – else
if (izraz1) if (izraz2) naredba1; else naredba2;
if (izraz1) { if (izraz2) naredba1; } else naredba2;
if – else if … – else
if (izraz1) naredba1;else if (izraz2) naredba2;else if (…) …else if (izrazN) naredbaN;else naredba0;
Generalisana selekcijaif – else if … – else
izbor jedne od više naredbi
• prvi izraz ≠0 određuje naredbu koja se izvršava
• ako su svi izrazi =0izvršava se naredba u else-u
if – else if … – else
poredak pisanja je važan!
• izvršava se samo jedna naredba ako je zadovoljno više uslova
• kao i zbog eventualnih bočnih efekata
ugneždavanje osnovnih selekcija
if – else if … – else
if (bodovi>90)
ocena=10;
else if (bodovi>80)
ocena=9;
…
else if (bodovi>50)
ocena=6;
else
ocena=5;
Selekcija sa skretnicom switch
• niz naredbi u {} (sastoji se iz podnizova naredbi za pojedine opcije bez {})
• selektorski celobrojni izraz u ()određuje ulaz odakle počinje izvršavanje
switch
switch (izraz)
{
case v1: niz_naredbi_1;
case v2: niz_naredbi_2;
…
default: niz_naredbi_0;
…
case vN: niz_naredbi_N;
}
switch
• može isti ulaz za više vrednosti
• default (kad vrednost izraza nije nijedna od zadatih)
• default samo jedan, a može i da izostane
switch
• poredak je vrlo važan (za razliku od Pascal-a)
• ako se na kraju svakog podniza ubaci break –ekvivalentno sa Pascal case
switch
switch (i+j*k){
case 1: printf (“Unesite i, j: ”);
scanf (“%d%d”, i, j);
case 2: case 3: case 4:
k=i++*j; break;
case ‘A’: case ‘O’:
j=k/--i; break;
default:
printf (“Neispravni podaci!\n”);
}
Ciklusi
• kontrolisano ponavljanje proste ili složene naredbe u zavisnosti od uslova
• postoji i način eksplicitnog završavanja ciklusa
Ciklusi
kontrolisano ponavljanje proste ili složene naredbe zavisno od uslova
• while - osnovni ciklus sa izlaskom na vrhu
• for - generalisani ciklus sa izlaskom na vrhu
• do - ciklus sa izlaskom na dnu
while
osnovni ciklus sa izlaskom na vrhu
while (uslov) naredba
uslov ostanka (pre naredbe):• ako je ≠0 izvršava se naredba• ako je =0 napušta se petlja
0, 1 ili više iteracija
while
• Primer:
s=0; i=0;
while (i<n) {
s+=a[i]*b[i];
i++;
}
do – while
ciklus sa izlaskom na dnu
do naredba while (uslov) ;
uslov ostanka (nakon naredbe): • ako je ≠0, opet se izvršava naredba• ako je =0, napušta se petlja
1 ili više iteracija
do – while
• Primer:
s=0; i=0;
do {
s+=a[i]*b[i];
i++;
} while (i<n);
• radi pogrešno za n <= 0
for
generalisani ciklus sa izlaskom na vrhu
for (izraz1; izraz2; izraz3) naredba• izraz1
početne radnje (samo jednom)• izraz2
≠0 uslov nastavljanja ciklusa• izraz3
završne radnje (posle iteracije)
for
for (izraz1; izraz2; izraz3) {…}
izraz1;
while (izraz2) {
…
izraz3;
}
for
• centralizovan kontrolni mehanizam dobra preglednost (pogotovo važno u ugneždenim petljama)
• sva tri izraza opciono (ali ; moraju ostati)
• ako nema izraz2 uslov ispunjen
for
• for ( ; ; ) ;beskonačna petlja
• for ( ; ; ) {…}može se izaći forsirano iz bloka
• moguća greška: ; iza zagrade prazno telo
for
• pogodan za brojačke cikluse, mada je opštiji
for (i=pocetak; i<kraj; i += korak) {}
(korak>0)
for (i=pocetak; i>kraj; i += korak) {}
(korak<0)
for
• univerzalno rešenje
for (i=poc; k>0?i<kraj:i>kraj; i+=k){
…
}
• kao brojač može se koristiti i znakovna promenljiva
for
• skalarni proizvod:
for (s=0, i=0; i<n; i++) s+=a[i]*b[i];
for (s=0, i=0; i<n; s+=a[i]*b[i], i++);
• ne treba da izrazi1,2,3 sadrže radnje koje se ne odnose na održavanje ciklusa
for
razlike u odnosu na Pascal for:
• opštija (promenljivi korak, može i proizvoljan uslov)
• parametri petlje mogu biti promenjeni u samoj petlji
• kontrolna promenljiva zadržava vrednost po izlasku
Skokovi
upravljačke naredbe:
prenose tok izvršavanja naimplicitno ili eksplicitno odredište
• narušavaju struktuiranost, koristiti samo kad treba
Linearne strukture podatakaLinearne strukture podatakaA
lgori
tmi i st
rukt
ure
podata
ka
Linearna lista (a1, a2, ..., an), n ≥ 0
Apstraktni tip nezavisno od implementacije
Strukturno svojstvo – jednodimenzionalnost
Operacije obilazak po poretku 1..n pretraživanje pristup elementu umetanje brisanje, ...
Linearne strukture podatakaLinearne strukture podatakaA
lgori
tmi i st
rukt
ure
podata
ka
Implementacija sekvencijalna – niz ulančana – ulančana
lista
Disciplina pristupa LIFO - stek FIFO - red
Linearne strukture podataka
Alg
ori
tmi i st
rukt
ure
podata
ka
NizoviNizovi Niz - homogeni struktuirani tip
Indeks – pozicija elementa u nizu
X[l:u] = X[i], i = l, l + 1, … , u - 1, u
Direktan pristup elementu bez ograničenja
Višedimenzionalni nizovi (nizovi nizova)
Selekcija elementa
Operacije
Linearne strukture podataka Nizovi
Alg
ori
tmi i st
rukt
ure
podata
ka
SmeSmeštanje vektoraštanje vektora Sekvencijalna reprezentacija,
ne razdvaja se logički koncept od implementacije
Ai = Al + (i - l)s (jedan element zauzima s reči)
Efikasan, direktan pristup,neefikasno umetanje i brisanjeX [l] X [i] X [u]
A l A i
s
X
Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi
Alg
ori
tmi i st
rukt
ure
podata
ka
SmeSmeštanje vektoraštanje vektora Kontinualno
prostorno efikasno
neefikasan pristup
Sa dopunjavanjem (padding) iskorišćenje prostora Su = s /
s efikasniji pristup
X [l]
X [l+1] X [l+2]
X [l]
X[l+1] X [l+2]
Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi
Alg
ori
tmi i st
rukt
ure
podata
ka
SmeSmeštanje vektoraštanje vektora
Pakovanje k = 1/s elemenata u jednoj reči prostorno iskorišćenje Su = ks /
ks Ai = Al + (i - l)/k
pozicija u reči (i - l) mod k
X [l]
X [l+6] X [l+5]
Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi
Alg
ori
tmi i st
rukt
ure
podata
ka
Smeštanje matricaSmeštanje matrica
Cilj - efikasna adresna funkcija
Linearizacija po vrstama (row-major) po kolonama (column-
major)
X
1
i, ji,1 i,N
M , jM ,1 M ,N
i
M
1 j N
1, j1,1 1,N
Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi
Alg
ori
tmi i st
rukt
ure
podata
ka
Smeštanje po vrstamaSmeštanje po vrstama X[l1:u1, l2:u2]
Ai,j = Al1,l2 + ((i - l1)(u2 - l2 + 1) + j - l2)s
X[1:M,1:N]
Ai,j = A1,1 + ((i - 1)N + j - 1)s
ne zavisi od broja vrsta
1, j1,1 1,N M ,jM ,1 M ,N......
vrsta 1 vrsta i vrsta M
i,ji,1 i,N
Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi Predstavljanje nizova u memoriji
Alg
ori
tmi i st
rukt
ure
podata
ka
Smeštanje po kolonamaSmeštanje po kolonama X[l1:u1, l2:u2]
Ai,j = Al1,l2 + ((j – l2)(u1 – l1 + 1) + i – l1)s
X[1:M,1:N]
Ai,j = A1,1 + ((j - 1)M + i - 1)s
ne zavisi od broja kolona
i,11,1 M ,1 i,j1,j M ,j i,N1,N M ,N......
kolona 1 kolona j kolona N
Linearne strukture podataka Nizovi Predstavljanje nizova u memoriji
Alg
ori
tmi i st
rukt
ure
podata
ka
Višedimenzionalni nizoviVišedimenzionalni nizovi
X[1:u1, 1:u2, ..., 1:un]
Generalizovano smeštanje po vrstama
X[1, ..., 1, 1] X[1, ..., 1, 2] X[1, ..., 1, un]
X[1, ..., 2, 1] X[1, ..., 2, 2] X[1, ..., 2, un]
...
X[u1, ..., un-1, 1] X[u1, ..., un-1, 2] X[u1, ..., un-1, un]
Leksikogafski poredak
Linearne strukture podataka Nizovi Predstavljanje nizova u memoriji
Alg
ori
tmi i st
rukt
ure
podata
ka
Višedimenzionalni nizoviVišedimenzionalni nizovi
Ai1,.., in = A1,..,1 + ((i1 - 1)u2u3...un + (i2 - 1) u3u4...un +…
+ (in-1 - 1)un + in - 1)s
Efikasno izračunavanjeoffset = 0
for j = 1 to n do
offset = U [j ] offset + I [j ] - 1
end_for
A = A1,..,1 + s * offset Implikacije načina smeštanja
a)0
xx
xX
b)X
xx
x0
c)0
00
0X
d)X
00
00
Linearne strukture podataka Nizovi
Alg
ori
tmi i st
rukt
ure
podata
ka
Optimizacije pri smeštanjuOptimizacije pri smeštanju Cilj – ušteda prostora, ali ipak efikasan
pristup
Primer - trougaone matrice
Linearne strukture podataka Nizovi Optimizacije pri smestanju nizova
Alg
ori
tmi i st
rukt
ure
podata
ka
Trougaona matricaTrougaona matrica
Npr. donja trougaona matricaX[i,j] = 0 , i < j
Primena smeštanja po vrstama
X[1,1] X[2,1] X[2,2] X[3,1] X[3,2] X[3,3] ...
Ušteda u prostoru oko 50%
Ai,j = A1,1 + (i(i - 1)/2 + j - 1)s ako je i j
1 n+12
X
Y
n1
X
Y
1
n n
12
a) b)
Linearne strukture podataka Nizovi Optimizacije pri smestanju nizova
Alg
ori
tmi i st
rukt
ure
podata
ka
Trougaone matriceTrougaone matrice
X[i,j] = Z[i,j +1] ako je i j X[i,j] = 0 za i > j
Y[i,j] = Z[i,j] ako je i j Y[i,j] = 0 za i < j
0
0
0
0
9
0
0
0
0
0
0
4
0
0
0
0
0
5
0
8
0
0
0
0
0
0
0
11
0
0
15
0
0
0
0
X =
4
5
11
9
8
15
V
3
4
6
1
4
7
C
1
2
2
4
4
5
R
Linearne strukture podataka Nizovi Optimizacije pri smestanju nizova
Alg
ori
tmi i st
rukt
ure
podata
ka
Retki nizoviRetki nizovi Relativno veliki broj nultih elemenata
Pamte se samo nenulti elementi – ušteda prostora
Vektorska reprezentacija
Neefikasne operacije!