Professional Documents
Culture Documents
Programiranje
Programiranje
=
=
= =
end; r not : r B, begin do r while
end; q not : q A, begin do q while
p; not : r p; : q
q = p; r p;
while (q) { A, q q ; }
while (r) { B, r r ; }
=
=
=
16
Uzroci nestrukturiranosti programa
Strukturiran program je relativan pojam, jer se odnosi na bazu. Ukoliko ne postoji referenca na neku
bazu, pojam strukturiranog programa odnosi se na programe koji su pisani bez upotrebe skokova ili
uopte koji se odnose na bazu izgraenu od sekvence, iteracije tipa while-do i selekcije tipa if-then-
else.
Postoji pet uzroka za nestrukturiranost programa, tj. postoji pet struktura takvih da ako se neka od njih
pojavi kao podgraf GTP onda je program nestrukturiran i mora se koristiti goto.
To su sledee strukture:
- nepravilan put iza selekcije
- iteracija sa vie izlaza
T
T
T
T
17
- iteracija sa vie ulaza
- iteracije koje se preklapaju
T
T
T
T
18
- paralelne iteracije (ovo je inae i nepravilan program)
Strukturiranje programa
Strukturiranje programa bavi se problemom eliminisanja skokova. Oni ostaju kao opcija jedino za
eventualno iskakanje iz nekog ciklusa. Skokove eliminiemo transformacijom programa, koji ih
koristi, u funkcionalno ekvivalentni, koji ih nema.
Postoje dva naina za ovu transformaciju: moemo napisati program iz poetka izbegavajui skokove
ili koristiti neku od metoda za transformaciju. Ovaj drugi metod je vie korien. Najpoznatija metoda
je metoda Aschroft-Manna i bazira se na dokazu strukturnih teorema.
Metoda Aschroft-Manna
Primer
Transformisaemo program dat sledeim GTP u funkcionalno ekvivalentan program.
To se radi na sledei nain:
- prvo oznaimo vorove i okolinu;
- uvodimo jednu upravljaku promenljivu, sukcesivnim proveravanjem
njene vrednosti izvrie se odgovarajui vor;
- zbog ubrzanja procesa, vrednost idueg vora neemo traiti u matrici
prelaza, ve se ta vrednost zadaje eksplicitno.
Ova metoda je izuzetno pogodna za automatizaciju.
Bazira se na transformaciji nestrukturiranog programa (sa goto skokovima) u
program bez goto naredbi.
T
T
Q
A
T
P
T
B
1
2
3
0
4
0
19
Evo kako izgleda algoritam tog programa:
n 1
n = 1
T
A
n 2
n 3
n = 3
B
n 4
n 0
n = 0
n = 2 P n 1
n = 4 Q n 2
T
T
T
T
T
T
20
Pisanje programa bez upotrebe skokova
Ovo ostvarujemo hijerarhijskom (ili sukcesivnom) dekompozicijom programa. Najee se koristi top-
down razvoj programa, koji predstavlja vrlo prirodan nain za pisanje programa i uopte reavanje
kompleksnih problema. Program razbijamo na jednostavnija reenja koja se sukcesivno izvravaju.
Primer
- Reiti sistem linearnih jednaina Ax = b reda n, Ax = b, n.
Sa teorijskog aspekta, jasno je da problem rastavljamo na problem unosa podataka, odreivanja
reenja i izdavanja rezultata. Naravno, svaki od ovih problema se moe dekomponovati na jo
jednostavnije problem, tako da dekompoziciju problema vrimo do nivoa naredbe programskog jezika.
Svaki od ovih nivoa, dok ne stignemo do naredbe, u stvari predstavlja komentar u programu koji
opisuje postupak reavanja problema.
Reavanje sistema linearnih jednaina Ax = b, n.
U praksi, ulaz i izlaz neemo dekomponovati na jednostavnije probleme, jer su jasni sami po sebi.
Dodue, problem odreivanja reenja dekomponujemo na neke podkorake iji broj zavisi od toga kako
reavamo sistem. Na slici je dat jedan primer. Ispod ovog nivoa neemo ii kad je u pitanju ovaj
zadatak, jer su dalji postupci jednostavni.
Ovakav nain reavanja problema otvara mogunost paralelnog timskog rada, zbog toga to su poslovi
algoritamski nezavisni. Druga mogunost koja nam se otvara jeste korienje gotovog softvera.
Ova metoda vie nije toliko popularna, njen osnovni nedostatak je taj to je algoritamski orijentisana.
REITI
Ax = b, n
ulaz:
n, A, b
odrediti
reenja
odrediti
A
-1
odrediti
x = A
-1
b
izlaz:
x
21
Strukture podataka
Pojam podatka
Najosnovniji pojam u raunarstvu uopte jeste pojam podatka. U memoriji raunara ne nalazi se nita
osim podataka (Van Neumann-ova koncepcija). Tu se misli na podatke u uem smislu rei (vrednosti
nekih promenljivih) i uputstva kako se ti podaci obrauju (programi). Pre konstruisanja ENIAC-a,
program je bio realizovan mehaniki.
Podaci odgovaraju diskretnim, zapisanim injenicama o fenomenima iz kojih se izvlae
informacije. Informacija je svako poveanje znanja.
Jedinice posmatranja zovemo entiteti. Entitet predstavlja stvar, subjekt, pojam ili dogaaj. Svaki
podatak vezuje se za neki entitet, pa podatak definiemo kao ureenu etvorku: (naziv entiteta, naziv
osobine, vrednost osobine, vreme). Na primer (Petar, teina u kg, 70, decembar 2002.).
Da bismo mogli manipulisati podacima, oni moraju biti ureeni. Podatke moemo definisati kao
skupove. Na primer, treba proveriti da li je data ulazna vrednost 10 elemenat skupa S = {-5, 10, 11, 12,
25}. Znai, treba kreirati odgovarajui algoritam koji e porediti datu vrednost sa elementima skupa,
tj. sa njegovim prvim, drugim itd. elementom. Postavlja se pitanje kako odrediti redosled elemenata,
ako znamo da je skup neureena struktura. Dakle, mora postojati bar jedno ureenje podataka. Ako
skup S snabdemo ureenjem, to vie nee biti skup. Ureen skup zove se struktura.
Bez strukture podataka nema programa.
Prvi programski jezici (Fortran, BASIC, Cobol) su bili prilino siromani strukturama podataka.
Strukture podataka i tipovi podataka su vrlo bliski pojmovi.
U Pascalu, Wirth je izjednaio po znaaju algoritamski i deklarativni deo (u kojem su date strukture
podataka). On je pokazao da je struktura podataka potpuno ravnopravna u odnosu na algoritam i da je
to stabilniji deo programa.
Odnos algoritma i strukture podataka
Ako posmatramo gornju emu gde su prikazani algoritmi A
1
, A
2
, ..., A
n
koji svi pristupaju nekoj
strukturi podataka S, jasno je da izmena nekog od algoritama A
i
verovatno nee imati uticaj na drugih
n-1 algoritama. Ali svaka izmena strukture S e gotovo sigurno izazvati izmene u skoro svim
algoritmima.
S
A
1
A
2
A
i
A
n
22
Znaaj struktura podataka
Znaaj struktura podataka ilustrovaemo na primeru. Tu se jasno vidi koliki je uticaj struktura
podataka na algoritam.
Treba napisati Pascal program za manipulaciju sa matricama. Program treba da omogui pristup
elementima matrice, obradu tih elemenata, brisanje, dodavanje novih itd.
Postavlja se pitanje koju strukturu podataka e koristiti na program. Uzeemo da je matrica
definisana kao izvedeni pascalski tip array:
var A: array[1..m, 1..n] of <tip>;
U ovom sluaju, pristup elementima reen je na nivou programskog jezika:
A[i, j] := t;
m := A[k, l];
A takoe i obrada elemenata:
for i := 1 to m do for j := 1 to n do Obradi(A[i,j]);
Postavlja se pitanje, kako manipulisati matricom ako su m i n veliki brojevi. Npr, ako su m i n 1000,
naa matrica ima milion elemenata, to trai prilino velik memorijski prostor za smetanje tih
elemenata. Takoe, pristup i obrada elemenata moe trajati prilino dugo. Dakle, uiniemo znatno
ozbiljniji zahvat i razmotriemo druge naine za realizaciju strukture podataka.
U inenjeriji je vrlo est sluaj da u matricama sa velikim brojem elemenata, vrednost najveeg broja
tih elemenata je nula. Takve matrice se zovu retke matrice. Zato onda ne bismo obratili panju samo
na one elemente ija je vrednost razliita od nule?
Prvo, memorisaemo samo one ija je vrednost razliita od nule. Time smo matricu pretvorili u niz
slogova (p je mnogo manje od m i n.):
var B: array[1..p] of record
vrednost: T;
vrsta, kolona: integer
end;
Sada obraujemo samo elemente od B:
for k := 1 to p do obradi(B[k].vrednost);
Ovim smo smanjili trokove memorije i vreme obrade, ali sada pristup elementima A vie nije
jednostavan. Pristup elementu A[i,j] moemo reiti na primer na sledei nain:
k := 1; nadjen := false;
while (k <= p) and (not nadjen) do
if (B[k].vrsta = i) and (B[k].kolona = j) then
nadjen := true
else k := k + 1;
if nadjen then x := B[k].vrednost else x := 0;
Jo je komplikovaniji postupak za dodavanje novog elementa u A.
23
Definicija strukture podataka
Postoji mnogo definicija strukture podataka, od onih intuitivnih do sloenih, strogo matematikih
definicija (npr. ureen skup podataka).
Elemente jedne strukture podataka ine:
- pre svega, skalari;
- neke druge strukture podataka;
- relacije kojima su povezani elementi date strukture.
Ureeni par (p, C) jeste skalar, gde je p podatak, a C relacija. Poto je p izolovan podatak, ova relacija
jeste prazna relacija.
Relacije kojima su meusobno povezani elementi strukture mogu biti sasvim jednostavne ili pak vrlo
sloene. Na primer, niz je ureen relacijom susedstva definisanom izmeu dva elementa na sledei
nain {(x
i
, x
i+1
) | i = 1, 2, ..., 1 n }. Sloena relacija je na primer relacija predmet-nastavnik, gde jedan
predmet moe da predaje vie razliitih nastavnika, a sa druge strane svaki nastavnik moe da predaje
vie razliitih predmeta.
U daljem razmatranju posmatraemo relaciju elemenata nekog niza. Uzeemo da je ova relacija
netranzitivna. Definisaemo neposredno susedstvo kao (x
i
, x
i+1
) ili posredno kada je x
i
prethodnik x
i+1
i
x
i+1
je sledbenik x
i
.
Skalar je struktura podataka. Ako su
1 2
, , ...,
k
S S S strukture podataka i ako je
{ }
1 2
, , ...,
k
S S S S = , tada je ureena 1 n + -orka ( )
1 2
, , , ...,
n
S r r r struktura podataka, gde
su
1 2
, , ...,
n
r r r relacije reda dva ili veeg u skupu S. U optem sluaju, ova 1 n + -orka je
promenljiva u vremenu.
Grafovi
Za grafiko prikazivanje struktura podataka koriste se grafovi. Graf je skup
snabdeven jednom binarnom relacijom, tj. ureeni par (S, r). Sastoji se od
vorova (elementi skupa S). Relacije meu tim vorovima se prikazuju tako
to ih povezujemo granama koje ne moraju biti orjentisane. Orjentisan graf
zove se digraf (directed graph).
Digrafi su modeli jedne velike klase struktura podataka. Ne svih, jer se ne
mogu sve strukture prikazati na ovaj nain. U matematici, vorove grafa
oznaavamo kruiima, dok je kod struktura podataka uobiajeno da se za
oznake koriste pravougaonici. Za svaki vor na digrafu definie se ulazni
stepen vora, a to je broj grana koje ulaze u vor, i izlazni stepen vora, tj.
broj grana koje izlaze iz njega.
Graf niza
X
1
X
2
X
3
X
n
X
n-1
...
a
1
a
2
a
3
a
4
Digraf
24
Operacije nad strukturama podataka
Definicije ovih operacija nisu obuhvaene definicijom strukture podataka, jer ih intuitivno
pridruujemo toj definiciji. Razlog zbog ega podatke stavljamo u strukturu (strukturiramo ih,
ureujemo) je da bismo nad njima vrili neke operacije.
Postoje tri grupe operacija:
1. primitivne operacije su sasvim proste operacije i uglavnom se pojavljuju u sastavu drugih
operacija, tj. retko se pojavljuju kao izolovane. One se softverski esto svode na itanje
adrese. Treba spomenuti logiku operaciju Empty, koja vraa vrednost true ako je struktura
podataka prazna, tj. nema elemenata. Druga bitna je logika operacija Full, koja pokazuje
da li je memorijski prostor namenjen uvanju neke strukture podataka popunjen.
Treba primetiti da ove dve operacije nisu dualne, jer je Empty vezana za definiciju neke
strukture podataka, a Full sa neposrednom realizacijom te strukture u memoriji. Poto se jedna
struktura moe realizovati na vie naina, Full u jednom sluaju moe da ima smisla, a u
drugom ne;
2. osnovne operacije su najbitnije i slue za meusobno razlikovanje struktura podataka koje
imaju isti digraf. Postoje tri grupe ovih operacija: operacije pristupa, uklanjanja i
dodavanja. Ove operacije ulaze u definiciju strukture podataka.
Osnovne operacije su:
a. pristup to su semantiki jednostavne operacije. Svode se na uoavanje
(izdvajanje) nekog elementa iz strukture podataka radi itanja ili izmene podatka
(informacionog dela, tj. sadraja elementa). Izdvojeni element zove se tekui
element i postoji mehanizam za izmenu tekueg elementa.
Treba definisati kriterijum pristupa nekom podatku. To je predikat koji daje za tano
jedan element iz strukture. Ako se takav element moe nai u datoj strukturi, pristup je
uspean. U suprotnom, traenog elementa nema.
Postoje tri naina pristupa u okviru strukture podataka od kojih su svi ravnopravni, ali
nejednako zastupljeni. Kod pojedinih struktura podataka neki od ovih naina nisu
mogui ili jednostavno nemaju upotrebni znaaj. Nain pristupa moe biti:
i. prema poziciji: Kriterijum je mesto elementa. Odvija se na bazi zadate
pozicije elementa u strukturi podataka. Moe biti eksplicitan i implicitan
(pozicija se podrazumeva). (npr. indeksiranje niza)
ii. prema informacionom sadraju (asocijativni pristup, traenje): Kao
argument traenja daje se deo informacionog sadraja elementa i to takav
deo da potpuno definie dati element (jednoznano). Tada se algoritamski
proverava da li takvog elementa ima u datoj strukturi. Ako on postoji,
traenje je uspeno i na raspolaganje se stavlja ostatak informativnog
sadraja elementa. Deo informativnog sadraja koji jednoznano definie
svaki element naziva se klju;
iii. navigacija: Ovaj nain pretraivanja izgraen je oko pojma tekueg
elementa. Tekui element uvek postoji i njemu se implicitno pristupa;
b. uklanjanje se vri tako to se izvue traeni element iz strukture i potom se
auriraju veze, kako bi se uklonile sve prema sada nepostojeem elementu;
25
c. dodavanje se izvodi slino kao uklanjanje, jedina razlika je to se novi element
umee u strukturu, a veze se auriraju kako bi se i novi element naao rasporeen
na pravo mesto.
Sve tri osnovne operacije mogu biti definisane sa odreenim ogranienjima, a uklanjanje i
dodavanje uopte ne moraju biti definisane za neku strukturu.
3. sloene operacije su:
a. pretraivanje razlika izmeu ove i operacije traenja je u tome to rezultat ove
operacije moe biti vie od jednog elementa. Postupak se obavlja na bazi nekog
drugog dela elementa, koji se ne definie jednoznano.
b. sortiranje ureivanje (po pravilu) linijske strukture podataka po nekom
kriterijumu
c. kopiranje pravljenje kopije svih ili nekih elemenata strukture podataka
d. spajanje proces objedinjavanja dve ili vie struktura u jednu;
e. razlaganje proces rastavljanja jedne strukture podataka na dve ili vie.
Fizika realizacija struktura podataka
Neposredna fizika realizacija jedne strukture podataka moe biti:
o sekvencijalna i
o spregnuta.
Kod sekvencijalne realizacije neke strukture, zauzima se kompaktan memorijski prostor u koji se
smetaju elementi strukture.
Spregnuta realizacija neke strukture podataka izvodi se tako to se sprega izmeu elementa te strukture
i mesta njihovog smetanja u memoriji ostvaruje pokazivaima. Dakle elementi jedne strukture se
mogu smestiti na razliitim lokacijama u memoriji.
Jasno je da je kod sekvencijalne realizacije neke strukture maksimalni broj elemenata te strukture
ogranien, dok kod spregnute ista struktura teoretski moe imati neogranien broj elemenata. (U
stvarnosti nas ograniava samo koliina raspoloive memorije.) Sa druge strane, osnovne operacije se
obavljaju mnogo bre na strukturama koje su realizovane sekvencijalno, nego na onim realizovanim
spregnuto.
Svaka struktura podataka snabdevena je jednom dopunskom strukturom, koja sadri podatke o toj
osnovnoj strukturi i naziva se deskriptor. Deskriptore najee kreira kompajler, a ako oni ne postoje
u programskom jeziku, kreira ih sm programer.
26
Klasifikacija struktura podataka
Klasifikacija struktura podataka vri se na etiri osnovna naina:
o prema nivou apstrakcije
o prema mestu memorisanja
o prema tipu relacije
o prema ogranienjima u izvoenju osnovnih operacija.
Klasifikacija struktura podataka prema nivou apstrakcije
Prema nivou apstrakcije, strukture delimo na:
- logike pojavljuje se u modelu i nezavisna je od raunara, programa i memorije
- fizike predstavlja neposrednu realizaciju strukture u raunaru.
Nije isto kako logiki definiemo neku strukturu i kako je posle realizujemo u memoriji raunara. Za
jednu logiku strukturu moe da postoji vie naina njene fizike realizacije.
Primer
Uzeemo primer strukture matrice. Njena logika struktura sastoji se od vrsta i kolona. Sa druge
strane, memorija raunara je po svojoj prirodi jednodimenzionalna (linijska) struktura. Zbog toga
moramo smisliti odreeni nain kako da dvodimenzionalnu strukturu transformiemo u
jednodimenzionalnu i kasnije tu jednodimenzionalnu opet u dvodimenzionalnu. U Fortranu, na primer,
to je bilo reeno tako to se matrica razdvajala na vrste i onda su one upisivane sekvencijalno jedna iza
druge u memoriju.
a b c d
e f g h a b c d e f g h i j k l
i j k l
Primer logike i fizike strukture matrice
Klasifikacija struktura podataka prema mestu memorisanja
Prema mestu memorisanja strukture podataka delimo na
- operativne uvaju se u operativnoj memoriji raunara (npr. RAM)
- masovne uvaju se u masovnoj memoriji (npr. Hard Disc)
Izmeu operativnih i masovnih memorija postoje kvalitativne i kvantitativne razlike. (razlike u
veliini, brzini i permanentnosti)
27
Operativne strukture su manjeg kapaciteta, ali im se bre pristupa. ivot operativnih struktura je samo
dok traje program.
Masovne strukture su veeg kapaciteta, ali im se sporije pristupa. One su permanentne.
Klasifikacija struktura podataka prema tipu relacije
Ova klasifikacija je karakteristina samo za strukure podataka tipa (S, r), tj. za one iji je skup
snabdeven samo jednom binarnom relacijom. Ovakvih struktura ima mnogo i za sve se moe
konstruisati odgovarajui digraf.
Postoje tri vrste struktura i to su:
1. linearne strukture imaju digraf, koji zadovoljava dva uslova: svi vorovi osim tano
jednog imaju ulazni stepen jedan i svi osim tano jednog imaju izlazni stepen jedan.
Drugaije reeno, svaki element osim jednog ima tano jednog prethodnika i svaki element
osim jednog ima tano jednog sledbenika. Ovaj odnos prethodnik-sledbenik je
fundamentalan za linearne strukture podataka.
Posebna varijanta linearnih struktura su tzv. cirkularne strukture, gde svi vorovi imaju ulazni
stepen jedan i izlazni stepen jedan.
2. strukture tipa stabla njihov digraf zove se stablo. U stablu postoji tano jedan vor s
ulaznim stepenom nula. U sve ostale vorove ulazi tano jedna grana. Takoe, ovaj digraf
je slabo povezan, to znai da su svaka dva vora povezana nekim putem bez obzira na
orjentaciju grana. Bitna karakteristika je da svaki element strukture osim jednog (korena)
ima tano jednog prethodnika, a svaki (osim listova) ima jednog ili vie sledbenika. Dakle,
prethodnik jeste funkcija, dok sledbenik nije.
3. mrene strukture podataka svaki element ima proizvoljan broj prethodnika i
sledbenika. vorovi mrenih struktura su slabo povezani.
Klasifikacija operativnih struktura (prema ogranienjima u izvoenju osnovnih
operacija)
Pojedine strukture podataka ne omoguavaju neke osnovne operacije (uklanjanje, dodavanje, pristup).
Prema ovim ogranienjima strukture podataka mogu biti:
- statike ne postoji uklanjanje i dodavanje
- poludinamike definisane su sve osnovne operacije, uz specifian pristup
- dinamike definisane su sve osnovne operacije, ali na raun brzine.
28
Statike strukture podataka
Nizovi
Nizovi mogu biti statiki i dinamiki. Ovde se govori o statikim nizovima.
- najstarije i najznaajnije strukture podataka
- zovu se i viedimenzionalne strukture
Niz iji su elementi skalari jeste vektor, a niz iji su elementi vektori je matrica.
Nizovi su jedinstvene linearne strukture. Oznaavamo ih kao ureen par A = (S(A), r(A)),
gde je S(A) skup, a r(A) binarna relacija definisana nad tim skupom.
Uklanjanje i dodavanje nisu definisani, dok je pristup dozvoljen svakom elementu niza. Pristup
elementima je fleksibilan i brz, jer je pozicija elementa unapred poznata. Mogue su sve tri vrste
pristupa. Pristup prema poziciji je najznaajniji i ostvaruje se prema indeksu pozicije.
Kod nizova postoji podgrupa koja se naziva multi-indeksna (vieindeksna) struktura i nju
definiemo rekurzivno na sledei nain:
Vektor je multi-indeksna struktura reda jedan. Multi-indeksna struktura reda k je niz
( ) ( ) ( )
,
k k k
N S N r N = , u kojem su elementi skupa ( )
k
S N
multi-indeksne strukture reda
1 k .
Fizika realizacija
Niz se u programskim jezicima realizuje sekvencijalno.
Deskriptor niza moe da sadri indikator tipa strukture, naziv tog niza i tip elementa, a mora da sadri
adresu poetka niza, opseg niza i veliinu jednog elementa niza u osnovnoj adresnoj jedinici.
X: array[-5..4] of char;
x[-5] x[-4] ... x[3] x[4]
Realizacija niza u memoriji
V X
adr(X[-5])
-5 4
char 1
Deskriptor niza
29
Neka je niz B definisan na sledei nain:
B: array[p..k] of T; (p je najmanja, a k najvea vrednost indeksa niza)
Adresa elementa kojem pristupamo u optem sluaju odreuje se tako to se sabere adresa poetka
niza sa proizvodom rastojanja tekueg elementa od poetka niza i veliine jednog elementa.
adr(B[i])=adr(B[p])+adr(i-p)*l(T).
Pristup elementima multi-indeksne strukture moe se ubrzati ako je adresa unapred poznata. Za to se
koriste dve metode, metoda linearizacijei metoda Iliffe-ovih vektora.
Metoda linearizacije svodi se na seenje matrice na vrste ili kolone. Ovaj metod predvia da se
primeni jedna formula, koja nam odmah daje adresu elementa.
Neka je M niz definisan na sledei nain:
M: array[p
1
..k
1
, p
2
..k
2
, ..., p
n
..k
n
] of T;
onda bi se adresa niza raunala na sledei nain:
| | ( ) | | ( ) ( ) ( )
=
= +
n
1 n 1 n m m m
m 1
adr M j , ..., j adr M p , ..., p l T j p D
Prvi nain za izraunavanje D
m
je ako seemo matricu na vrste:
D
m
= (k
m + 1
p
m + 1
+ 1) D
m + 1
, D
n
= n, m = n1, n2, ..., 1 rekurzija unazad.
Drugi nain je ako matricu seemo na kolone:
D
m
= (k
m 1
p
m 1
+ 1) D
m 1
, D
1
= 1, m = 2, 3, ..., n rekurzija unapred.
Metodu Iliffe-ovih vektora koristimo ako elimo veliku brzinu obrade, a pri tom to to ova struktura
trai neto vie memorije ne predstavlja problem. Ovu strukturu programer mora sam da realizuje, jer
nije sastavni deo nijednog programskog jezika.
X: array[2..3, -1..1, -2..-1] of T;
Iliffe-ovi vektori se retko programiraju na Pascalu, ve na nekom drugom programskom jeziku tipa
Assemblera. To se radi, na primer, na C-u koji ima brzinu priblinu brzini Assemblera. C nudi i tu
prednost to se za donji indeks niza podrazumeva 0, a ne 1 kao kod Pascala.
Kao i nizovi, Iliffe-ovi vektori najee imaju dve dimenzije, a retko kad vie od tri. Jedina razlika u
odnosu na strukturu niza je u tome to Iliffe-ovi vektori ne sadre adrese, ve samo vrednosti
elemenata.
Za svaki nivo indeks se odvaja jedan Iliffe-ov vektor koji se svaki stvara na bazi raspona indeks.
Ako nivo indeks ne obuhvata nulu, stvaraju se pseudoelementi u kojima ne postoji nita. Za svaki
sledei nivo indeksa formiramo skup Iliffe-ovih vektora. Za poslednji nivo, ovaj se skup opet
dopunjava do nule.
30
Shema Iliffe-ovog vektora
Slogovi
- podseaju na nizove, svaki skalar moemo shvatiti kao slog sa jednim elementom.
- vrlo retko se pojavljuju izolovani, najee su elementi neke druge sloenije strukture.
Bitne osobine slogova su:
o semantika konvergencija element sloga sam za sebe nema semantiku. Postoji takva
meuzavisnost elemenata sloga, da oni samo zajedno imaju znaenje. Zbog te
meuzavisnosti, elemente sloga drugaije zovemo polja.
o pitanje relacije relaciju meu elementima sloga treba definisati tako da slog oslikava realni
model. Na primer, ako relaciju definiemo kao binarnu, a uzmemo da slog opisuje
taku u Dekartovom koordinatnom sistemu dolazi do neslaganja sa modelom. Ime
take je u relaciji sa apscisom, ali ne i sa ordinatom (ili obrnuto).
Slog R je ureeni par (S(R), r(R)), gde je S(R) skup polj, a r(R) relacija koja se sastoji od jedne
ureene n-torke u koju ulaze svi elementi iz S(R).
1
( ) {( , ..., )}, ( ) = =
n
r R x x n S R
( , ( ))
i j i j
x x S R i j x x e = =
.
Dodavanje i uklanjanje elemenata nisu definisani, dok je pristup omoguen svakom elementu.
U optem sluaju, polja sloga su razliitog tipa.
Pristup poljima je definisan kao pristup po poziciji, dok druga dva pristupa nema. U skupu pozicija ne
postoji ureenje. Pristup prema poziciji obavlja se putem oznake pozicije. Ostvarujemo ga bijektivnim
preslikavanjem naziva polja nekog sloga na poziciju.
a
1
2
-1
-2
2
-1
-1
2
0
-2
2
0
-1
2
1
-2
2
1
-1
3
-1
-2
3
-1
-1
3
0
-2
3
0
-1
3
1
-2
3
1
-1
0
1
2
3
-1
0
1
-1
0
1
deskriptor
a
2
= a
1
+ 3l(T)
a
3
= a2 + 1l(T)
x[3, 1, -2]
x[2, -1, -2]
31
Fizika realizacija
Mogue su obe fizike realizacije. Sekvencijalna realizacija je osnovna. Jedina fizika realizacija,
podrana direktno od programskog jezika jeste sekvencijalna. Tipian primer izolovanog spregnuto
realizovanog sloga jeste deskriptor.
Sekvencijalna
Za sekvencijalnu realizaciju vezuje se problem razliitih vrsta polja u jednom slogu, pa na primer
polja mogu da imaju razliite duine. Dakle, svako polje se opisuje na razliit nain, pa se zato svako
opisuje posebno. Zbog ovoga je deskriptor sloga znatno sloeniji od deskriptora bilo koje druge
strukture podataka. Programski jezici po pravilu direktno podravaju strukturu sloga, tako da
programer najee ne dolazi u dodir sa deskriptorom.
Tipian deskriptor sadri podatke na nivou celog sloga. Na primer, moe da sadri indikator tipa
strukture (koji pokazuje da se radi o slogu), naziv sloga, adresu poetka memorijskog prostora
rezervisanog za skladitenje sloga, moe da sadri ukupnu duinu sloga, ali mora da sadri broj polja u
slogu.
A
0
A
0
+ 30 A
0
+ 40 A
0
+ 42 A
0
+ 44
prezime ime indeks god_upisa god_studija
Informacije o svakom polju memoriu se posebno i to: indikator tipa
polja, duina u osnovnim adresabilnim jedinicama, naziv i adresa
polja. Adresa se moe dati relativno (u odnosu na poetak
memorijskog prostora odvojenog za slog) ili apsolutno. Ako je tip
nekog od polja slog, onda se ceo deskriptor tog sloga smeta u opis
datog polja. Ovo vai za svako polje.
Spregnuta
Kod spregnute realizacije, u opisu polja ne stoje adrese tih polja u memoriji, ve pokazivai na
dinamiku memoriju.
Kad se u programu trai pristup polju, prevodilac za dato ime polja pregleda deskriptor, trai opis
odgovarajueg polja, i tu proita njegovu adresu. Ako je ona data apsolutno, vraa njenu vrednost ili
rauna poetnu adresu polja, ako je adresa data relativno.
Primena
Primena sloga je kranje iroka i teko je izdvojiti neku za koju se moe rei da preovladava. Slogovi
su najee upotrebljavana struktura podataka. Pojavljuju se na svim nivoima obrade podataka, od
operativnih sistema do baza podataka. ak se i datoteka izvodi iz koncepta sloga.
R STUDENT 5 A
0
S 30 prezime 0
S 10 ime 30
I 2 indeks 40
I 2 god_upisa 42
I 2 god_studija 44
32
Tabele
Struktura tabele predstavlja niz iji su elementi slogovi. Ova struktura ima posebne primene, jer
objedinjuje slogove.
Zavisno od tipa niza, tabela moe biti statika ili dinamika.
Tipine obrade su sortiranje i traenje na osnovu zadatog kljua (dakle pristup je po informacionom
sadraju). Traenje moe biti od prvog na dalje ili neka specifina vrsta traenja.
33
Poludinamike strukture podataka
Stek
- nareana gomila, drugi naziv LIFO red (Last In First Out)
- najvanija i najjednostavnija poludinamika struktura
- ima je svaki program, svi programski jezici imaju stek implicitno.
Stek je linearna struktura, tj. ureeni par L = (S(L), r(L)), gde je r(L) binarna relacija
definisana nad skupom S(L).
( ) { }
1 2
, , ...,
n
S L x x x =
( )
( ) { }
1
, 1, 2, 1 2
2
i i
x x i n n
r L
n
+
= >
C <
Digraf steka:
o vrh steka (X
n
) element bez prethodnika (u smislu relacije prvi)
o apsolutno dno steka (X
1
) element bez sledbenika (u smislu relacije poslednji)
Funkcije definisane za stek:
- Empty(L) pokazuje da li je neka struktura prazna
- Prvi(L) oitava prvi element strukture (oitava adresu vrha iz deskriptora steka)
- Full(L) proverava da li je stek prepunjen (vrh=A
max
)
Definisane su sve tri osnovne operacije i vre se iskljuivo na vrhu (poslednje upisanom elementu).
Osnovne operacije:
- Top pristup
- Pop uklanjanje
- Push dodavanje
Sloene operacije:
- operacija pranjenja steka uklanjanje svih elemenata, dok Empty ne pokae true.
- funkcija za odreivanje broja elemenata
X
n
X
n-1
X
1
...
34
S
1
S
2
S
3
S
1
S
2
S
3
stek
Fizika realizacija
Fizika realizacija obavlja se na oba standardna naina, i sekvencijalno i spregnuto.
Sekvencijalna
Osnovni nain realizacije je sekvencijalni, jer je bri to se i najvie oekuje od steka. Ovaj nain
uvodi ogranienje maksimalnog broja elemenata na steku. Podrazumeva se deskriptor koji se ne vidi.
Deskriptor sadri identifikator tipa strukture, naziv steka, najveu i najmanju adresu adresnog
prostora steka, adresu elementa na vrhu steka.
Stek se protee od minimalne adrese do aktuelnog vrha.
Naini izvravanja operacija:
- Top proverava se da li je stek prazan (vrh<A
min
) i ako nije, pomou primitivne funkcije
Prvi(L) pristupi se elementu na vrhu i on se oita. ( Empty(L), Prvi(L) )
- Pop proverava se da li je stek prazan i ako nije, vrh se umanji za veliinu jednog elementa
steka
- Push vrh se povea za veliinu jednog elementa steka, a zatim se upie sadraj novog
elementa
Overflow stanje kada se pokua upis u popunjen stek
Underflow stanje kada se pokua oitavanje ili uklanjanje elementa iz praznog steka
Spregnuta
Spregnuta fizika realizacija koristi se samo ako je neophodno da se izbegne overflow stanje. Ovakva
realizacija steka zove se fizika lista. Deskriptor mora da sadri adresu vrha, a elementi su
pokazivaima spregnuti po listi. Sve tri osnovne operacije su sporije.
Primena
Stek se primenjuje gde god se pojavljuje neka vrsta rekurzije. Na primer
kod prevoenja izraza na mainski jezik, izrazi se prvo prevode iz
infiksne (a+b) u postfiksnu (ab+) ili prefiksnu (+ab) notaciju (najee
u postfiksnu, jer je taj zapis izraza najsliiniji onom na mainskom
jeziku). Kod poslednje dve, za naznaavanje redosleda izvravanja
operacija, nisu potrebne zagrade. Standardni algoritam za prevoenje
izraza iz jedne u drugu notaciju ne moe da funkcionie bez steka.
Amin vrh Amax
Realizacija steka u memoriji
ST L
A
max
A
min
vrh
opis elemenata
Deskriptor steka
35
Prilikom rekurzije, potprogramu se mora proslediti tzv. adresa povratka (na koju se upisuje rezultat
tog potprograma). Bez obzira koliko se duboko zalazi u rekurziju, da bi se vratili na prethodni nivo
uvek se koristi poslednja upisana adresa koja se potom ukloni. Zbog toga se koristi stek.
Dakle, druga veoma vana primena steka jeste razmena podataka meu programima i potprogramima.
Skup podataka, koji sadri stvarne parametre, i adresa povratka smetaju se na stek, odakle ih ita
potprogram. On rezultate obrade upisuje na stek, a povratni parametar na datu adresu.
Pascalski i fortranski nain razmene podataka izmeu programa i potprograma
Ranije se postupak razmene podataka odvijao u zaglavlju potprograma. Standardni fortranski nain
razmene parametara jeste da se adresa na kojoj se nastavlja izvravanje glavnog programa posle
zavretka potprograma upie na nultu relativnu adresu memorijskog prostora predvienog za
potprogram. Iza tog podatka bi se nalazili stvarni parametri, a tek potom instrukcije potprograma.
Ovaj nain razmene parametara bio je nefleksibilan i naruavao je princip da program i potprogram
budu relativno nezavisne celine. Takoe, rekurzija nije bila mogua, jer se nije moglo upisati vie
povratnih adresa.
Sada svi programski jezici predviaju iskljuivo stek za prenos parametara i zbog toga je stek jedna od
najvanijih struktura podataka.
Red
- drugi naziv red ekanja ili FIFO red (First In First Out)
- vrlo vana struktura podataka, formalno veoma lii na stek, ali je primena potpuno drugaija.
Red je linearna struktura, tj. ureeni par F = (S(F), r(F)) gde je S(F) skup, a r(F) binarna
linearna relacija definisana nad tim skupom.
( ) { }
1 2
, , ...,
n
S F x x x =
( )
( ) { }
1
, 1, 2, , 1 2
2
+
= >
=
C <
i i
x x i n n
r F
n
Digraf reda:
Za element X
1
kae se da je na poetku reda, a za element X
n
da je na njegovom kraju.
X
n
X
n-1
X
1
...
A
A'
program
A'
param.
kd
potprogram
A
A'
A'
param.
P
program
stek
potprogram
36
Funkcije definisane za red:
- Empty(F)
- Prvi(F)
- Poslednji(F) vraa adresu poslednjeg elementa reda
Definisane su sve tri osnovne operacije. Pristup i uklanjanje vre se na prvom elementu, dok se
dodavanje uvek izvrava iza poslednjeg elementa.
Osnovne operacije:
- Front pristup prvom elementu
- Pop uklanjanje
- Push dodavanje
Sloene operacije:
- operacija pranjenja reda
- odreivanje broja elemenata u redu, tzv. duine reda
Fizika realizacija
Fizika realizacija obavlja se na oba standardna naina, i sekvencijalno i spregnuto.
Sekvencijalna
Osnovni nain realizacije je sekvencijalni, jer je bri to se i najvie oekuje od reda. Ovakvom
realizacijom izdvaja se kompaktan memorijski prostor, koji e sluiti za smetanje elemenata reda.
Deskriptor sadri identifikator tipa strukture, naziv reda, najveu i najmanju adresu adresnog prostora
reda, adrese elemenata na poetku i na kraju reda.
Amin poslednji prvi Amax
Realizacija reda u memoriji
RD F
A
max
A
min
prvi
poslednji
opis elemenata
Deskriptor reda
Red se nalazi izmeu adrese prvog i poslednjeg elementa. Oba kraja reda su pokretna, tako da nastaje
problem lane prepunjenosti reda.
x
Uzeemo za primer red sa prethodne slike koji sadri jedan element x. Posle izvravanja operacije
umetanja Push(F,a) red sadri dva elementa, i novi element a se nalazi levo od elementa x.
Izvriemo Pop(F) ime smo uklonili element x. Izvriemo Push(F,b), pa Pop(F) i ako bismo sad
hteli da izvrimo Push(F,c) poto se nalazimo na poslednjoj raspoloivoj adresi element c ne moe da
se upie u red. Ispada da je red popunjen, a oigledno da sadri samo jedan element.
b
37
Zbog toga pribegavamo reenju da novi element upiemo na poetak reda. To obezbeuje mehanizam
za neometano pomeranje reda, koji se naziva cirkularna realizacija reda. Red moe da krui po
memorijskom prostoru, bez opasnosti da dodje do lane prepunjenosti. Na ovaj nain smo reili
problem lane prepunjenosti, ali pojavio se novi problem.
Za njegovo ilustrovanje, definisaemo funkciju Prethodni(x,F) na sledei nain:
( )
( )
>
=
=
min
max min
x l F x A
Prethodni x, F
A x A
Ponimo da sukcesivno uklanjamo elemente iz reda sve dok ne bude Prvi(F) = Poslednji(x,F). Sada
red sadri jedan element i ako jo jednom izvrimo Pop(F) red e postati prazan. Sada je
Prethodni(Poslednji(F),F) = Prvi(F).
Ukoliko uradimo suprotno, tj. u red upisujemo nove elemente jedan za drugim dok ga ne popunimo,
opet emo dobiti da je Prethodni(Poslednji(F),F) = Prvi(F), ali u ovom sluaju to znai da je red pun.
Dakle, sada postoji nemogunost razlikovanja potpuno praznog od potpuno punog reda. Postoji
nekoliko naina da se rei ovaj problem.
1. U deskriptoru emo u svakom momentu memorisati aktuelni broj elemenata. Ovaj nain
usporava operacije, jer je posle svakog upisa ili brisanja elementa potrebno pristupiti
deskriptoru i aurirati broj elemenata. Dodue ova operacija nam omoguava da nam je u
svakom momentu na raspolaganju informacija o aktuelnoj duini reda.
2. U deskriptor se smeta statusno polje S koje moe da ima dve vrednosti, 0 i 1. Ako je S = 0 red
je prazan, u suprotnom red nije prazan. Tako statusno polje i funkcija Prethodni(x,F) zajedno
daju informaciju o tome da li je red prazan ili ne. Ovaj nain takoe usporava obradu reda, jer
se polje S mora aurirati posle svakog upisa ili brisanja.
3. Ovaj nain predvia da se upis onemogui na jednu memorijsku lokaciju koja se uvek nalazi
iza lokacije Poslednji(F). Ako se ta lokacija zove Prazna, onda je Prethodni(Poslednji(F),F) =
Prazna. Ukoliko sada elimo da ispraznimo niz, elemente briemo dokle god se
Prethodni(Poslednji(F),F) ne poklopi sa lokacijom Prvi(F). U red moemo dodavati elemente
sve dok Prethodni(Prazna,F) nije Prvi(F), tj. Prethodni(Prethodni(Poslednji(F),F),F) nije prvi.
Ovo znai da je red pun.
Spregnuta
Kod spregnute realizacije ne postoji problem prepunjenosti reda. Red se spregnuto realizuje u
deskriptoru, a elementi su meusobno povezani pokazivaima. Sve tri osnovne operacije su sporije.
Primena
Primena redova vrlo je iroka. Prilikom prenosa poruka na daljinu veoma je bitno da one stiu istim
redom kojim su poslate. Na raunaru redovi postoje kod ulaznih ureaja (npr. bafer tastature i mia),
red ekanja za tampa. Jo neki primeri su alteri sa redovima ekanja i benzinske pumpe sa
redovima automobila.
38
Dek
- red sa dva kraja.
- objedinjava osobine steka, reda i slinih struktura podataka. Ima linearnu strukturu.
Digraf deka:
Definisane su sve tri operacije i to na oba kraja, pa su krajevi ravnopravni. Oznaavamo ih kao levi i
desni kraj.
Fizika realizacija
Moe se realizovati i sekvencijalno i spregnuto.
Sekvencijalna
Kod sekvencijalne realizacije nastaju problem lane prepunjenosti deka, kao i nemogunost
razlikovanja potpuno praznog od potpuno punog deka. Dek cirkulie u oba smera.
Spregnuta
Osnovna realizacija deka je spregnuta realizacija, jer tada krajevi nisu ravnopravni, ve se kretanje
vri u jednom smeru. Kod spregnute realizacije nastaje problem uklanjanja krajnjeg elementa. Dok je
levi lako ukloniti, da bismo uklonili desni moramo proi kroz celu strukturu kako bismo doli do
njega.
Logika struktura deka je strogo simetrina, dok fizika nije. Kretanje se vri pomou dva pokazivaa,
a u sprezi su dva susedna elementa.
Sekvenca
- linijska struktura
Sekvenca je linearna struktura, tj. ureeni par D = (S(D), r(D)), gde je S(D) skup, a r(D)
binarna relacija.
Definisane su sve tri osnovne operacije. Pristup je dozvoljen svakom elementu, a uklanjaju se samo
svi elementi od jednom ili svi elementi poev od zadate pozicije. Dodavanje se uvek vri iza
poslednjeg elementa.
Definisane su sve tri vrste pristupa, ali najvie se koristi navigacija. Sekvenca uvek ima definisan
tekui element.
...
39
Dinamike strukture podataka
Jednostruko spregnuta lista
- drugaiji naziv linearna lista ili lanac
- najprostiji i najvaniji predstavnik dinamikih struktura podataka
- krajnje je fleksibilna
Jednostruko spregnuta lista je ureeni par P = (S(P), r(P)), gde je r(P) binarna relacija
definisana na skupu S(P).
Logika struktura jednostruko spregnute liste:
Element bez (neposrednog) prethodnika nazivamo prvi, a element bez (neposrednog) sledbenika,
poslednji u listi.
Funkcije definisane za jednostruko spregnutu listu:
- Prvi(P)
- Poslednji(P)
- Sledei(P,x)
Definisane su sve tri osnovne operacije. Pristup je dozvoljen svakom elementu, ukloniti se moe bilo
koji element i dodati se moe bilo gde.
Definisane su sve tri vrste pristupa. Pristup po poziciji je sporiji, jer za pristup k-tom elementu, mora
se pristupiti redom svakom do tog k-tog. Pristup prema informacionom sadraju isto zahteva da se
poe od prvog elementa dok se ne nae traeni.
Uklanjanje elementa x, ako je taj element na:
- prvoj poziciji zajedno sa x uklanja se i veza izmeu njega i njegovog sledbenika.
- poslednjoj poziciji zajedno sa x uklanja se i veza izmeu njega i njegovog prethodnika.
- nekoj drugoj poziciji po brisanju elementa x, uklanja se njegova veza sa prethodnikom i
sledbenikom, a za ova dva se uvodi nova veza.
Dodavanje elementa x na:
- prvo mesto tada se r(P) proiruje vezom (x,prvi element)
- poslednje mesto tada se r(P) proiruje vezom (poslednji element,x)
- neko drugo mesto (izmeu dva susedna elementa a i b) u r(P), veza (a,b) zamenjuje se vezama
(a,x) i (x,b)
...
40
Ako postoji sistem navigacije, kod uklanjanja i dodavanja treba voditi rauna o tekuem elementu.
Jo neke operacije vezane za jednostruko spregnutu listu:
- odreivanje broja elemenata
- formiranje kopije date liste
- spajanje dve ili vie lista u jednu
- dekompozicija liste na dve ili vie
- sortiranje liste prema sadraju elemenata
Jednostruko spregnuta lista mora se projektovati, tj. moramo imati u vidu za ega e se koristiti. Ako
napravimo jednu listu za vie namena, lista e biti sporija.
Fizika realizacija
Iskljuivo je spregnuta.
Primena
Upotrebljavaju se u najrazliitijim oblastima raunarskih nauka, od operativnih sistema do aplikativnih
programa. Mnogi redovi ekanja sa prioritetima (koriste se u operativnim sistemima) imaju strukturu
liste.
Dinamiki niz
- veoma fleksibilne strukture
- obuhvataju u sebi osobine jednostruko spregnutih listi i statikih nizova.
Imaju sve osobine statikih nizova, ali su uklanjanje i dodavanje definisani za bilo koji element.
Dakle, imaju sve osobine liste, s tim to je pristup po poziciji znatno bri, jer se pozicija moe lako
izraunati unapred.
Fizika realizacija
Iskljuivo je sekvencijalna. Moe doi do prepunjenosti.
Posle svakog uklanjanja i dodavanja moramo aurirati pozicije elemenata (iza ukonjenog ili dodatog
elementa), kako bismo imali pristup po poziciji kao i kod statikog niza. Zbog toga su ove dve
operacije relativno spore.
Primena
Najvanija primena vezana je za mehanizme rukovanja tekstom u programskim jezicima. Tip
podataka string ima osobine dinamikog niza.
41
Dvostruko spregnute liste
- zovu se i simetrine liste
- mogu se pojaviti i u cirkularnom obliku
- ova struktura nije linearna, omoguene su veze u oba smera
Dvostruko spregnuta lista je ureeni par: DP = (S(DP), r(DP)), gde r nije linearna relacija,
1 2
r r r = ,
1 2
r r =C i ( ) ( )
1 2
, , a b r b a r e e . Vidimo da su (S, r
1
) i (S, r
2
) jednostruko
spregnute liste.
Logika struktura dvostruko spregnute liste:
Fizika realizacija
Iskljuivo je spregnuta, pa se svaki element proiruje sa dva pokazivaa.
Treba voditi rauna da dvostruka lista (tj. lista sa dve relacije) nije isto to i dvostruko spregnuta lista.
Poto se relacija uspostavlja na bazi nekog kriterijuma, kod ovih drugih, jedna relacija je taj kriterijum,
a druga suprotan kriterijum. Kod dvostruke liste, jedan i drugi kriterijum ne moraju imati nikakve
veze.
Viestruko spregnuta lista
- multilista
- skup jednostruko spregnutih lista koje su formirane po razliitim kriterijumima. Kriterijumi su
meusobno nezavisni, svaki od njih generie po jednu spregnutu listu. Postoji vie razliitih relacija
meu elementima.
Viestruko spregnuta lista je ureena n+1-orka VP = (S(VP), r
1
, r
2
, ..., r
n
) gde je svaki ureeni
par (S, r
i
) jednostruko spregnuta lista i S
i
_ S(VP).
Svaki element ima onoliko pokazivaa, kojeg je reda lista. Unapred se zadaje koliki je red.
Logika struktura viestruko spregnute liste:
Primena
Koriste se kada treba vriti pretraivanje prema nekom kriterijumu.
...
42
Stabla
- drvo
- vana struktura podataka.
- modelira vie fundamentalnih odnosa iz realnog sveta (hijerarhijski odnosi, odnos opte-pojedinano,
postupak dekompozicije itd.).
Osnovna osobina stabla je da ono nije linearno. Stablo kao digraf zadovoljava sledee osobine:
- postoji tano jedan vor ulaznog stepena nula;
- u svaki vor osim jednog ulazi po jedna grana (svaki ima tano jednog prethodnika) i
- digraf stabla je slabo povezan.
Element u stablu ulaznog stepena nula zove se koren stabla. vorovi digrafa iz kojih ne izlazi nijedna
grana zovu se listovi. Put u stablu je ureena n-torka (x
1
, x
2
, ..., x
n
), gde su x
i
vorovi. Duina puta
jednaka je broju grana (n-1). Visina stabla odgovara broju vorova na najduem putu (n). Dakle,
visina stabla je duina najdueg puta uveana za jedan. U stablu postoji tano jedan put od korena do
bilo kog vora, tj. koren je povezan sa svim vorovima tano jednim putem. Najdui put u stablu uvek
poinje od korena i zavrava se u listu. Nivo vora jeste udaljenje vora od korena. Za stabla se ne
koriste termini prethodnik i sledbenik, ve nadreeni i podreeni. Red stabla odgovara najveem
broju podreenih u stablu. Podstablo ini vor sa svim svojim
podreenim vorovima.
Za ovo stablo koren je element 1, a listovi su elementi 3, 4, 5, 6 i 7. Jedan
od puteva ine elementi 1, 2 i 5, duina ovog puta je 2 i ovo je jedan od
najduih puteva. Visina stabla je 3. Nivo korena je 0, nivo elemenata 2, 3
i 4 je 1, a nivo elemenata 5, 6 i 7 je 3. Red ovog stabla je 3.
Postoje dva specijalna stabla, to su puno i kompletno stablo. Kompletno stablo reda n je takvo da svi
vorovi stabla (osim listova) imaju izlazni stepen n. Kod punog stabla su svi putevi od korena do
nekog lista iste duine. Ove dve osobine niti ukljuuju niti iskljuuju jedna drugu, tj. nisu ni u kakvoj
korelaciji. Najbolje je da je stablo tako konstruisano da je to blie punom i kompletnom stablu. Tada
je operacija pristupa najbra.
Stablo koje pokazuje dobre osobine (tj. priblino je puno i kompletno) zove se balansirano stablo. Za
bilo koja dva vora istog nivoa balansiranog stabla vai da se broj elemenata u njihovim podstablima
razlikuje najvie za jedan element. Postoje algoritmi za balansiranje stabla i oni zavise od konkretnog
stabla. Primenom ovih algoritama ubrzavamo pristup elementima stabla.
Stablo kao struktura podataka
Stablo ne moemo odmah precizno definisati, jer se meu stablima nalaze raznorodne strukture.
Jedina zajednika osobina im je da imaju digraf tipa stabla. Dodavanja i uklanjanje su u naelu svuda
dozvoljeni, ali ipak postoje ogranienja koja zavise od sluaja do sluaja. Npr. postoji ogranienje reda
iznad kojeg se ne moe ii.
1
5 6 7
4 3 2
43
Karakteristike stabla su:
1. digraf je tipa stabla;
2. dozvoljen je pristup svakom elementu i
3. dodavanje i uklanjanje mogui su kod svakog stabla, ali su definisani u skladu sa
specifinim osobinama datog stabla.
Teorijski, pristup stablu mogu je na sva tri naina. Meutim, pristup po poziciji je specifian i redak,
jer stablo nije linearna struktura. Zbog toga se koristi pristup po informacionom sadraju ili
navigacija.
Najee se elementima stabla pristupa po informacionom sadraju i ovaj se pristup obavlja po kljuu.
Poinje se od korena i na bazi argumenta traenja (kljua) i informacionog sadraja elementa odluuje
se kojem se sledeem elementu pristupa. Sutinski problem koji se ovde javlja je taj da podreeni
elementi istog nivoa ine skup koji nije ureen i ne moemo odrediti prvi, drugi itd. element. Dakle,
ne moe se formirati algoritam koji bi proverio da li se u tom skupu nalazi dati klju.
Zbog toga u strukturi podataka mora postojati ureenje skupa podreenih nekog elementa. Ovo
ureenje moe biti eksplicitno i tada je definisano na nivou logike strukture podataka i moe biti
implicitno kada se definie na nivou fizike realizacije. Na osnovu ove osobine stabala, vri se njihova
osnovna podela. Eksplicitno ureenje imaju tzv. n-arna stabla, a implicitno tzv. generalisana
(uoptena) stabla. Jedina zajednika osobina za ove dve vrste je ve pomenuti digraf tipa stabla.
n-arna stabla
n-arna stabla reda n su ona gde svaki element ima tano nula ili n podreenih. U svakom trenutku,
postoji n mesta rezervisanih za smetanje podreenih elemenata nekog elementa, ali ta mesta ne
moraju biti uvek popunjena (mogu biti nezauzeta). Zbog toga skup podreenih nivoa n ima osobine
statikog niza.
n-arna stabla imaju dve karakteristike:
1. ureenje u skupu podreenih postoji ve na logikom nivou
2. imaju zadati red najvei dozvoljeni red podreenih
Prva dva stabla su binarana i razlikuju se po rasporedu elemenata, a tree je ternarno, ali pozicija C
nije zauzeta
Ureenje postoji da bi se mogao formirati algoritam prolaska kroz stablo. Kod definisanja reda stabla
mora se rei koliko je n.
X
B A
X
B A
X
A C B
44
Iz ovih definicionih osobina sledi definicija n-arnog stabla.
n-arno stablo je ureena n+1-orka Tn = (S(Tn), r
1
, r
2
, ..., r
n
) sledeih karakteristika: (S(Tn), r
1
r
2
... r
n
) ima osobine digrafa stabla i [(a,b) e r
i
. (a,c) e r
i
] (b = c), i = 1, 2, ..., n.
Iz prve osobine vidimo da grane koje vode iz istog nadreenog u podreene su rasporeene u n
relacija.
Druga osobina n-arnih stabala govori da razliiti podreeni ne mogu biti u istoj relaciji sa jednim
nadreenim, tj. sve relacije n-arnog stabla su funkcije. Tako je samim zadavanjem relacije za svaki
element odreen njegov podreeni.
Pristup je u svakom trenutku dozvoljen svakom elementu. Nema pristupa prema poziciji. Najvanija
vrsta pristupa je prema informacionom sadraju. Dodavanje i uklanjanje mogu uvek da se izvre, s tim
to kada se dodaje, mora se voditi rauna da je broj podreenih manji od n. Slino vai i kod
uklanjanja.
Meu n-arnim izdvajaju se binarna stabla.
Binarna stabla
Binarna stabla su posebna vrsta n-arnih, to su n-arna stabla reda dva. Broj pristupa je
2
log n . Za ova
stabla postoji jedna vrlo karakteristina izvedena operacija. To je obilazak binarnog stabla.
Logika struktura jednog binarnog stabla
Obilazak binarnog stabla
Prilikom obilaska stabla pristupa se svakom njegovom elementu u cilju obrade. Postoji vie naina da
se to uradi.
Moe se pristupati redom elementima na svakom nivou. Na primer, za dato stablo redosled bi bio
ABCDEFGHI. Ovakav nain pristupa nije est, jer je prilino komplikovan za izvoenje.
Za obilazak, u principu, postoji est algoritama od kojih su po dva dualna. Svaka od ovih metoda jeste
rekurzivna i svaka se rekurzija bazira na tri stavke:
1. pristup datom elementu;
2. njegovom levom podstablu i
3. njegovom desnom podstablu.
A
C B
F D E
I H G
45
Poto je redosled stavki proizvoljan, dobijamo est algoritama.
Obilazak sleva udesno izvodi se tako to se prvo pristupa levom podstablu (2), zatim elementu (1), pa
desnom podstablu (3). Proces uvek poinje od korena. Dakle, pristupa se korenu, ali se ovaj element
ne obrauje, ve se memorie u neku strukturu L (za nae stablo, memorie se A). Zatim se prelazi u
levo podstablo i opet se izvravaju koraci 2, 1 i 3. (Sada se memorie B, a u sledeem koraku D). Kada
smo stigli do elementa koji nema levo podstablo (G), obraujemo ga. Zatim obraujemo element koji
je poslednji memorisan u strukturi L (to je D za na primer). Obraujemo desno podstablo tog
elementa. (Posle ovog koraka potpuno je obraeno podstablo D.) Nastavimo li ovim algoritmom,
potpuno emo obraditi celo stablo. Dakle, redosled obrade je sledei: GDHBAECIF.
Oigledno je da je pomenuta struktura L LIFO red, tj. stek. Njega moemo kreirati sami (sporiji
nain) ili se ono kreira implicitno, zbog rekurzija.
Obilazak sa vrha ka dnu pretpostavlja da je redosled obrade: element, levo podstablo, desno
podstablo. Za na primer, elemente obraujemo sledeim redosledom: ABDGHCEFI.
Obilazak sa dna ka vrhu se vri na sledei nain: levo podstablo, desno podstablo, element. Na
primeru, redosled je: GHDBEIFCA.
Fizika struktura
Poto je logika struktura stabla data na bazi fizike, fizika struktura stabla je odreena definicijom.
Zbog nelinearnosti, n-arna stabla realizujemo iskljuivo spregnuto. Svi elementi imaju isti oblik i
svaki od njih proirujemo sa tano n pokazivaa. Deskriptor stabla, izmeu ostalog, mora sadrati
adresu korena. Za realizacuju binarnog stabla koristi se specijalna tehnika proivki (niti).
Fizika struktura binarnog stabla sa prethodne slike
U specijalnom sluaju, stablo moemo realizovati sekvencijalno. Takvo stablo mora biti binarno i ne
sme biti veliko.
Tehnika proivki (niti)
Tehnika proivki je specijalna tehnika koja nije deo standardne realizacije. Ona ubrzava proces
obilaska binarnog stabla. Primenjuje se za sluaj da se procenjuje est obilazak binarnog stabla
(intenzivan obilazak). Svrha upotrebe niti je da se eliminie stek i jo vie ubrza obilazak. Postoje dve
varijante ove tehnike, tj. proivke mogu biti jednostrukeili dvostruke.
A
B C
E F
I
D
H G
46
Kod jednostrukih niti bira se jedan od pokazivaa pridruenih elementu (npr. desni). Ako taj
pokaziva ima vrednost (pokazuje na neki podreeni element), ostavlja se kakav jeste. Ako je njegova
vrednost NULL (ne pokazuje ni na ta, na slici oznaeno *) onda se koristi za obilazak i u njega se
upie adresa sledeeg kojem treba pristupiti. Dakle, prilikom obilaska prate se pokazivai i proivke.
Stablo sa pokazivaima i jednostrukim nitima
Da nam proivke ne bi pravile probleme prilikom obrade (tada se mora znati koji je element
nadreeni, a koji podreeni i to nam govore iskljuivo pokazivai), svaki element proirujemo
statusnim bajtom. On pokazuje da li je u pitanju pokaziva ili proivka (ima vrednost 1 kada je u
pitanju pokaziva, a drugu kada je proivka).
Kod tehnike dvostrukih niti koriste se oba pokazivaa (ako su slobodni). Ovaj drugi se koristi za
obilazak u obrnutom smeru, tj. pokazuje na prethodni. Dvostruke proivke koristimo samo pod
pretpostavkom da se koriste oba smera obilaska, tj. da algoritam obilazi strukturu stabla u oba smera.
Sekvencijalna fizika realizacija
Kao to je ve reeno, ovako se realizuju iskljuivo binarna stabla koja nisu velika i nepromenjiva su, i
to iskljuivo kada je stablo neka pomona struktura.
Kao i za druge sekvencijalno realizovane strukture, odvaja se odreen memorijski prostor sa
relativnim adresama. Koren se smeta u relativnu adresu 1. Za ostale elemente vai da ako je taj
element na relativnoj adresi k, njegov levi podreeni se smeta na adresu 2k, a desni na 2k+1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
A B C D E F G H I
Sekvencijalna realizacija stabla iz primera
Prednost ovakve realizacije je u tome to se adresa elementa moe izraunati unapred, pa je pristup
direktan.
Ovakav nain realizacije koristi se za statina stabla ili za ona koja se vrlo malo proiruju (zbog vrlo
lakog prepunjavanja memorije).
Binarna stabla se retko realizuju samostalno, ve kao pomona struktura nekih algoritama (npr.
algoritma sortiranja).
A
* B C
* * E * F
* * I
D
* * H * * G
47
Binarno stablo pristupa
Binarno stablo pristupa obezbeuje brz pristup prema informacionom sadraju (svi elementi imaju
klju).
Definiciona karakteristika je da za svaki element vai:
U njegovom levom podstablu su elementi sa kljuem manjim od njegovog, a u desnom su oni sa
kljuem veim od njegovog.
Primer binarnog stabla pristupa, gde su kljuevi prirodni brojevi
Svaki pristup poinje od korena (klju 13). U svakom trenutku, na osnovu elementa i njegovog kljua,
zna se kojim putem treba nastaviti traenje. Ako traimo element sa kljuem 25, on sigurno nije u
levom podstablu, jer je broj 25 vei od 13, tako da traimo u desnom.
Dodavanje se vri na mestu lista i novododati element je uvek list (postaje list). Ako element ve
postoji u stablu, dodavanje se ili zabranjuje ili se izvri neki alternativni postupak. Element 24 bi bio
dodat u levo podstablo broja 25.
Uklanjanje je mogue za svaki element, ali ne sme doi do prevezivanja grana. Ako bismo uklonili
element 19, moemo ga samo iskljuiti, jer ne moemo prevezati 17 i 25 na 13. Za uklanjanje postoje
dve metode:
1. logiko brisanje svaki element se snabdeva binarnim statusnim poljem vai - ne vai. Broj
elemenata ne moe da opada bez dodatnih mehanizama funkcije, koja ponovo formira stablo
2. fiziko brisanje treba uoiti 3 mogue situacije kod uklanjanja:
1) uklanja se list element se pronae i ukloni, a pokaziva nadreenog se stavi na NULL
2) element koji se uklanja ima 1 podreeni tada se izvodi prevezivanje
3) element koji se uklanja ima oba podreena pronae se element koji treba da se ukloni, u
prvoj fazi pree se u njegovo levo podstablo, a onda se prate desni pokazivai sve dok je to
mogue i sadraj elementa koji sigurno nema desni pokaziva, njegov sadraj se prepie u
onaj koji treba da se ukloni, a on se izbacuje iz strukture (dualno, kada se pree u njegovo
desno podstablo).
Fizikim brisanjem struktura se zaista smanjuje, pa su njene prednosti to to nema nevaeih
elemenata, utroak memorije je smanjen i brzina pristupa je velika, ali zato se javlja potreba da
povremeno izvrimo algoritam za balansiranje stabla (zbog novih dodavanja).
48
Uoptena (generalisana) stabla
Uopteno stablo je struktura podataka ( ( ), ( )) G S G r G =
sa sledeim karakteristikama:
- digraf uoptenog stabla je stablo
- osnovne operacije: Dodavanje i uklanjanje elementa mogue je na bilo kojem mestu.
Navigacija je osnovna vrsta pristupa.
Dozvoljeno je ukloniti svaki element. U praksi
uklanjanje se vri tako to se ukloni vor i svi
njegovi podreeni. Element se moe dodati
bilo gde. U praksi se najee dodaje na mesto
lista novododati element postaje list.
Skup podreenih elemenata istog elementa nema ureenje na nivou logike strukture.
U fizikoj realizaciji takvo ureenje postoji.
Fizika realizacija
Postoji 2 naina fizike realizacije:
1. Prirodna realizacija
Svaka veza iz logike strukture direktno modeluje pokazivaima. Format elementa bi bio promenjiv,
to predstavlja problem. Reenje je da se ogranii broj pokazivaa. Unutar jednog elementa, svaki
element realizujemo sekvencijalno. Do overflow-a moe da doe na nivou svakog elementa (ako smo
stavili mali broj pokazivaa. Prirodna realizacija obezbeuje bre realizacije nego binarna, ali to nije
dovoljan razlog da se u praksi opredelimo za nju.
2. Binarna realizacija
Binarna realizacija po cenu neto sporijih operacija eliminie problem prekoraenja. Jednostruko
spregnuta lista reava taj problem (skup podreenih se organizuje u listu). Svaki element ima dva
pokazivaa. Osnovna ideja binarne realizacije je obezbediti pristup listi polazei od nadreenog.
Nadreeni se proiri jednim pokazivaem na listu svojih podreenih i drugim, koji pokazuje na listu
podreenih kojoj taj element pripada. U ovom sluaju pristup je neto sporiji, jer se svaki put mora
proi kroz celu listu podreenih.
49
Testiranje programa
Testiranje programa je jedna od najvanijih i najskupljih aktivnosti u toku ivotnog ciklusa programa.
Netestirani program nije zavren.
Pod testiranjem programa podrazumevaju se dve meusobno nezavisne delatnosti:
1. provera usklaenosti implementacije (realizacije) programa sa njegovom specifikacijom
2. provera ponaanja programa u eksplatacionim uslovima
Specifikacija je dokument u kome pie ta program treba da radi.
Prva stavka povezuje se sa osobinom korektnosti programa. Korektnost programa je mera u kojoj
program zadovoljava specifikaciju.
Druga stavka povezuje se sa robustnou programa. Robustnost programa podrazumeva imunost na
razne poremeaje, a pogotovo na neregularne, pa i neoekivane, ulazne podatke.
Korektnost i robustnost su ortogonalne osobine, tj. ne uslovljavaju jedna drugu.
Greka (error) predstavlja aktivnost unoenja koda koji je pogrean. Rezultat greke je defekt (fault)
pogrean kod. Izvravanje pogrenog koda vodi ka otkazu (failure). Otkaz moe, a ne mora da se
manifestuje. Manifesetacija otkaza zove se incident. Sve ovo zajedno zove se greka (bug).
Postoje dva pristupa za testiranje programa:
1. konstruktivno testiranje cilj je dokazati da program nema greaka
2. destruktivno testiranje cilj je dokazati da program ima greaka
Program se pokree odreenim skupom ulaznih podataka, koji nazivamo testna stavka (test case).
Prilikom testiranja od svih moguih testnih stavki biramo jedan skup kojim proveravamo program i
njega nazivamo test skup (test set).
Destruktivno testiranje
Postoji 3 strategije destruktivnog testiranja:
1. analiza programa bez primene raunara
2. strategija bele kutiije strukturno testiranje
3. strategija crne kutije funkcionalno testiranje
Druga i trea strategija baziraju se na korienju raunara.
50
Analiza programa bez primene raunara
Ovaj postupak obavljaju ljudi bez primene raunara. Radi se o analizi izvornog koda, ime se
otkrivaju oiglednije greke. Prednost analize programa je u tome to se istovremeno sa otkrivanjem,
greke i lociraju. Ova strategija je i prilino jeftina. Nedostatak je teko otkrivanje suptilnih greaka.
Moe da se vri na dva naina (metode):
a) analiza programskih segmenata (code inspection)
b) simulacija izvravanja programa (walkthrough)
Kod analize programskih segmenata program delimo prema nekom kriterijumu na logiki zaokruene
celine. Obavlja se timski, po sesijama. Tim ine 4 osobe: moderator (priprema i vodi sesije), autor
programa i dva iskusna programera (vre testiranje). Testiranje sopstvenog programa treba izbegavati.
Kod metode simulacije izvravanja programa, proveravaju se trase izvravanja programa. Obavlja se
timski, a tim ine 3 do 5 lanova: moderator, sekretar (vodi evidenciju), izvoa testa i jo eventualno
dva iskusna programera. Jedan lan tima je i autor programa.
Strategija bele kutije
Strategija bele kutije bazira na izvornom kodu. Na osnovu njega dolazimo do testnih stavki. Strategija
bele kutije obezbeuje relativno veliku verovatnou za nalaenje greaka (vie nego strategija crne
kutije), ali je tee doi do testnih stavki.
Postoji 5 metoda:
1. prekrivanje naredbi formirati testne stavke tako da svaka naredba (funkcionalni vor) bude
bar jednom izvrena.
2. prekrivanje odluka testne stavke se projektuju da svaka odluka pojedinano treba da bude
izvrena jednom sa DA i jednom NE.
3. prekrivanje uslova testne stavke se projektuju tako da svaki uslov jednom proe sa DA,
jednom sa NE. Pod uslovom se podrazumeva svaki potpredikat u odlukama.
4. prekrivanje odluka-uslova svaka odluka treba da proe jednom sa DA, jednom sa NE i svaki
uslov jednom sa DA, jednom sa NE.
5. prekrivanje viestrukih uslova predvia da se ulaznim podacima izazove prekrivanje svih
kombinacija potpredikata u svim odlukama ponaosob. Ovo se postie kreiranjem
istinitosnih tablica za svaku odluku i izborom takvih ulaza da sve mogue kombinacije
iz tablica budu ostvarene
Primer
if ( (A>1) && (B==0) ) X=X/A;
if ( (A==2) || (X>1) ) X+=1;
51
Blok dijagram algoritma:
Test skup:
1. A=2 B=0 X proizvoljno
2. A=0 X=0 B proizvoljno
A=2 B=0 X proizvoljno
3. A=1 B=0 X=3
A=2 B=1 X=0
4. A=2 B=0 X=3
A=1 B=1 X=1
5
A=2 B=0 X=3
A=2 B=1 X=1
A=1 B=0 X=3
A=1 B=1 X=1
A>1 B=0 A=2 X>1
ne ne ne ne
ne da ne da
da ne da ne
da da da da
Istinitosna tablica
Strategija crne kutije
- crna kutija naziv za sistem ije detalje ne znamo.
Analiza crne kutije bazira na specifikaciji. Iz nje se formiraju testne stavke. Izvodi se tako to se
analizira ulaz i analizira reakcija sistema na taj ulaz.
Postoje dve metode:
1. testiranje metodom graninih vrednosti
2. testiranje metodom klasa ekvivalencije
52
Testiranje metodom graninih vrednosti
Ova metoda izgraena je na empirijski utvrenoj injenici da je verovatnoa greke najvea na
graninim vrednostima ulaznih podataka, odnosno u njihovoj okolini. Uslov testiranja je da svaka
ulazna promenljiva bude u opsegu od minimalne do maksimalne vrednosti. Cilj je da se smanji test
skup.
Postoji 4 varijante ove metode:
1. totalni test graninih vrednosti
2. parcijalni test graninih vrednosti
3. totalni test robustnosti
4. parcijalni test robustnosti
Glavna prednost ove metode je jednostavan algoritam za izbor testnih stavki, koji se lako moe
automatizovati. Njeni nedostaci su slabija efikasnost (na izlazu nisu svi ishodi pokriveni) i to to
nemamo nikakav stepen slobode prilikom izbora konkretnih ulaznih vrednosti.
Kod testa graninih vrednosti (1. i 2.) svrha je da se umanji test skup. Za svaku ulaznu promenljivu
izdvajaju se 5 karakteristinih vrednosti:
1) y
min
najmanja vrednost
2) y
min+
vrednost koja je vea od y
min
, ali joj je bliska sa dozvoljene strane
3) y
nom
nominalna vrednost (ima ulogu neutralne vrednosti)
4) y
max
vrednost koja je manja od y
max
, ali joj je bliska sa dozvoljene strane
5) y
max
najvea vrednost
Totalni test graninih vrednosti podrazumeva da se svakoj od ulaznih promenljivih dodeli ovih 5
vrednosti. Ukupan broj testnih stavki za svaku promenljivu iznosi 5
n
, gde je n broj promenljivih. Ako
je ovo preveliko predvien je parcijalni test graninih vrednosti. On podrazumeva da se uoi jedna
promenljiva, koja dobija svih 5 vrednosti, dok preostale n-1 imaju nominalnu vrednost. Ovo se ponovi
za svaku promenljivu. Svaka od promenljivih kad proe kroz ovih 5 vrednosti generisae 5 stavki.
Ukupan broj testnih stavki je 5n(n1)=4n+1 (izbacujemo sluajeve kada su sve vrednosti nominalne,
tj. n1 sluaj, dok jedan ostaje).
Test robustnosti (3. i 4.) slian je testu graninih vrednosti, s tim to podrazumeva i dva invalidna
ulazna podatka (u blizini granice, ali sa nedozvoljene strane).
1) y
min-
2) y
min
3) y
min+
4) y
nom
5) y
max-
6) y
max
7) y
max+
Totalni test robustnosti ima 7
n
testnih stavki, dok parcijalni test robustnosti ima 6n+1 testnu stavku.
53
Primer
Na ulazu se zadaju tri vrednosti (a,b,c), koje su celobrojne i u rasponu od 1 do 100. Proveriti da li one
ine trougao i kakav.
1 , , 100 a b c s s Postoji 4 mogua izlaza: jednakostranini, jednakokraki, raznostrani, nije trougao.
redni broj t.s. a b c rezultat
1 1 50 50 jednakokraki
2 2 50 50 jednakokraki
3 50 50 50 jednakostranini
4 99 50 50 jednakokraki
5 100 50 50 nije trougao
6 50 1 50 jednakokraki
7 50 2 50 jednakokraki
8 50 99 50 jednakokraki
9 50 100 50 nije trougao
10 50 50 1 jednakokraki
11 50 50 2 jednakokraki
12 50 50 99 jednakokraki
13 50 50 100 nije trougao
Dokumentacija uz test parcijalnih graninih vrednosti
Testiranje metodom ekvivalencije
Ova metoda omoguuje da mi biramo ulazne n-torke. Cilj je smanjenje test skupa.
Poznato je da e bilo koja ulazna n-torka, ije su vrednosti iste, proi kroz istu trasu (trasa je jedan od
moguih puteva izvravanja programa). Ideja ove metode je lociranje takvih skupova testnih stavki za
koje se program jednako ponaa (klase ekvivalencije) i testirati samo po jednog predstavnika svake
klase. Svi elementi iste klase izazivaju prolazak kroz istu trasu. Test skup formiramo tako to uzmemo
po jednu n-torku iz svake klase. Najvei problem je postaviti kriterijume za odreivanje ovih skupova.
Postoji 3 varijante ove metode:
1. totalni test klasa ekvivalencije
2. parcijalni test klasa ekvivalencije
3. test robustnosti (klasina metoda klasa ekvivalencije)
Metoda klasa ekvivalencije je monija, ali i komplikovanija za primenu, tj. nedostatak je to klase
ekvivalencije mogu da se formiraju na mnogo naina (ne postoji jedinstven algoritam za ovaj
postupak).
Neka je V skup ulaznih promenljivih, a X(V) skup njihovih moguih vrednosti. X(V) se deli na klase i
bira se po jedan predstavnik, tj. ureena n-torka promenljivih.
54
Primer
V={ , , , , , } p q r z i j
X(V) generie sve mogue vrednosti ovih 6 promenljivih.
Neka p, q i r generiu tri klase ekvivalencije: X
1
,X
2
i X
3
, z generie etiri: Y
1
,Y
2
,Y
3
i Y
4
, a i i j dve: Z
1
i Z
2
. U odnosu na ureenu trojku (p,q,r) program se moe ponaati trojako, u odnosu na z na etiri
naina i u odnosu na par (i,j) na dva naina. Iz svake klase izdvojimo po jednog predstavnika i
program pokreemo sa svih 6 vrednosti.
U parcijalnom testu posmatramo promenljivu koja ima najvie vrednosti. Broj testnih stavki jednak je
najveem broju predstavnika.
redni
br. y x z
1 y
1
x
1
z
1
2 y
2
x
2
z
2
3 y
3
x
3
z
1
4 y
4
x
1
z
2
Test plan za parcijalni test
Totalni test metodom klasa ekvivalencije podrazumeva korienje Dekartovog proizvoda predstavnika
klasa, tako da bi se test skup sastojao od stavki iz skupa
1 2 3 1 2 3 4 1 2
{ , , } { , , , } { , } x x x y y y y z z .
Kod testa robustnosti testne stavke formiraju se primenom dva pravila:
sastaviti validne ulaze kombinovanjem predstavnika klasa ekvivalencije tako da broj testnih
stavki bude to manji
za svaku od vrednosti kada ih kombinujemo samo jedna vrednost sme da bude invalidna, a sve
ostale validne.
Primer
Na ulazu se zadaju tri vrednosti (a,b,c), koje su celobrojne i u rasponu od 1 do 100. Proveriti da li one
ine trougao i kakav. 1 , , 100 a b c s s Postoji 4 mogua izlaza.
I kriterijum:
U ovoj varijanti kreemo od rezultata (pokrijemo sve izlaze). Kriterijum za formiranje ovog test skupa
je rezultat. Broj kriterijuma nije ogranien, jedino treba voditi rauna da ti kriterijumi budu nezavisni.
redni br. a b c rezultat
1 9 2 3 nije trougao
2 20 20 20 jednakostranini
3 70 50 50 jednakokraki
4 6 7 8 raznostrani
55
II kriterijum:
Obavlja se analizom ulaza i izlaza, odnosno definiemo relacije koje se mogu uspostaviti izmeu
komponenata trojke (a,b,c), a imajui u vidu mogue izlaze.
1
2
3
4
5
{( , , ) | }
{( , , ) | }
{( , , ) | }
{( , , ) | }
{( , , ) | }
F a b c a b c
F a b c a b c
F a b c a b c
F a b c a c b
F a b c a b c
= = =
= = =
= = =
= = =
= = =
Testiranje sloenih programa
Program koji je modularno izveden, mora se i modularno testirati. Naravno, ako je svaki od modula
ispravan, to ne znai da e biti i ceo sistem. Posebno se mora testirati razmena podataka meu
modulima, koja je izuzetno podlona grekama.
Program se nikada ne testira kao celina, jer je postupak izuzetno komplikovan. Takoe, ako neka od
destruktivnih metoda ustanovi greku, nju je prilino teko locirati.
Osnovi problem kod testiranja sloenih programskih sistema je redosled testiranja pojedinih modula.
Pri tom, za testiranje svakog modula, potrebno je imati na raspolaganju:
1. modul (module) iz kojih se poziva testirani modul
2. modul (module) koje testirani modul poziva
Posmatrajmo program ija je modularnost prikazana na sledeem dijagramu:
Primer modularnog programa
Da bismo testirali modul A, moramo imati testirane module P, D i E. Za testiranje P potrebni su nam
testirani A, B i C. Iz ovoga izgleda da program treba testirati kao celinu, to naravno ne treba raditi.
Reenje je pisanje pseudomodula (zamena za module), koji oponaaju rad stvarnih modula. Na
primer, pseudomodul P za testiranje modula A (P
A
) razlikuje se od pseudomodula P za testiranje
modula B (P
B
). P
A
ima maskirane pozive za B i C, a P
B
za A i C.
56
Pseudomoduli moraju biti jednostavni (kako bi se izbegle eventualne greke u pseudomodulu) i
moraju verno oponaati rad odgovarajuih modula u delu koji je relevantan za testiranje.
Za testiranje sistema sa slike, potrebno je dopisati 14 pseudomodula, i to:
Postupak se moe pojednostaviti primenom inkrementiranog testiranja. Ove metode koriste
injenicu da ve testiran modul moe pod odreenim uslovima da bude iskorien za testiranje njemu
nadreenih i podreenih modula.
Postoje dve metode inkrementiranog testiranja:
- inkrementirano testiranje sa vrha ka dnu testiranje poinje od glavnog modula i izvodi se u
redosledu od nadreenih modula ka podreenim
- inkrementirano testiranje sa dna ka vrhu testiranje poinje od modula najnieg nivoa i
sprovodi se u redosledu od podreenih ka nadreenim modulima.
Za testiranje sistema sa slike, testiranje s vrha ka dnu izgledalo bi na sledei nain:
za testiranje P, potrebne su zamene A
P
, B
P
i C
P
za testiranje A, potreban je modul P, zamene B
P
i C
P
i zamene D
A
i E
A
za testiranje B, potreban je modul P i zamena A
P
i C
P
za testiranje C, potreban je modul P, zamene A
P
i B
P
i zamene F
C
i G
C
za testiranje D, potreban je modul A i zamena E
A
za testiranje E, potreban je modul A i zamena D
A
za testiranje F, potreban je modul C i zamena G
C
za testiranje G, potreban je modul C i zamena F
C
Prednosti metode testiranja s vrha ka dnu su u tome to se u ranim fazama raspolae skeletom
programa, to moe da poslui u demonstracione svrhe i to to se tokom testiranja sve vreme ima uvid
u globalno ponaanje programa. Glavni nedostatak je to je izrada zamena za nadreene (zbog
postojanja maskiranih poziva drugih modula) tea od izrade zamena za podreene.
za testiranje P, potrebne su zamene A
P
, B
P
i C
P
za testiranje A, potrebne su zamene P
A
, D
A
i E
A
za testiranje B, potrebna je zamena P
B
za testiranje C, potrebne su zamene P
C
, F
C
i G
C
za testiranje D, potrebna je zamena A
D
za testiranje E, potrebna je zamena A
E
za testiranje F, potrebna je zamena C
F
za testiranje G, potrebna je zamena C
G
57
Za testiranje sistema sa slike, testiranje s dna ka vrhu izgledalo bi na sledei nain:
za testiranje D, potreban je pseudomodul A
D
za testiranje E, potreban je pseudomodul A
E
za testiranje F, potreban je pseudomodul C
F
za testiranje G, potreban je pseudomodul C
G
za testiranje A, potrebni su moduli D i E i pseudomodul P
A
za testiranje B, potreban je pseudomodul P
B
za testiranje C, potrebni su moduli F i G P
C
za testiranje P, potrebni su moduli A, B i C
Prednost ovog naina testiranja je u tome to je interakcija izmeu modula i njegovog nadreenog
pseudomodula relativno jednostavna, naroito zato to je broj nadreenih obino 1. Nedostatak metode
lei u injenici da se programski sistem kao celina pojavljuje tek na kraju testiranja.