ho il seguente codice:
for ( int i = 1; i < n; i ++)
for ( int j = 0; j < n*n; j ++)
if (j % i == 0)
for (int k = 0; k < j; k++)
sum++;
In che modo if (j % i == 0)
influisce sulla complessità complessiva? Mentre k sale a j, che è n*n
, anche il terzo ciclo dovrebbe essere di complessità n*n
= O (n ^ 2), giusto? Quindi sarebbe O(N)*(N^2)*(N^2)= O(n^5)
? Ma la soluzione data è O(n^4)
, quindi dove sbaglio?
Grazie!
Ho familiarità con i concetti di base di BigOh, ma non sto capendo questo caso specifico, come i miei calcoli per la somma dei cicli annidati (con il primo che ripete il secondo n volte e il secondo che ripete il terzo n ^ 2 volte e il terzo n ^ 2 riassumerebbe anche n ^ 5) differisce da quello che so che è (n ^ 4). Quindi deve essere qualcosa su if (j % i == 0)
che riduce l'esponente di uno. Poiché j è in media più grande di me, ci dovrebbe essere una buona possibilità che il if (j % i == 0)
sia soddisfatto. Ma perché diminuisce esattamente l'esponente della complessità complessiva di uno? Ho cercato su Google in SE, ma non ho trovato alcuna informazione su un modulo integrato in un ciclo annidato come questo.
Grazie in anticipo.