EFICIENTA ALGORITMILOR Eficienta unui algoritm reprezinta timpul de

  • Slides: 7
Download presentation
EFICIENTA ALGORITMILOR Eficienta unui algoritm reprezinta timpul de calcul estimat prin numarul de executii

EFICIENTA ALGORITMILOR Eficienta unui algoritm reprezinta timpul de calcul estimat prin numarul de executii ale operatiei de baza

� Definitie: Operatia de baza este o operatie elementara sau o succesiune de operatii

� Definitie: Operatia de baza este o operatie elementara sau o succesiune de operatii elementare a caror executii nu depinde de valorile datelor de intrare

Ordinul de complexitate • Definitie: Ordinul de complexitate al unui algoritm il reprezinta timpul

Ordinul de complexitate • Definitie: Ordinul de complexitate al unui algoritm il reprezinta timpul de calcul estimat prin ordinul de marime al numarului de executii ale operatiei de baza. • Notatie: O(f(n)) - f(n) reprezinta termenul determinant al numarului de executii ale operatiei de baza v Ordinul de complexitate este o functie dependenta de dimensiunea datelor de intrare si este determinat de structurile repetitive care se executa cu acea multime de valori pentru datele de intrare

Clasificarea algoritmilor un fucntie de complexitate Ordin de complexitate Tipul algoritmului O(n) Algoritm liniar

Clasificarea algoritmilor un fucntie de complexitate Ordin de complexitate Tipul algoritmului O(n) Algoritm liniar O(nm ) Algoritm polinomial. Daca m=2, algoritmul este patratic, iar daca m=3, algoritmul este cubic O(kn ) Algoritmul exponential. De examplu, 2 n, 3 n etc. Algoritmul de tip O(n!) este tot de tip exponential deoarece: 1 x 2 x 3 x 4 x…xn>2 x 2 x 2 x. . x 2=2 n-1. O(logn) Algoritm logaritmic. O(nlogn) Algortim liniar logaritmic.

Dependenta de dimensiunea datelor de intrare a ordinului de complexitate Structura repetitiva Numarul de

Dependenta de dimensiunea datelor de intrare a ordinului de complexitate Structura repetitiva Numarul de executii ale corpului de structuri Tipul algoritmului for (i=1; i<=n; i=i+k) {……. . } f(n)=n/k→O(n)=n Liniar for (i=1; i<=n; i=i*k) {……. . } f(n)=logk n→ O(n)=logn Logaritmic for (i=n; i>=1; i=i/k) {……. . } f(n)=logk n→ O(n)=logn Logaritmic for (i=n; i<=n; i=i+p) {……. . } for( j=n; j<=n; j=j+q) {…. . } f(n)=(n/p)*(n/q)=n 2 /(p*q) → O(n)=n 2 Polinomial patratic for (i=n; i<=n; i=i++) {……. . } for( j=i; j<=n; j=j++) {…. . } f(n)=1+2+3+. . . +n=(n*(n+1)) /2→O(n)=n 2 Polinomial patratic

Exemplu Enuntul: Fiind dat n apartine N, n>=1, sa se genereze toate permutarile multimii

Exemplu Enuntul: Fiind dat n apartine N, n>=1, sa se genereze toate permutarile multimii {1, 2, 3, …, n}. • Rezolvare: #include <iostream> int terminat, n, x[10]; void schimb(int &a, int &b) { int aux=a; a=b; b=aux; } void generare() {if(!terminare) {for(int i=n-2; i>=0 && x[i]>x[i+1]; i--; ) if(i<0) terminat =1; else {for (int j=n-1; x[i]>x[j]; j--) schimb(x[i], x[j]); for(j=1; j<=(ni)/2; j++) schimb (x[i+j], x[n-j]); } } } • void afisare() { cout<<“(“; for(int i=0; i<n; i++) {cout<<x[i]; if( i!=n-1) cout<<“, ”; } cout<< “)” ; void main () { cout<< “n= “; cin>>n; for(int i=0; i<n; i++) x[i]=i+1; afiseaza (); terminat =0; while (!terminat ) {generare(); if (!terminat) afiseaza ( ); } }

Thanks for watching Proiect prezentat de eleva: Vicentiu Mihaela Raluca clasa a X-a B

Thanks for watching Proiect prezentat de eleva: Vicentiu Mihaela Raluca clasa a X-a B Colegiul National “Mihai Eminescu” Profesor coordonator : Popescu Luminita �