Professional Documents
Culture Documents
Raport: Analiza Algoritmilor
Raport: Analiza Algoritmilor
Raport: Analiza Algoritmilor
Raport
Lucrare de laborator Nr.1
la Analiza i proiectarea algoritmelor
Tema: Analiza
algoritmilor
A efectuat:
st. gr. SI-151
Cucu Dumitru
A verificat:
Bagrin Veronica
Chiinu 2016
Sarcina lucrarea nr.1: Numerele lui Fibonacci
Scopul lucrrii:
1.
2.
3.
Listingul programului:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
long long int nr_i=0;
long long int fib1(int n) {
int i;
if (n<2){
nr_i++;
return n;
}
else{
nr_i++;
return
}
long long int fib2(int n) {
int k;
long long int i=1, j=0;
for(k=0; k<n; k++){
j=i+j;nr_i++;
i=j-i;nr_i++;
}
return j;
}
long long int fib3(int n) {
long long int i = 1, j = 0, k = 0, h = 1, t;
while (n > 0) {
if (n%2== 1) {
t = j*h;nr_i++;
j = (i*h) + (j*k)+ t;nr_i++;
i = (i*k) + t;nr_i++;
}
t = h*h;nr_i++;
h = (2 * k*h) + t;nr_i++;
k = (k * k)+ t;nr_i++;
n = n / 2;nr_i++;
}
return j;
}
long long int fib4(int n)
{
if(n == 1 || n == 2)
{
nr_i++; return n;
}
else {nr_i++;
return 1.618*fib4(n-1);
}
}
int main()
{
int n, nm;
long long int t,j;
float times;
clock_t t_start, t_stop;
printf("Introduceti numarul de termeni ai seriei Fibonacci pe care doriti:");
scanf("%d", &n);
while (1)
{
system("cls");
puts("\tMeniu\n");
puts("1.Fib1");
puts("2.Fib2");
puts("3.Fib3");
puts("4.Fib4");
puts("0.EXIT");
scanf("%d", &nm);
switch (nm)
{
case 1:
system("cls");
t_start = clock();
nr_i=0;
t = fib1(n);
t_stop = clock();
times = ((float)(t_stop - t_start))*1000 / CLOCKS_PER_SEC;
printf("Fib1=%lld", t);
printf("\nTimp de executie: %f milisec.\n", times);
printf ("Numarul de iteratii =%lld \n",nr_i);
system("pause");
break;
case 2:
system("cls");
t_start = clock();
nr_i=0;
j=fib2(n);
t_stop = clock();
times = ((float)(t_stop - t_start))* 1000000LL / CLOCKS_PER_SEC;
printf("Fib2=%lld",j);
printf("\nTimp de executie: %f milisec.\n", times);
printf ("Numarul de iteratii =%lld \n",nr_i);
system("pause");
break;
case 3:
system("cls");
t_start = clock();
nr_i=0;
j = fib3(n);
t_stop = clock();
times = ((float)(t_stop - t_start))* 1000 / CLOCKS_PER_SEC;
printf("Fib3=%lld", j);
printf("\nTimp de executie: %f milisec.\n", times);
printf ("Numarul de iteratii =%lld \n",nr_i);
system("pause");
break;
case 4:
system("cls");
t_start = clock();
nr_i=0;
j = fib4(n);
t_stop = clock();
times = ((float)(t_stop - t_start))* 1000 / CLOCKS_PER_SEC;
printf("Fib4=%lld",j);
printf("\nTimp de executie: %f milisec.\n", times);
printf ("Numarul de iteratii =%lld \n",nr_i);
system("pause");
break;
case 0:
printf("Pentru a esi apasati Enter");
system("pause");
return 0;
default:
puts("Ati ales o varianta incorecta");
system("pause");
break;
}
}
}
Rezultatele obinute:
Dup timp:
T (s)
f1(n)
f2(n)
f3(n)
f4(n)
fib1(recursia)
fib2(for)
fib3(while)
fib4(rata de aur)
10
20
30
40
0
0
0
0
0,001
0
0
0
0,009
0
0
0
1,121
0
0
0
50
135,2
89
0
0
0
Fib1(recursia)
Fib2(for)
Fib3(while)
Fib4(rata de aur)
0
0
10
20
30
1.12
0
0.01
0
30
40
fib2(for)
50
fib3(while)
fib1(recursia)
fib1(recursia)
fib2(for)
fib3(while)
fib4(rata de aur)
10
20
177
20
22
9
21891
40
26
19
30
26925
37
60
32
29
40
50
3311602 125862690
81 25
80
100
30
33
39
49
12586269025
177
20
22
9
10
331160281
80
30
39
2692537
60
32
29
21891
40
26
19
20
30
40
fib1(recursia)
fib2(for)
fib3(while)
fib4(rata de aur)
100
33
49
50
10
26
20
Fib2(for)
32
30
33
30
40
50
Fib3(while)
Concluzii:
n urma efecturii acestei lucrari de laborator am fcut cunotin cu Numerele lui
Fibonacci. Pentru afiarea unui numr al acestui ir am folosit 4 metode:
1. recursia
2. for
3.while
4.rata de aur
Dup obinerea rezultatelor , am fcut comparaii ntre ele cu ajutorul unor grafice.
Dup rezultatele primului tabel care arat timpul msurat n clockuri, am facut grafice pe intervale [1;20] si [30;50] . In primul ca si in al doilea interval algoritmul
fib1(recursia) are nevoie de mai mult timp pentru a afisa rezultatul, iar fib2 si fib 3
sint mai eficiente deoarece afiseaza rezultatul imediat, acesta observam si in graficile
facute. Calcule facute dupa numarul de iteratii arata tot aceleasi rezultate .
Pentru fib1 (recursia) numarul de interatii creste foarte rapid , iar pentru fib2 si fib3
lent . In graficul 3 am comparat fib2(for) si fib3(while) si observam ca fib2 face mai
multe iteratii ca fib3, respectiv fib3 este mai eficient.