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:
Con soluzione in relazione di ricorrenza: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; }
Rf(0)= d
Rf(n)= c+ 4Rf(n/2)
Rf(n) è O(n^2)
SECONDO:
Con soluzione: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; }
Rg(n)= 1
Rg(n)= 1 +4 Rg(n/2)
Rg(n) è O(n^2)
TERZO:
Con soluzione:codice:int f(int x) { int a = g(x); return a + g(a); }
Rf(n)= è O(n^4)
In cui la funzione g è:
Con soluzione: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; }
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.

