Sei sulla pagina 1di 3

Vargu i Fibonacci-t

Llogaritja e termit t
e n-t
e t
e vargut t
e Fibonacci-t
Vargu i Fibonacci-t eshte nje varg numerik termat e te cilit jane:
nb(1) = 1, nb(2) = 1 dhe nb(i) = nb(i 1) + nb(i 2) per i > 2.
Detyr
e 1 Te shkruhet nje algoritem Nb Fibo i cili llogarit termin e n-te te vargut te Fibonacci-t, ku n
percillet si parameter.
Shfrytezoni per kete dy variabla a dhe b me te inicializuara me 1, te cilat permbajne termin e pare,
perkatesisht te dyte te Fibonacci-t. Cilat operacione themelore te ndarjes se vleres lejojne kalimin
nga [a = nb(1), b = nb(2)] te [a = nb(2), b = nb(3)]?
Duke zbatuat keto operacione disa here, brenda nje cikli P
er, eshte e mundur te kalohet nga [a =
nb(i), b = nb(i + 1)] te [a = nb(i + 1), b = nb(i + 2)]. Nxjerrni algoritmnin nga ky fakt.
Koment:
Operacionet elementare:
tmp=b, b=a+b,
a=tmp, ekuivalente me b=a+b, a=b-a.

rin e (n 1)-te te Fibonacci-t dhe b permban


numrin e n-te te Fibonacci-t.

Invariante per i = 0: a permban numrin e


pare te Fibonacci-t dhe b permbant numrin e
dyte te Fibonacci-t.

Algorit
em: Nb Fibo
Input: n
Output: f b(n)
Fillo
a=1
b=1
P
er i = 1, . . . , n 2 kryej
b=a+b
a=ba
retourner b
P
erfundo

Invariante per i = 1: a permban numrin e


dyte te Fibonacci-t dhe b permban numrin e
trete te Fibonacci-t.
Invariante per i = n: a permban numrin e
(n + 1)-te te Fibonacci-t dhe b permban numrin e (n + 2)-te te Fibonacci-t.
Invariante per i = n 2: a permban num

Detyr
e 2 Duke qene se perkufizimi i nje numri te Fibonacci-t eshte rekursiv, mund te shkruhet lehte algoritem rekursiv Nb Fibo Rec i cili merr per parameter nje numer te plote n dhe kthen numrin e bte te Fibonacci-t. Ku algoritem implementon drejtperdrejt perkufizimin:
Ne qofte se n 2, kthe 1,
Ne qofte se n > 2, llogarit pastaj kthe shumen e numrave te (n 2)-te dhe te (n 1) te Fibonacci-t.

Koment:

Algorit
em: Nb Fibo Rec
Input: n
Output: f b(n)
Fillo
N
e qoft
e se n 2 at
eher
ex=1
p
erndryshe
x = N b F ibo Rec(n 1) + N b F ibo Rec(n 2)
Kthe x
P
erfundo

Nb Fibonacci Rec(4)

Nb Fibonacci Rec(3)

Nb Fibonacci Rec(2)
Nb Fibonacci Rec(1)
kthen 2
kthen 1

Nb Fibonacci Rec(2)
kthen 3
1

kthen 1
kthen 1


Detyr
e 3 Cili nga dy algoritmat Nb Fibo dhe Nb Fibo Rec duket te jete me efikas? Vertetoni duke
llogaritur kompleksitetin e tyre.
Koment:
Kompleksiteti i Nb Fibo: O(n)
Kompleksiteti i Nb Fibo Rec: O(2n )
Nb Fibo me efikas sesa Nb Fibo Rec.

Kompleksitetit

=
=
=
=

O(1) numri i invokimeve me k = 2 ose k = 1


O(1) (2 2 2 2 2) (n here)
O(1) 2n
O(2n )


Llogaritja e n numrave t
e par
e t
e Fibonacci-t
Detyr
e 4 Te shkruhet nje algoritem i cili nuk kthen asgje, por i cili afishon n termat e pare te vargut
te Fibonacci-t. Fillimisht shkruani nje algoritem Vargu Fibo 1 i cili eshte nje versio i modifikuar i Nb Fibo
me instruksionet shtese per afishim.

Koment:

Algorit
em: Vargu Fibo 1
Input: un entier n
R
esultat: rien
Roli: afishon n numrat e pare te Fibonacci-t
Fillo
a=1
N
e qoft
e se n > 0 at
eher
e afisho(a)
b=1
N
e qoft
e se n > 1 at
eher
e afisho(b)
P
er i = 3, . . . , n kryej
b=a+b
a=ba
afisho(b)
P
erfundo


Detyr
e 5 Shkruani nje version te dyte Vargu Fibo 2 te algoritmit i cili ne cdo iteracion i te nje cikli
P
er llogarit numrin e i te te Fibonacci-t duke invokuar Nb Fibo, pastaj e afishon.
2

Koment:
Algorit
em: Vargu Fibo 2
Input: un entier n
R
esultat: rien
Roli: afishon n numrat e pare te Fibonacci-t
Fillo
P
er i = 1, . . . , n kryej
x = N b F ibo(i)
afisho(x)
P
erfundo

Detyr
e 6 Cili nga dy algoritmat Vargu Fibo 1 dhe Vargu Fibo 2 duket te jete me efikas? Vertetoni duke
llogaritur kompleksitetin e tyre.
Koment:
Kompleksiteti i Nb Fibo: O(n). Nje cikel P
er shkon deri ne n, dhe perbehet nga instruksione
elementare.
Kompleksiteti i Vargu Fibo 1 : O(n). Algoritmi i njejte sikur Nb Fibo
Kompleksiteti i Vargu Fibo 2 : O(n2 ). Nje cikel P
er shkon deri ne n, dhe perbehet nga nje instruksion me kompleksitet O(n) (invokimi i funksionit Nb Fibo): per n 1:
1 + ...+ n =

n (n + 1)
n2

= O(n2 ).
2
2

Vargu Fibo 1 eshte me efikas sesa Suite Fibo 2