[Algoritmi] Calcolo complessità

Return89
Ciao a tutti,
vi scrivo perché non riesco a capire bene come calcolare la complessità di un algoritmo in C.
Ho fatto diverse ricerche su internet e letto più e più volte le incomprensibili slide del professore ma non riesco a capire quali sono le "regole" che stanno dietro i singoli calcoli.
Cioè ho capito che le istruzioni semplici come printf, scanf e di assegnamento hanno costo unitario $1$.
I problemi arrivano quando devo calcolare il costo di cicli come while e for. Il testo mi suggerisce di sommare i costi delle condizioni con i costi "interni" al ciclo, ma mi sembra chiaro che non è così semplice (manca qualcosa),
Ad esempio, se ho il seguente (e semplicissimo) algoritmo:
$i=0;$
while $(i*i $i=i+1;$
Il testo suggerisce che avrò i seguenti cosi:
la prima istruzione ha costo $1$ ovviamente,
il numero di test del ciclo avrà costo $sqrt(n) + 1$
gli assegnamenti interni hanno invece costo $sqrt(n)$
Quindi il costo totale dell'algoritmo è $2*sqrt(n)+2$

Non capisco da dove esca fuori quella radice..

Se qualcuno può aiutarmi gliene sarei davvero grato ^^

Grazie mille anticipatamente :)

Risposte
Return89
Edit: credo (spero) di aver capito.
Riassumento in una sorta di tabella il metodo è il seguente?
Istruzioni semplici (printf,scanf,assegnamento): costo $1$
ciclo while: ricavo il costo della condizione (nel caso $i^2 ciclo for: ha costo uguale ad: $1$ (se vi è un assegnamento interno) più costo della condizione (caso base$+1$) più caso base (nel caso sia presente l'operazione di incremento della variabile). Esempio, in for(j=0; j cicli annidati: moltiplico il caso base per il contenuto del ciclo. Esempio: se ho un ciclo for all'interno di un while, dopo aver calcolato il costo della condizione del ciclo while ne sommerò il "caso base" moltiplicato al costo del contenuto (ciclo for).
So che questo schema è molto confusionario ma ho cercato di renderlo più comprensibile possibile.
Ditemi se e dove ho sbagliato :)
Grazie mille ^^

Return89
Up! Nessuno che sa aiutarmi?

apatriarca
L'unica regola è che devi contare quante volte il ciclo viene eseguito e moltiplicare tale valore per Il costo del ciclo e del test. Ma questo calcolo potrebbe in generale essere molto complicato.

Return89
Ah perfetto, capito!

Invece il calcolo della complessità asintotica sarebbe più semplice? Sapresti spiegarmelo in maniera molto "pratica" (il concetto generale l'ho capito, mi interessa solo applicare queste regole ad alcuni algoritmi parecchio complessi..)

Grazie mille!

apatriarca
Le difficoltà sono tendenzialmente le stesse..

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