Complessità computazionale

kokoko1
Ciao ragazzi, potreste dirmi la complessità computazionale di questo codice?
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
hamming_burst
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 :-)

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

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.