Vous êtes sur la page 1sur 55

Algoritmi i strukture podataka

Opis kursa
ALGORITMI
naredba
blok naredbi
razgranate strukture
cikline strukture
STRUKTURE PODATAKA
promenljive (statike i dinamike)
nizovi
liste
stek
redovi
SORTIRANJA


Uvod
Algorithms + Data Structures = Programs
Dva osnovna gradivna bloka
za implementaciju programskih sistema
Struktura podataka opis naina organizacije
podataka
Algoritam opis naina obrade podataka
O algoritmima
Osobine
jedan ili vie ulaza i izlaza
nedvosmislenost i ostvarljivost naredbi
konano vreme izvravanja
Deterministiko ponaanje (ali i pseudoalgoritmi)
Mera efikasnosti vremenska i
prostorna sloenost
Najee u pseudojeziku
Implementacija algoritama (jezik, maina)
Uvod
O strukturama podataka
Modelira objekte i podatke iz problema
Elementarni, primitivni tipovi
Sloeni, struktuirani tipovi
logika struktura
fizika struktura
Osnovni naini struktuiranja
homogeni - nizovi
nehomogeni - zapisi
Uvod
Uvod O strukturama podataka
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Zapis
Agregacija elemenata razliitog tipa (polja)
Tretira se kao logika celina
Koristi se u implementaciji
dinamikih struktura
datoteka
Operacije obino nad poljima
Uvod O strukturama podataka
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Zapis
Smetanje u memoriji
a) kontinualna alokacija polja
b) vezivanje polja za poetak rei
14444444444244444444443
1 4 2 4 3
marka
snaga
snaga godina
godina marka
1 4 2 4 31 4 2 4 3 1 4 4 4 4 4 2 4 4 4 4 4 3
1 4 2 4 3 1 4 4 4 4 4 2 4 4 4 4 4 3
1444444444424444444444443
a1
a1
a)
b)
100 110 114
112 116 100
Podele struktura
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Po relacijama elemenata
linearne
nelinearne
Po mogunosti promene veliine
statike
dinamike
Po mestu uvanja
unutranje (u operativnoj memoriji)
spoljanje (datoteke)
Uvod O strukturama podataka
Uvod O strukturama podataka
Memorijska reprezentacija
Sekvencijalna
Fiziki i logiki poredak isti
Pristup elementima direktan
Obino za linearne strukture
a)
b)
Uvod O strukturama podataka
Memorijska reprezentacija
Ulanana
Fiziki i logiki poredak razliiti
Pristup elementima indirektan
Koristi pokazivaki mehanizam
Obino za nelinearne strukture
Programska naredba
Osnovna jedinica obrade je naredba
Jednostaven (proste) naredbe se sastoje od
izraza i eventualno znaka ; (C, Java)
Sloene naredbe odreuju redosled
izvravanja naredbi
U sloenim programskim jezicima upravljake
strukture:
sekvence
selekcije
petlje
skokovi
Blok naredbi
Poetak se oznaava sa {, a kraj sa }
Sekvenca je upravljaka 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 preskok
naini 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
sloene upravljake naredbe

odsustvo zavrne rei problem kod
ugnedenih if sa jednim else

else tada pripada
najbliem 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 selekcija
if else if else
izbor jedne od vie naredbi

prvi izraz 0 odreuje
naredbu koja se izvrava

ako su svi izrazi =0
izvrava se naredba u else-u
if else if else
poredak pisanja je vaan!

izvrava se samo jedna naredba
ako je zadovoljno vie uslova
kao i zbog eventualnih
bonih efekata

ugnedavanje 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 ()
odreuje ulaz
odakle poinje izvravanje
switch
switch (izraz)
{
case v1: niz_naredbi_1;
case v2: niz_naredbi_2;

default: niz_naredbi_0;

case vN: niz_naredbi_N;
}
switch
moe isti ulaz za vie vrednosti

