Sunteți pe pagina 1din 5

Ministerul Educației, Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei


Facultatea Calculatoare, Informatică și Microelectronică

Raport la
Lucrarea de laborator Nr. 1
Disciplina: Algoritmi si proiectarea algoritmilor

Tema: ” Analiza algoritmilor (Timpul de execuţie al


algoritmilor)”

Au efectuat: Botnaru Alexandru

A verificat: Mihai Gaidau

Chișinău – 2020
Scopul lucrării: 1. Analiza empirică a algoritmilor

SARCINA DE BAZĂ:
1. Implementați algoritmii propuși într-un limbaj de programare(JAVA)
public class Main {

static int c1=0,c2=0,c3=0;

public static void main(String[] args) {


//sirul lui Fibonacci (3 metode)
int n=46;

System.out.println("fib1: " + fib1(n) +" Costul fib1: " + c1 );


System.out.println("fib2: " + fib2(n) +" Costul fib2: " + c2 );
System.out.println("fib3: " + fib3(n) +" Costul fib3: " + c3 );

static int fib1(int n) {


if (n < 2) {
c1+=2;
return n;
}
else{
c1+=5;
return fib1(n - 1) + fib1(n - 2);
}
}

static int fib2(int n) {


int i = 1, j = 0, k;
c2+=2;
for (k = 1; k <= n; k++) {
j = i + j;
i = j - i;
c2+=8;
}
c2+=1;
return j;
}

static int fib3(int n) {


int i = 1, j = 0, k = 0, h = 1;
c3+=4;

while (n > 0) {
int t;
c3+=2;
if (n % 2 == 1) {
t = j * h;
j = i * h + j * k + t;
i = i * k + t;
c3+=12;
}
t = h * h;
h = 2 * k * h + t;
k = k * k + t;
n = n / 2;
c3+=11;
}
c3+=1;
return j;
}
}

2.Stabiliți proprietăţile datelor de intrare în raport cu care se face analiza


Datele de intrare sunt niste numere intregi (4 biti), cuprinse in intervalul[0...50]
3.Alegeți metrica pentru compararea algoritmilor
Numarul de operatii elementare efectuate
4.Efectuaţi analiza empirică a algoritmilor propuşi
Pentru n=0:
fib1: 0 Costul fib1: 2
fib2: 0 Costul fib2: 3
fib3: 0 Costul fib3: 5
Pentru n=5:
fib1: 5 Costul fib1: 51
fib2: 5 Costul fib2: 43
fib3: 5 Costul fib3: 68
Pentru n=10:
fib1: 55 Costul fib1: 618
fib2: 55 Costul fib2: 83
fib3: 55 Costul fib3: 81
Pentru n=20:
fib1: 6765 Costul fib1: 76617
fib2: 6765 Costul fib2: 163
fib3: 6765 Costul fib3: 94
Pentru n=30:
fib1: 832040 Costul fib1: 9423878
fib2: 832040 Costul fib2: 243
fib3: 832040 Costul fib3: 118
Pentru n=46:
fib1: 1836311903 Costul fib1: -676330974(eronat)
fib2: 1836311903 Costul fib2: 371
fib3: 1836311903 Costul fib3: 131
Pentru n=50:
fib2: -298632863 Costul fib2: 403
fib3: -298632863 Costul fib3: 119
Dupa n=46 algoritmele ne ofera rezultate gresite.
Observam ca pentru valori mici ale lui n (n<5) primul algoritm, care foloseste
recursia este cel mai eficient, insa dupa aceste interval eficienta lui scade
dramatic ,avind un timp de executie exponential.In intervalul [5...10] cel mai
eficient este algoritmul al 2-lea, realizat prin iteratie,care are un timp de executie
liniar, insa pentru valori mai mari de 10 cel mai eficient devine al 3-lea algoritm
,care are si o implementare mai complexa.

Complexitatea Fib1este O(2^n).

Complexitatea Fib2 este de O(n).

Complexitatea Fib3 este de O(log 2


5. Faceți o prezentare grafică a datelor obținute

700

600

500
Numarul de operatii

400

300

200

100

0
n=0 n=5 n=10 n=20 n=30 n=46 n=50

Termenul sirului

Fib1 Fib2 Fib3

Concluzie:
Scopul acestei lucrari de laborator a fost de a efectua analiza
empirica a 3 algoritmi destinati rezolvarii aceleiasi probleme(Sirul lui
Fibonacci).Pentru aceasta a fost nevoie sa parcurgem 7 pasi esentiali,
descrisi mai sus.In urma acestei analize am ajuns la concluzia ca cel mai
optim algoritm este al 3-lea, insa pentru valori mai mici ale lui n pot fi
folositi si primii doi algoritmi, care au o eficienta putin mai buna pe un
anumit interval.In urma lucrarii date am inteles ce reprezinta si cum se
efectueaza analiza empirica, dar si am facut cunostinta cu unele notiuni
noi ca: complexitate de timp, analiza teoretica, timp mediu de executie

S-ar putea să vă placă și