19

Rekurentne relacije - nasport.pmf.ni.ac.rs

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Rekurentne relacije - nasport.pmf.ni.ac.rs
Page 2: Rekurentne relacije - nasport.pmf.ni.ac.rs
Page 3: Rekurentne relacije - nasport.pmf.ni.ac.rs

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);

Page 4: Rekurentne relacije - nasport.pmf.ni.ac.rs

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 · · · ;

Page 5: Rekurentne relacije - nasport.pmf.ni.ac.rs

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;

Page 6: Rekurentne relacije - nasport.pmf.ni.ac.rs

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 · · · ;

Page 7: Rekurentne relacije - nasport.pmf.ni.ac.rs

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

Page 8: Rekurentne relacije - nasport.pmf.ni.ac.rs

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;

Page 9: Rekurentne relacije - nasport.pmf.ni.ac.rs

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 . . . ;

Page 10: Rekurentne relacije - nasport.pmf.ni.ac.rs

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.)

Page 11: Rekurentne relacije - nasport.pmf.ni.ac.rs

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!.

Page 12: Rekurentne relacije - nasport.pmf.ni.ac.rs

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).

Page 13: Rekurentne relacije - nasport.pmf.ni.ac.rs

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.

Page 14: Rekurentne relacije - nasport.pmf.ni.ac.rs

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.

Page 15: Rekurentne relacije - nasport.pmf.ni.ac.rs

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):

Page 16: Rekurentne relacije - nasport.pmf.ni.ac.rs

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)

Page 17: Rekurentne relacije - nasport.pmf.ni.ac.rs

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.

Page 18: Rekurentne relacije - nasport.pmf.ni.ac.rs

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.

Page 19: Rekurentne relacije - nasport.pmf.ni.ac.rs

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.