30

Rekurentne relacije · 2014. 10. 22. · Matrice PRIMER Napisati procedure za množenje matrice A = [Aij] skalarom a i ... Polinomi Rekurzivne funkcije i algoritmi Rekurentne relacije

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

  • 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