Informatică, întrebare adresată de happymarra4556, 8 ani în urmă

Ma poate ajuta cineva cu calculul complexitatii acestui algoritm si cu scrierea unei metode iterative a algoritmului??
Multumesc
ALG(m,n)
1. if m > n then
2. return ALG(m-n,n)
3. else
4. if n > m then
5. return ALG(n,m)
6. else
7. return n


CinevaFaraNume: Algoritm recursiv pentru cmmdc prin metoda scaderii? Ce sens mai are?
happymarra4556: Nu știu, acesta e enunțul pe care l-am primit pentru examen,sa determin complexitatea iar apoi sa scriu o metoda iterativă. Nu ma descurc prea bine la complexitati unde am 2 parametrii
CinevaFaraNume: Cred ca complexitatea e O(max(n,m) - min(n,m))
CinevaFaraNume: Cel mai rau caz e cand n sau m e 1, deci daca n = 1, se va scadea repetat de m ori si complexitatea e O(m).Daca m = 1, se va scadea repetat de n ori si complexitatea e O(n).

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
1

Răspuns:

Complexitate: O(max(n,m))

Metoda iterativa:

void swap(int* a, int* b){

int cp = *a;

*a = *b;

*b = cp;

}

int alg(int m, int n){/*Prin scadere repetata*/

while(m!=n){

if(n>m){swap(&n,&m);}

else{m = m - n;}

}

return n;

}

Explicație:

Algoritmul respectiv este algoritmul pentru calcularea celui mai mare divizor comun prin metoda scaderii repetate.

Cel mai rau caz pentru acest algoritm este cand unul dintre paramteri este 1,

care se va scadea repetat din celalalt pana cand si celalalt ajunge la 1(conditia de terminare).

Astfel, daca n = 1 (complexitatea O(m)) sau m = 1(complexitatea O(n)).

In final, complexitatea este O(max(n,m)).


happymarra4556: Îți mulțumesc mult pentru explicații si pentru ajutor
Alte întrebări interesante