default (kad vrednost izraza
nije nijedna od zadatih)

default samo jedan,
a moe i da izostane

switch

poredak je vrlo vaan
(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 sloene
naredbe
u zavisnosti od uslova

postoji i nain eksplicitnog zavravanja
ciklusa
Ciklusi
kontrolisano ponavljanje proste
ili sloene 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 izvrava se naredba
ako je =0 naputa se petlja

0, 1 ili vie 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 izvrava naredba
ako je =0, naputa se petlja

1 ili vie iteracija
do while
Primer:

s=0; i=0;
do {
s+=a[i]*b[i];
i++;
} while (i<n);

radi pogreno za n <= 0
for
generalisani ciklus sa izlaskom na vrhu

for (izraz1; izraz2; izraz3) naredba
izraz1
poetne radnje (samo jednom)
izraz2
0 uslov nastavljanja ciklusa
izraz3
zavrne radnje (posle iteracije)
for
for (izraz1; izraz2; izraz3) {}



izraz1;
while (izraz2) {

izraz3;
}
for

centralizovan kontrolni mehanizam
dobra preglednost (pogotovo vano u
ugnedenim petljama)

sva tri izraza opciono
(ali ; moraju ostati)

ako nema izraz2 uslov ispunjen

for
for ( ; ; ) ;
beskonana petlja

for ( ; ; ) {}
moe se izai forsirano iz bloka

mogua greka:
; iza zagrade prazno telo
for
pogodan za brojake cikluse,
mada je optiji

for (i=pocetak; i<kraj; i += korak) {}
(korak>0)

for (i=pocetak; i>kraj; i += korak) {}
(korak<0)
for
univerzalno reenje

for (i=poc; k>0?i<kraj:i>kraj; i+=k){

}

kao broja moe 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 sadre radnje koje se ne
odnose na odravanje ciklusa

for
razlike u odnosu na Pascal for:
optija (promenljivi korak,
moe i proizvoljan uslov)
parametri petlje mogu biti promenjeni u
samoj petlji
kontrolna promenljiva zadrava vrednost
po izlasku
Skokovi
upravljake naredbe:
prenose tok izvravanja na
implicitno ili eksplicitno odredite
naruavaju struktuiranost,
koristiti samo kad treba

Linearne strukture podataka
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Linearna lista (a
1
, a
2
, ..., a
n
), n 0
Apstraktni tip nezavisno od implementacije
Strukturno svojstvo jednodimenzionalnost
Operacije
obilazak po poretku 1..n
pretraivanje
pristup elementu
umetanje
brisanje, ...
Linearne strukture podataka
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Implementacija
sekvencijalna niz
ulanana ulanana lista

Disciplina pristupa
LIFO - stek
FIFO - red
Linearne strukture podataka
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Nizovi
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 ogranienja
Viedimenzionalni nizovi (nizovi nizova)
Selekcija elementa
Operacije
Linearne strukture podataka Nizovi
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Smetanje vektora
Sekvencijalna reprezentacija,
ne razdvaja se logiki koncept od implementacije
A
i
= A
l
+ (i - l)s (jedan element zauzima s rei)
Efikasan, direktan pristup,
neefikasno umetanje i brisanje
X [l] X [i] X [u]
A
l
A
i
s
X
Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Smetanje vektora
Kontinualno
prostorno efikasno
neefikasan pristup
Sa dopunjavanjem (padding)
iskorienje prostora S
u
= s / s(
efikasniji pristup
X [l]
1442443
X [l+1] X [l+2]
1442443 1442443
X [l]
144244314424431442443
X[l+1] X [l+2]
Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Smetanje vektora
Pakovanje
k = 1/s elemenata u jednoj rei
prostorno iskorienje S
u
= ks / ks(
A
i
= A
l
+ (i - l)/k
pozicija u rei (i - l) mod k
X [l]
123
X [l+6]
123 123
X [l+5]
Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Smetanje matrica
Cilj - efikasna adresna funkcija
Linearizacija
po vrstama (row-major)
po kolonama (column-major)
X
1
i, j i,1 i,N
M, j M,1 M,N
i
M
1 j N
1, j 1,1 1,N
Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Smetanje po vrstama
X[l
1
:u
1
, l
2
:u
2
]
A
i,j
= A
l1,l2
+ ((i - l
1
)(u
2
- l
2
+ 1) + j - l
2
)s
X[1:M,1:N]
A
i,j
= A
1,1
+ ((i - 1)N + j - 1)s
ne zavisi od broja vrsta
1, j 1,1 1,N M,j M,1 M,N
... ...
vrsta 1 vrsta i vrsta M
i,j i,1 i,N
Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi Predstavljanje nizova u memoriji
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Smetanje po kolonama
X[l
1
:u
1
, l
2
:u
2
]
A
i,j
= A
l1,l2
+ ((j l
2
)(u
1
l
1
+ 1) + i l
1
)s
X[1:M,1:N]
A
i,j
= A
1,1
+ ((j - 1)M + i - 1)s
ne zavisi od broja kolona
i,1 1,1 M,1 i,j 1,j M,j i,N 1,N M,N
... ...
kolona 1
kolona j kolona N
Linearne strukture podataka Nizovi Predstavljanje nizova u memoriji
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Viedimenzionalni nizovi
X[1:u
1
, 1:u
2
, ..., 1:u
n
]
Generalizovano smetanje po vrstama
X[1, ..., 1, 1] X[1, ..., 1, 2] X[1, ..., 1, u
n
]
X[1, ..., 2, 1] X[1, ..., 2, 2] X[1, ..., 2, u
n
]
...
X[u
1
, ..., u
n-1
, 1] X[u
1
, ..., u
n-1
, 2] X[u
1
, ..., u
n-1
, u
n
]
Leksikogafski poredak
Linearne strukture podataka Nizovi Predstavljanje nizova u memoriji
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Viedimenzionalni nizovi
A
i1,.., in
= A
1,..,1
+ ((i
1
- 1)u
2
u
3
...u
n
+ (i
2
- 1) u
3
u
4
...u
n
+
+ (i
n-1
- 1)u
n
+ i
n
- 1)s
Efikasno izraunavanje
offset = 0
for j = 1 to n do
offset = U [j ] offset + I [j ] - 1
end_for
A = A
1,..,1
+ s * offset
Implikacije naina smetanja
a)
0
x
x
x
X
b)
X
x
x
x
0
c)
0
0
0
0
X
d)
X
0
0
0
0
Linearne strukture podataka Nizovi
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Optimizacije pri smetanju
Cilj uteda prostora, ali ipak efikasan pristup
Primer - trougaone matrice
Linearne strukture podataka Nizovi Optimizacije pri smestanju nizova
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Trougaona matrica
Npr. donja trougaona matrica
X[i,j] = 0 , i < j
Primena smetanja po vrstama

X[1,1] X[2,1] X[2,2] X[3,1] X[3,2] X[3,3] ...
Uteda u prostoru oko 50%
A
i,j
= A
1,1
+ (i(i - 1)/2 + j - 1)s ako je i > j
1 n+1 2
X
Y
n 1
X
Y
1
n
n
1
2
a)
b)
Linearne strukture podataka Nizovi Optimizacije pri smestanju nizova
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Trougaone matrice
X[i,j] = Z[i,j +1] ako je i s 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
A
l
g
o
r
i
t
m
i

i

s
t
r
u
k
t
u
r
e

p
o
d
a
t
a
k
a

Retki nizovi
Relativno veliki broj nultih elemenata
Pamte se samo nenulti elementi uteda prostora
Vektorska reprezentacija
Neefikasne operacije!

Vous aimerez peut-être aussi