Está en la página 1de 5

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei

Catedra: Automatica i Tehnologii Informaionale

RAPORT
Lucrare de laborator Nr.1
la Analiza si proiectarea Algoritmilor

A efectuat: st. gr. TI-143


Dulua Igor-Cristi

A verificat: Veronica Bagrin

Chisinau 2015
Tema:Analiza algoritmilor
Scopul lucrarii:
1. Analiza empirica a algoritmilor.
2. Analiza teoretica a algoritmilor.
3. Determinarea complexitatii temporale si asimptotice a algoritmilor.

Sarcina:
1. Efectuati analiza empirica a algoritmilor propusi.
2. Determinati relatia ce determina complexitatea temporala pentru acesti
algoritmi.
3. Determinati complexitatea asimptotica a algoritmilor.
4. Faceti o concluzie asupra lucrarii efectuate.

Algoritmul fib 1 (recursia)

Textul Programului
#include<iostream>
#include<string.h>
#include<conio.h>
using namespace std;
int n;

int f(int n)
{
if(n==0) return 0;
else if(n==1) return 1;
else return f(n-1)+f(n-2);
}

int main()
{
cout<<"Introduceri ordinul termenului cautat n=";cin>>n;
cout<<"Termenul de ordin "<<n<<" este: "<<f(n)<<endl;
}

Algoritmul fib 2 (for)

Textul Programului
#include<iostream>
#include<string.h>
#include<conio.h>

using namespace std;

int i,s,n;
int f(int n)
{if(n<2)
return n;
else

for(i=2;i<=n;i++)
{return f(n-1)+f(n-2);}
}

int main()
{
cout<<"Introduceti ordinul termenului cautat n=";cin>>n;
cout<<"Termenul de ordin "<<n<<" este: "<<f(n)<<endl;
}

Algoritmul fib3 (while)

Textul Programului
#include<iostream>
#include<string.h>
#include<conio.h>
using namespace std;

int f(int n)
{
int i=1,j=0,k=0,h=1,t;
while(n>2){
if(n%2){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;
}}}
int main()
{
cout<<"Introduceti ordinul termenului cautat n=";cin>>n;
cout<<"Termenul de ordin "<<n<<" este: "<<f(n)<<endl;
}

Analiza empirica a algoritmilor


Tabelul nr.1
t 1 2 4 8 10 20 30
f1(n) fib1 0 0 0 0 0 0 0,008
f2(n) fib2 0 0 0 0 0 0 0
f3(n) fib3 0 0 0 0 0 0 0
Diagrama de timp
0.009
0.008
0.007
0.006
0.005 fib1
0.004 fib2
0.003 fib3
0.002
0.001
0
1 2 4 8 10 20 30

In tabelul dat se observa ca incepind cu termenul 30 , timpul de executie la


algoritmul recursiv creste foarte rapid.
Tabelul nr.2
Iteratii 1 2 4 8 10 20 30
f1(n) fib1 1 3 9 67 177 21891 2692537
f2(n) fib2 1 2 4 8 10 20 30
f3(n) fib3 1 2 3 4 4 5 5

Diagrama de iteratii
3000000

2500000

2000000
fib1
1500000
fib2
1000000 fib3

500000

0
1 2 4 8 10 20 30

Din tabelul nr.2 observam ca nr. de iteratii la algoritmul recursiv creste


exponential.
Din graficele 1 si 2 rezulta ca algoritmul recursiv de gasire a n-lea numar
fibbonaci este foarte ineficient fata de ceilalati trei algoritmi.
Concluzie
In lucrarea de laborator nr.1 am avut de analizat algoritmul pentru calculul
irului lui Fibonacci prin 3 metode: recursie,for,si while.Dupa parerea mea cel
mai eficient algoritm din toate 3 este while(fib3).

También podría gustarte