Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrare de laborator Nr.1
Tema :Analiza algoritmilor
Chișinău 2015
Scopul lucrării:
1. Analiza teoretică a algoritmilor.
t n=c1 r n1 +c 2 r 2n
Concluzionăm că timpul algoritmului care determină șirul lui Fibonacci prin
metoda 1,crește în mod exponențial în funcție de n .
O altă metodă propusă a acestei probleme:
function fib2(n)
i 1; j 0
for k 1 to n do j i + j
ij-i
return j
Costul Numarul de
iteratii
C1 1
C2 1
C3 N
C4 N
C5 N
4 8 15 26 34
I algoritm 9 67 1973 392835 18454929
II algoritm 4 8 15 26 34
III algoritm 3 4 4 5 6
Comparăm cei 3 algoritmi printr-o diagrama
După numarul de iterații:
14
12
10
8 Alg I
Alg II
6 Alg III
Codul Sursa:
#include <iostream>
#include <stdlib.h>
#include <time.h>
int main()
int n;
finish = clock();
cout << "Timpul de executie pentru fib1 =" << ((double)finish - start) / CLOCKS_PER_SEC << endl;
start = clock();
finish = clock();
cout << "Timpul de executie pentru fib2 =" << ((double)finish - start) / CLOCKS_PER_SEC << endl;
start = clock();
finish = clock();
cout << "Timpul de executie pentru fib3 =" << ((double)finish - start) / CLOCKS_PER_SEC << endl;
system("pause");
c++;
if (n < 2)
return n;
else
long int i, j, k;
i = 1;
j = 0;
j = i + j;
i = j - i;
d++;
return j;
long int i, j, k, h, t;
i = 1; k = 0;
j = 0; h = 1;
while (n>0)
e++;
if (n % 2 != 0)
t = j*h;
j = i*h + j*k + t;
i = i*k + t;
t = h*h;
h = 2 * k*h + t;
k = k*k + t;
n = n / 2;
return j;
}
Concluzie:
În această lucrare am înțeles că toate cele 3 metode sunt eficace și au
rezultat bun. Pentru numerele mici prima metodă este cea mai bună,dar
pentru un număr mare nu este rentabil pentru că numarul de iteratii crește în
mod exponențial. Pentru numerele în intervalul [20 .. n] metoda a 3-a este cea
mai eficace avînd un număr de iteratii mic,de aceea această metodă o consider
ca fiind cea mai rezonabilă.
Consider că cînd se compară 3 algoritmi, cel având ordinul de creștere mai
mic este considerat a fi mai eficient. Am observat că analiza timpilor de
execuție pentru valori mici ale dimensiunii problemei nu permite diferențierea
dintre algoritmii eficienți și cei ineficienți . Diferențele dintre ordinele de
creștere devin din ce în ce mai semnificative pe măsura ce crește dimensiunea
problemei.
Efectuînd această lucrare de laborator am înțeles cît de eficiente sunt
pentru noi cunostințele căpătate în urma analizei algoritmelor. Aceasta ne
dezvoltă capacitățile noastre logice,matematice și de analiza. Aceste
cunoștințe ușor pot fi folosite pe viitor la elaborarea unui program mai dificil și
sigur la rezolvarea exemplelor matematice de un nivel mai înalt.