Qual è la complessità temporale del seguente pezzo di codice nel peggiore dei casi?
s = 0;
for( i = 1; i <= n; ++i ) {
for( j = 1; j <= i * i; j++ ) {
for( k = 1; k <= j and j % i == 0; k++ )
s++;
}
}
Ogni loop dipende dalla variabile del loop esterno. Come dovrei procedere in questo caso?
Il ciclo più interno verrà eseguito solo occasionalmente, quindi come posso valutare questo caso?
Per ogni incremento di i
ciclo intermedio viene eseguito i^2
volte. Per ogni iterazione del ciclo intermedio, non sono in grado di calcolare quante volte verrà eseguito il ciclo più interno in termini di ciclo esterno.
Penso che il ciclo interno iterazioni per i
volte. Il ciclo intermedio viene eseguito per j = 1 to i^2
e j % i != 0
è in i
casi e per altri casi i
, j % i = 0
. Poiché il ciclo interno viene eseguito per j % i == 0
, verrà ripetuto i
volte.
Ora per i tempi il ciclo più interno esegue i
volte, il ciclo medio esegue i^2
volte e il ciclo esterno esegue i
volte, penso che la complessità sia n^4
.