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 izracunavanje 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šcenjem Hornerovog algoritma za izracunavanje vrednostipolinoma p(x) izracunajmo 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 ∗ Bkj
END . . . ;
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Rekurzivne funkcije
Ponekad, kada je funkciju teško definisati direktno, u smislupromenljivih, poželjno je ili cak neophodno da koristimorekurziju. Rekurzija je metoda koja radi na osnovu principamatematicke indukcije. Naime, ako(i) funkciju definišemo za datu pocetnu vrednost a(obicno 0 ili 1),(ii) kada je funkcija definisana za vrednost k > a i možemo daje definišemo za k + 1,tada je funkciju moguce 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 lakouociti da li je definisana funkcija rekurzivna.)
OvervievElementarne strukture podataka
PolinomiRekurzivne funkcije i algoritmiRekurentne relacije
Rekurzivne funkcije(cont.)
PRIMERNeka je funkcija zadata na sledeci nacin:
f(0) = 2
f(k + 1) =f(k)!
(k + 1)!
Primetimo da je f(1) = 2, f(2) = 1, f(3) =1
6, što znaci da
f(4) nije definisano.
Zadatak 1.Napisati proceduru kojom se rekurzivno racna 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 slucaju, procedura Factorial(n) poziva samu sebe, štoje dozvoljeno u vecini 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, cuvajuci 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 izracuna Factorial(0). To omogucava nastavljanjeprocedure Factorial(1), koja se izvršava i, za uzvrat,omogucava racunanje vrednosti Factorial(2). Proces sezavršava izracunavanjem vrednosti Factorial(n).
Zadatak 2.Fibonacijev niz je jedna od funkcija koje se obicno definišurekurzivno. Prvi i drugi element niza jednaki su 1, dok svakisledeci predstavlja sumu prethodna dva clana niza. Napisatiproceduru za racunanje n Fibonacijevih 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 narocito efikasna, jer se u k-tom korakuizracunava Fibonaci(k-1) i drugi put Fibonaci(k-2), cija sevrednost izracunavala 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!).
Znacaj
(1) Cat(n)– Broj nacina da se konveksni (n+2)-strani poligonisece na trouglove povezivanjem temena poligona (n-1)-omlinijom koje se ne seku.(2) Cat(n)– Broj nacina da se n zagrada ubaci u izraza1a2 . . . anan+1.
Definisacemo 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 razlicitevelicine i u pocetku su poredjani na jednom od štapova odnajveceg do najmanjeg. Cilj je da se svi diskovi prebace nadrugi štap u istom redosledu, jedan po jedan, pri cemu veci disknikad ne sme da se poredja iznad manjeg.
Algoritam cemo 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, najveci nanezauzeti štap, a zatim onih pet prebacujemo sa srednjegštapa na najveci 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 pocinjemo 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.