OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Polinomi
Zadatak 1.Napisati proceduru za deklarisanje (definisanje) proizvoda dvapolinoma.
PROCEDURE puta(a, b : polinom)
VAR pr : polinom;
VAR ok : Boolean;
VAR i, j : CARDINAL;
BEGIN
ok := TRUE;
MakeNull(pr);
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Polinomi(cont.)
IF (a[st] 6= −1) & (b[st] 6= −1) THEN
i := a[st] + b[st];
if i > MaxStep then
ok := FALSE
ELSE
WITH pr DO
st := i
for i := 0 to a[st] do
for j := 0 to b[st] do
pr[koef [i + j]] = pr[koef [i + j]] + a[koef [i]] ∗ b[koef [j]]
END · · · ;
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Polinomi(cont.)
Zadatak 2.Napisati proceduru za izračunavanje proizvoda dva polinoma.
PROCEDURE puta(a, b : polinom)
VAR pr : polinom;
VAR ok : Boolean;
VAR i, j, k : CARDINAL;
BEGIN
ok := TRUE;
MakeNull(pr);
k := 0;
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Polinomi(cont.)
pr[koef [k]] := a[koef [k]] ∗ b[koef [k]];
IF (a[st] 6= −1) & (b[st] 6= −1) THEN
k := a[st] + b[st];
if k > MaxStep then
ok := FALSE
ELSE
WITH pr DO
for j := 1 to a[st] + b[st] do
pr[koef [j]] := 0
for i := 0 to j do
pr[koef [j]] = pr[koef [j]] + a[koef [i]] ∗ b[koef [j − i]]
END · · · ;
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Polinomi(cont.)
Zadatak 3.Korišćenjem Hornerovog algoritma za izračunavanje vrednostipolinoma p(x) izračunajmo p(a).
PROCEDURE Horner p(a)(p : polinom, a : REAL)
VAR i : CARDINAL;
VAR S : REAL;
BEGIN
S := p[koef [n]];
for i := 1 to n do;
S := aS + p[koef [n − i]]
END
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Matrice
PRIMERNapisati procedure za množenje matrice A = [Aij] skalarom a iza sabiranje dveju matrica A = [Aij] i B = [Bij] istih dimenzija.
Zadatak 1.Napisati procedure za množenje dveju matrica A = [Aij],A ∈ M(m, p) i B = [Bij], B ∈ M(p, n).
PROCEDURE putaMatrix(A, B : matrica)
VAR C : matrica;
VAR i, j, p, m, n : CARDINAL;
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Matrice(cont.)
BEGIN
for i := 1 to m do
for j := 1 to n do
Cij := 0
for k := 1 to p do
Cij := Cij + Aik ∗ BkjEND . . . ;
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Rekurzivne funkcije
Ponekad, kada je funkciju teško definisati direktno, u smislupromenljivih, poželjno je ili čak neophodno da koristimorekurziju. Rekurzija je metoda koja radi na osnovu principamatematičke indukcije. Naime, ako(i) funkciju definišemo za datu početnu vrednost a(obično 0 ili 1),(ii) kada je funkcija definisana za vrednost k > a i možemo daje definišemo za k + 1,tada je funkciju moguće definisati za sve cele brojeve vece oda. Ovako definisana funkcija je rekurzivna.Dakle, ovaj oblik rekurzivne defionicije koristi se za funkcije kojesu definisane na skupu pozitivnih celih brojeva. (Nije uvak lakouočiti da li je definisana funkcija rekurzivna.)
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Rekurzivne funkcije(cont.)
PRIMERNeka je funkcija zadata na sledeći način:
f(0) = 2
f(k + 1) =f(k)!
(k + 1)!
Primetimo da je f(1) = 2, f(2) = 1, f(3) =1
6, što znači da
f(4) nije definisano.
Zadatak 1.Napisati proceduru kojom se rekurzivno račna vrednost n!.
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Rekurzivne funkcije(cont.)
PROCEDURE Factorial(n)
VAR n : CARDINAL;
if n = 0 then Factorial(n) = 1;
if n > 0 then Factorial(n) = n ∗ Factorial(n − 1)
END
U ovom slučaju, procedura Factorial(n) poziva samu sebe, štoje dozvoljeno u većini programskih jezika. Kada se ovaprocedura pozove za n > 1, ona nastavlja da se izvršava svedok ne stigne do Factorial(n-1). Tada procedura zaustavljaprogram, čuvajući informacije na steku, dok program ne možeda nastavi sa radom i poziva Factorial(n-1).
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Rekurzivne funkcije(cont.)
Ako je n− 1 > 1 procedura Factorial(n-1) se izvršava sve dokprogram ne stigne do Factorial(n-2). Tada procedura zaustavljaprogram i poziva Factorial(n-2). Proces se nastavlja sve dok sene dostigne i izračuna Factorial(0). To omogućava nastavljanjeprocedure Factorial(1), koja se izvršava i, za uzvrat,omogućava računanje vrednosti Factorial(2). Proces sezavršava izračunavanjem vrednosti Factorial(n).
Zadatak 2.Fibonačijev niz je jedna od funkcija koje se obično definišurekurzivno. Prvi i drugi element niza jednaki su 1, dok svakisledeći predstavlja sumu prethodna dva člana niza. Napisatiproceduru za računanje n Fibonačijevih brojeva.
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Rekurzivne funkcije(cont.)
PROCEDURE Fibonaci(n)
VAR n : CARDINAL;
if n = 1 then Fibonaci(n) = 1;
if n = 2 then Fibonaci(n) = 1;
if n > 2 then Fibonaci(n) = Fibonaci(n − 1) + Fibonaci(n − 2)
END
Napomena
Ova procedura nije naročito efikasna, jer se u k-tom korakuizračunava Fibonaci(k-1) i drugi put Fibonaci(k-2), čija sevrednost izračunavala i u k− 1-om koraku.
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Rekurzivne funkcije(cont.)
Zadatak 2.Niz Katalanovih brojeva je dat formulom:
Cat(n) =(2n)!
(n + 1)!(n!).
Značaj
(1) Cat(n)– Broj načina da se konveksni (n+2)-strani poligoniseče na trouglove povezivanjem temena poligona (n-1)-omlinijom koje se ne seku.(2) Cat(n)– Broj načina da se n zagrada ubaci u izraza1a2 . . . anan+1.
Definisaćemo rekurzivno vrednost funkcije Cat(n):
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Rekurzivne funkcije(cont.)
Cat(0) = 1
Cat(n + 1) =(2n + 2)!
(n + 2)!(n + 1)!=
(2n + 2)(2n + 1)(2n)!
(n + 2)(n + 1)!(n + 1)(n!)
=2(n + 1)(2n + 1)(2n)!
(n + 2)(n + 1)!(n + 1)(n!)
=2(2n + 1)
(n + 2)·
(2n)!
(n + 1)!(n!)
=2(2n + 1)
(n + 2)· Cat(n)
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Rekurzivni algoritam
Razmotrimo sada rekurzivni algoritam koji ne predstavljarekurzivnu funkciju:
Zadatak 1.Drevni mit Hanojske kule: Ona se sastoji od tri štapa i skupadiskova koji se na njima ne nalaze. Svi diskovi su različiteveličine i u početku su poredjani na jednom od štapova odnajvećeg do najmanjeg. Cilj je da se svi diskovi prebace nadrugi štap u istom redosledu, jedan po jedan, pri čemu veći disknikad ne sme da se poredja iznad manjeg.
Algoritam ćemo rekurzivno formulisati, jer ako, na primer, naštapu stoji šest diskova i ako znamo kako da pomerimo prvihpet, možemo gornjih pet prebaciti na srednji štap, najveći nanezauzeti štap, a zatim onih pet prebacujemo sa srednjegštapa na najveći disk.
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Rekurzivni algoritam(cont.)
PROCEDURE Hanoi(A, C, n)
VAR A, B, C, n : CARDINAL;
if n = 1 then "Pomeri jedan disk sa štapa A na C";
B = 6− A− C;
if n > 1 then
Hanoi(A, C, 1) "pomeranje preostalog diska sa štapa A na C"
Hanoi(B, C, n− 1) "pomeranje gornjih n-1 diskova sa B na C"
END
Napomena
Za n = 3 počinjemo sa Hanoi(1,3,3) (A=1, B=2, C=3). U okviruovog poziva najpre pozivamo Hanoi(1,2,2) da bi gornja dvadiska pomerili na štap 2.
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Rekurzivni algoritam(cont.)
Napomena
U okviru ovog poziva je A=1, C=2, B=3 i u okviru ovog pozivanajpre pozivamo Hanoi(1,3,1) kada gornji disk prebacujemo saštapa 1 na 3. Zatim pozivamo Hanoi(1,2,1) da bi drugi diskpremestili na štap 2. Zatim, Hanoi(3,2,1) prebacuje gornji disksa 2 na disk koji je na štapu 3, pa Hanoi(1,3,1) pomera donjidisk sa 1 na 3.
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Homogene linearne rekurentne relacije
Pod rešavanjem rekurentne jednačine podrazumevamoprevodjenje funkcije a(n), odnosno an, definisane nadnenegativnim celim brojevima, iz oblika u kome je opisanarekurzivnom formulom u zatvoren oblik, gde je funkcija anizražena izrazom koji direktno zavisi od n.U opštem slučaju, rešavanje proizvoljne rekurentne relacije nijejednostavan problem, a često je praktično neizvodljivo.Definišimo klasu linearnih rekurentnih relacija:
Definicija 1.
Rekurentna relacija oblika
an = c1(n)an−1+c2(n)an−2+c3(n)an−3+· · ·+cp(n)an−p+f(n),
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Homogene linearne rekurentne relacije(cont.)
Definicija 1.
cp(n) 6= 0, naziva se linearna rekurentna relacija reda p.
Definicija 2.
Linearna rekurentna relacija oblika
an = c1(n)an−1 + c2(n)an−2 + c3(n)an−3 + · · ·+ cp(n)an−p,
cp(n) 6= 0, naziva se homogena linearna rekurentna relacijareda p.
Naziv potiče odatle što se svako ai javlja sa eksponentom 1.
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Homogene linearne rekurentne relacije(cont.)
Definicija 3.
Linearna rekurentna relacija oblika
an = c1an−1 + c2an−2 + c3an−3 + · · ·+ cpan−p + f(n), cp 6= 0
naziva se linearna rekurentna relacija reda p sa konstantnimkoeficijentima.
Definicija 4.
Linearna rekurentna relacija oblika
an = c1an−1 + c2an−2 + c3an−3 + · · ·+ cpan−p, cp 6= 0
naziva se homogena linearna rekurentna relacija sakonstantnim koeficijentima reda p.
OvervievElementarne strukture podataka
Stek
Lista
Upoznajmo se, sada, sa reprezentacijom dinamičkih skupovajednostavnim strukturama koje koriste pokazivače (pointere).
Lista–apstrakcijalinearnog uredjenja
Najvažniji apstraktni tipovi podataka su oni kod kojih elementidomena imaju neku vrstu prirodnog uredjenja. Ovde će biti rečio apstraktnim tipovima podataka koji su zasnovani nalinearnom uredjenju.
Pojam linearnog uredjenja podrazumeva da je dat konačanskup elemenata S = {a1, a2, . . . , an}, pri čemu se popsmatrakonačan, uredjen niz elemenata-lista L = {b0, b1, . . . , bk},dužine k ∈ N, pri čemu bi ∈ S, za i = 0, k i b0 < b1 < · · · < bk.
OvervievElementarne strukture podataka
Stek
Lista(cont.)
Napomena
Uredjenje u listi L ne zavisi od uredjenja elemenata u skupu S.
Lista može da se definiše rekurentno na sledeći način:
Definicija
(i) Prazna lista je lista;(ii)Lista se sastoji od prvog elementa koji se naziva glava liste iliste preostalih elemenata koja se naziva rep;(iii) Svaka lista se dobija konačnom primenom pravila (i) i (ii).
OvervievElementarne strukture podataka
Stek
Stek i kju (queue)
Stek i kju su dinamički sistemi iz kojih se elementi pomerajuskupovnom operacijom brisanja DELETE.U steku je element koji se briše iz liste onaj koji je poslednji,najskorije upisan, što znači da je stek implementacija LAST-IN,FRST-OUT ili LIFO.Iz queuea se uvek briše element koji je najduže u listi. To značida je queue implementacija FIRST-IN, FRST-OUT ili FIFO.Postoji nekoliko efektivnih postupaka za implementaciju steka ikjua na računaru.Pokazaćemo kako se svaki od njih može implementiratiupotrebom običnih nizova.
OvervievElementarne strukture podataka
Stek
Stek
INSERT operacija kojom se neki element ubacuje u stek jePUSH,a DELETE operacija kojom se neki element briše izsteka je POP.Stek od najviše n elemenata možemo inplementirati nizomS[1..n]. Ovom nizu pridružujemo atribut top[S] koji označavaposlednji unet element. Stek sadrži elemente S[1..top[S]], gdeje S[1] element sa dna steka i S[top[S]] element sa vrha.Kada je top[S] = 0 stek je prazan.Ako brišemo elemente iz praznog steka, on će bitiUNDERFLOWS (ispod toka) što znači da se javlja greška.Ako top[S] prelazi n stek će biti OVERFLOWS (iznad toka).Stek operacije PUSH, POP i Stack-Empty mogu seimplementirati u nekoliko linija koda.
OvervievElementarne strukture podataka
Stek
Stek(cont.)
OvervievElementarne strukture podataka
Stek
Stek(cont.)
POP(S)
IF Stack − Empty(S) THEN
ERROR ”UNDERFLOW”
ELSE top[S]← top[S]− 1
RETURN S[top[S] + 1]
END
PolinomiPolinomiRekurzivne funkcijeRekurentne relacije
Elementarne strukture podatakaStek