Sunteți pe pagina 1din 14

Universitatea Tehnică a Moldovei

Catedra Automatică și Tehnologii Informaționale

Disciplina Analiza și Proiectarea Algoritmilor

Raport

Lucrarea de laborator nr.1

A realizat student grupa TI-

A verificat Andrievschi-Bagrin Veronica

Chișinău 2018
Cuprins

Cuprins ................................................................................................................................................. 2
Scopul și obiectivele lucrării ................................................................................................................ 3
Sarcina .................................................................................................................................................. 4
Mersul lucrării ...................................................................................................................................... 5
Analiza algoritmilor .............................................................................................................................. 8
Concluzii............................................................................................................................................. 10
Anexa A .............................................................................................................................................. 11
Scopul și obiectivele lucrării

a. Analiza imperică a algoritmilor

b. Analiza teoretică a algoritmilor

c. Determinarea complexității asimptotice a algoritmului


Sarcina

Să se analizeze algoritmul de aflare a numerelor șirului lui Fibonacci.


Mersul lucrării

În realizarea lucrării de laborator, fiecare pseudocod dat, a fost transformat în cod și scris în C++.
Apoi a fost calculate numărul de iterații pentru fiecare funcție.
1) Metoda recursivă
int fib1(int n)

int k;

if(n<2)

return n;

else

{return fib1(n-1)+fib1(n-2);

k++;

std::cout<<" "<<k<<" ";}

2) Metoda iterativă
int fib2(int n)

int i=1,j=0,k,m=0;

for(k=0;k<n;k++)

j=i+j;

i=j-i;

return j;

}
3) Metoda exponențială
int fib3(int n)

int i=1,j=0,k=0,h=1,g,t;

g=n;

while(n>0)

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;

std::cout<<" "<<7*g<<" ";

return j;

4) Metoda proprie
int fib4(int n)

int i,a=0,j=1,c;

if(n==0)

return a;

for(i=2;i<=n;i++)

{
c=a+j;

a=j;

j=c;

return j;

}
Analiza algoritmilor

Fib(n)
Fib1(n) Fib2(n) Fib3(n) Fib4(n)
n

5 15 10 35 10

10 177 20 70 25

20 21891 40 140 55

Fib1(n)
20000

15000

10000

5000

0
5 10 20

Fib1(n)

În metoda recursivă numărul de iterații a algoritmului cresc exponențial, ceea ce este ineficient pentru
resursele compilatorului.
Numarul de iterații pentru algoritmi
160

140

120

100

80

60

40

20

0
5 10 20

Fib2(n) Fib3(n) Fib4(n)

Algoritmul recursiv Fib1, în cazul dat, are nevoie de mai mult timp pentru a executa programul,
precum sînt efectuate mai multe iterații decît în celelalte cazuri. Numarul acestora crește cu mult mai
rapid ca în cazul algoritmilor Fib2, Fib3, Fib4, în care numarul iterațiilor este de cîtevai ori mai mic,
și timpul de execuție este mai rapid.
Concluzii

În realizarea lucrării de laborator, fiecare pseudocod dat, a fost transformat în cod și scris în C++.
Apoi a fost calculate numărul de iterații pentru fiecare funcție.
Algoritmul recursiv Fib1, în cazul dat, are nevoie de mai mult timp pentru a executa programul,
precum sînt efectuate mai multe iterații decît în celelalte cazuri. Numarul acestora crește cu mult mai
rapid ca în cazul algoritmilor Fib2, Fib3, Fib4, în care numarul iterațiilor este de cîtevai ori mai mic,
și timpul de execuție este mai rapid.
În metoda recursivă numărul de iterații a algoritmului cresc exponențial, ceea ce este ineficient
pentru resursele compilatorului.
În urma efectuării acestei lucrări de laborator am aplicat cunoștințele acumulate la orele de curs
referitor la analiza asimptotica a algoritmilor. Pentru fiecare algoritm în parte s-a calculat numărul de
iterații și s-a ajuns la concluzia că metoda recursivă este cea mai ineficientă.
Anexa A
Anexa B
#include <iostream>

using namespace std;

int n,k;

int fib1(int n)

k++;

if(n<2)

return n;

else

{return fib1(n-1)+fib1(n-2);

return k;

int fib2(int n)

int i=1,j=0,k,m=0;

for(k=0;k<n;k++)

j=i+j;

i=j-i;

std::cout<<" "<<(1+1)*n<<" ";

return j;
}

int fib3(int n)

int i=1,j=0,k=0,h=1,g,t;

g=n;

while(n>0)

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;

std::cout<<" "<<7*g<<" ";

return j;

int fib4(int n)

int i,a=0,j=1,c;

if(n==0)

return a;

for(i=2;i<=n;i++)

c=a+j;

a=j;

j=c;

std::cout<<" "<<3*(n-2)+1<<" ";


return j;

int main()

cout<<"Dati n:"; cin>>n;

cout<<endl;

cout<<"Prima metoda:";

cout<<fib1(n)<<endl;

cout<<"A doua metoda:";

cout<<fib2(n)<<endl;

cout<<"A treia metoda:";

cout<<fib3(n)<<endl;

cout<<"A patra metoda:";

cout<<fib4(n)<<endl;

std::cout<<" "<<k<<" ";

return 0;

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

  • IoT Laborator NR 2
    IoT Laborator NR 2
    Document10 pagini
    IoT Laborator NR 2
    crismaruion
    Încă nu există evaluări
  • Lab 4 Apa
    Lab 4 Apa
    Document21 pagini
    Lab 4 Apa
    crismaruion
    Încă nu există evaluări
  • IoT2 Raport
    IoT2 Raport
    Document10 pagini
    IoT2 Raport
    crismaruion
    Încă nu există evaluări
  • Raport 5 CDE
    Raport 5 CDE
    Document7 pagini
    Raport 5 CDE
    crismaruion
    Încă nu există evaluări
  • Lab 7 Sda
    Lab 7 Sda
    Document12 pagini
    Lab 7 Sda
    crismaruion
    Încă nu există evaluări
  • Raport4 Lab4 AC
    Raport4 Lab4 AC
    Document3 pagini
    Raport4 Lab4 AC
    crismaruion
    Încă nu există evaluări
  • Lab 6 Sda
    Lab 6 Sda
    Document16 pagini
    Lab 6 Sda
    crismaruion
    Încă nu există evaluări
  • Laboratorul 2 PPE
    Laboratorul 2 PPE
    Document4 pagini
    Laboratorul 2 PPE
    crismaruion
    Încă nu există evaluări
  • Examen PPe
    Examen PPe
    Document11 pagini
    Examen PPe
    crismaruion
    100% (2)
  • Raport CDE Lab.2
    Raport CDE Lab.2
    Document7 pagini
    Raport CDE Lab.2
    crismaruion
    100% (1)