Complessità computazionale
Ciao ragazzi, potreste dirmi la complessità computazionale di questo codice?
Se non ho sbagliato i calcoli dovrebbe essere un O ($ n^2 $).
Potreste darmi una conferma? Vi ringrazio.
int f (int a, int b, int x, int y){ int i; for (i=0; i<(y*y); i++) a+=i; if(a<b){ i=2x; while (i>x) i--; } for (i=0;i<x;i++) i+=i; }
Se non ho sbagliato i calcoli dovrebbe essere un O ($ n^2 $).
Potreste darmi una conferma? Vi ringrazio.
Risposte
Ciao,
basta fare un po' di analisi dell'algoritmo. $n$ non saprei dove lo hai tirato fuori...ma vediamo:
$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $volte$\ \ \ \ \ $costo
int f (int a, int b, int x, int y){
int i;$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1\ \ \ \ \ c_1$
$\ $for (i=0; i<(y*y); i++)$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ y^2\ \ \ \ \ \ c_2$
$\ \ $a+=i;$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ y^2-1\ \ \ c_3$
$\ $if(a $\ \ \ $i=2x;$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1\ \ \ \ \ \ c_5$
$\ \ \ $while (i>x)$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ x+1\ \ \ \ c_6$
$\ \ \ \ $i--;$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ x\ \ \ \ \ \ c_7 $
$\ $}
$\ $for (i=0;i
$\ \ \ $i+=i;$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ x/2-1\ \ \ \ c_9$
$\ $}
Caso $a
$c_1 + c_2y^2 + c_3(y^2-1) + c_4 + c_5 + c_6(x+1) + c_7x + c_8(x/2) + c_9(x/2 -1) = .... = O(y^2 + x)$
Caso $(a>=b)$
$c_1 + c_2y^2 + c_3(y^2-1) + c_4 + c_8(x/2) + c_9(x/2 -1) = .... = O(y^2 + x)$
Se vuoi espandi i conti, per avere funzione di costo corretta, e vedere le differenze tra i due casi, ma la limitazione asintotica superiore è la stessa.
Perciò la complessità dell'algoritmo in ogni caso è sovrastato dal caso $(a
se hai domanda chiedi pure
basta fare un po' di analisi dell'algoritmo. $n$ non saprei dove lo hai tirato fuori...ma vediamo:
$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $volte$\ \ \ \ \ $costo
int f (int a, int b, int x, int y){
int i;$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1\ \ \ \ \ c_1$
$\ $for (i=0; i<(y*y); i++)$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ y^2\ \ \ \ \ \ c_2$
$\ \ $a+=i;$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ y^2-1\ \ \ c_3$
$\ $if(a $\ \ \ $i=2x;$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1\ \ \ \ \ \ c_5$
$\ \ \ $while (i>x)$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ x+1\ \ \ \ c_6$
$\ \ \ \ $i--;$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ x\ \ \ \ \ \ c_7 $
$\ $}
$\ $for (i=0;i
$\ $}
Caso $a
$c_1 + c_2y^2 + c_3(y^2-1) + c_4 + c_5 + c_6(x+1) + c_7x + c_8(x/2) + c_9(x/2 -1) = .... = O(y^2 + x)$
Caso $(a>=b)$
$c_1 + c_2y^2 + c_3(y^2-1) + c_4 + c_8(x/2) + c_9(x/2 -1) = .... = O(y^2 + x)$
Se vuoi espandi i conti, per avere funzione di costo corretta, e vedere le differenze tra i due casi, ma la limitazione asintotica superiore è la stessa.
Perciò la complessità dell'algoritmo in ogni caso è sovrastato dal caso $(a
se hai domanda chiedi pure

Ti ringrazio per i calcoli, i conti tornano perfettamente! La $n$ l'ho usata sbadatamente, avendo visto molti esempi che usavano questa notazione
Ti ringrazio ancora per la disponibilità

Ti ringrazio ancora per la disponibilità
