Ciao a tutti, nell'esame di Algoritmi e strutture dati mi viene chiesto di calcolare il numero di iterazioni e la complessità della singola iterazione di ogni comando ripetitivo all'interno di un algoritmo ricorsivo.
Per spiegarmi meglio vi scrivo degli esempi di esercizio e la soluzione data.
PRIMO:
codice:
int f(int x) {
if (x <= 0) return 1;
int b = 3 + 2*f(x/2);
cout << b + f(x/2);
return b + b; }
Con soluzione in relazione di ricorrenza:
Rf(0)= d
Rf(n)= c+ 4Rf(n/2)
Rf(n) è O(n^2)
SECONDO:
codice:
int g(int x) {
if (x<=0) return 1;
int a = 0;
for (int i=0; i <= x; i++)
a += i;
int b = 2*g(x/2);
cout << a + g(x/2);
return 1 + 2*b; }
Con soluzione:
Rg(n)= 1
Rg(n)= 1 +4 Rg(n/2)
Rg(n) è O(n^2)
TERZO:
codice:
int f(int x) {
int a = g(x);
return a + g(a);
}
Con soluzione:
Rf(n)= è O(n^4)
In cui la funzione g è:
codice:
int g(int x) {
if (x<=0) return 1;
int a = 0;
for (int i=0; i <= x; i++)
a += i;
int b = 2*g(x/2);
cout << a + g(x/2);
return 1 + 2*b; }
Con soluzione:
Rg(n)= 1
Rg(n)= 1 +4 Rg(n/2)
Rg(n) è O(n^2)
Poi ce ne sono altri, ma non vorrei riempirvi di esercizi..Se qualcuno riuscisse, partendo dagli esercizi, a spiegarmi il procedimento sarebbe fantastico!
Il Testo dell'esercizio è:
Indicare per esteso le relazioni di ricorrenza per il tempo e per il risultato delle funzioni e, per ogni comando ripetitivo, il numero di iterazioni e la complessità della singola iterazione.