2017-09-11 6 views
0

Ma question est comment calculer la notation O à cette opération, où les deux boucles externes iront O (n^3) fois. Ma question est de savoir ce que la notation o va être quand modulo est utilisé dans une condtion et la boucle for interne court juste quand i est un facteur dans j.O-notation avec for-loop avec modulo condition

for(int i = 1 ; i <= n ; i++) { 
    for(int j =1; j <= i ∗ i ; j++) { 
     if(j % i == 0) { 
     for(int k = 0 ; k < j ; k++){ 
      sum++; 
     } 
     } 
    } 
} 
+3

Encore sera compté comme O (n^3). – Debabrata

+0

Pourquoi ne pas définir la mid-loop comme 'pour (int j = i; j <= i * i; j + = i) {'? Il semble moins effrayant et plus facile à compiler. – bipll

+0

Ou juste faire j gamme de 1 à i, et le multiplier par «je» lorsque vous voulez la valeur ... –

Répondre

0

C'est O(n^4).

L'astuce avec celui-ci est le if (j % i == 0). Depuis i est à peu près n et j va aller à n^2 nous savons que cette déclaration sera vraie n + (n-1) + ... + 1 fois qui va simplifier à (n+1)(n+2)/2 ou O(n^2) qui, à son tour lancer une boucle qui court n^2 fois. Nous avons ensuite besoin de le traiter comme un ajout, donc nous avons n^3 + n^2 * n^2, cela se simplifie à O(n^4).

S'il y a un défaut dans mon raisonnement, signalez-le, je suis un peu rouillé.