Déterminer les temps d'exécution big-O de ces différentes boucles?

J'ai une série de questions auxquelles j'ai besoin de commentaires et de réponses. Je vais dire ce que je pense, ce n'est pas un devoir mais plutôt préparation pour mon examen.

Mon principal problème est de déterminer les itérations d'une boucle pour les différents cas. Comment vont tenter de comprendre ça?

Évaluer le temps d'Exécution.

T2.

 for(int i =0 ; i < =n ; i++) //runs n times
   for(int j =1; j<= i * i; j++) //same reasoning as 1. n^2
      if (j % i == 0)
         for(int k = 0; k<j; k++) //runs n^2 times? <- same reasoning as above.
            sum++;

Réponse Correcte: N × N2 × N = O(N^4)

Pour les Questions suivantes ci-dessous, je n'ai pas les réponses correctes.

T3. a)

     int x=0; //constant
     for(int i=4*n; i>=1; i--) //runs n times, disregard the constant
         x=x+2*i;

Ma Réponse: O(n)

b) Supposons pour simplifier que n = 3^k

    int z=0;
    int x=0;
    for (int i=1; i<=n; i=i*3){ //runs n/3 times? how does it effect final answer?
       z = z+5;
       z++;
       x = 2*x;
    }

Ma Réponse: O(n)

c) Supposons pour simplifier que n = k^2,

   int y=0; 
   for(int j=1; j*j<=n; j++) //runs O(logn)?  j <= (n)^1/2
   y++; //constant

Ma Réponse: O(logn)

d)

  int b=0; //constant
  for(int i=n; i>0; i--) //n times
    for(int j=0; j<i; j++) //runs n+ n-1 +...+ 1. O(n^2) 
      b=b+5;

Ma Réponse: O(n^3)

(e)

 int y=1;
 int j=0;
 for(j=1; j<=2n; j=j+2) //runs n times
    y=y+i;
 int s=0;
 for(i=1; i<=j; i++) //runs n times
 s++;

Ma Réponse: O(n)

(f)

 int b=0;
 for(int i=0; i<n; i++) //runs n times
   for(int j=0; j<i*n; j++) //runs n^2 x n times? 
      b=b+5;

Ma Réponse: O(n^4)

(g) Supposons pour simplifier que n = 3k, pour un certain entier positif k.

   int x=0;
   for(int i=1; i<=n; i=i*3){  //runs 1, 3, 9, 27...for values of i. 
     if(i%2 != 0) //will always be true for values above
      for(int j=0; j<i; j++) //runs n times
        x++;
    }

Ma Réponse: O (n x log de la base de 3 n? )

(h) Supposons pour simplifier que n = k2, pour un certain entier positif k.

   int t=0;
   for(int i=1; i<=n; i++) //runs n times
      for(int j=0; j*j<4*n; j++) //runs O(logn)
         for(int k=1; k*k<=9*n; k++) //runs O(logn)
            t++;

Ma Réponse: x n logn x log n = O(n log n^2)

(i) Supposons pour simplifier que n = 2s, pour un certain entier positif s.

   int a = 0;
   int k = n*n;
     while(k > 1) //runs n^2
     {
       for (int j=0; j<n*n; j++) //runs n^2
          { a++; }
        k = k/2;
    }

Ma Réponse: O(n^4)

(j)

  int i=0, j=0, y=0, s=0;
  for(j=0; j<n+1; j++) //runs n times
     y=y+j; //y equals n(n+1)/2 ~ O(n^2)
  for(i=1; i<=y; i++) //runs n^2 times
     s++;

Ma Réponse: O(n^3)

(k)
int i=1, z=0;
while( z < n*(n+1)/2 ){ //l'arithmétique de la série, s'exécute n fois
z+=i; i++;
}

Ma Réponse: O(n)

(m) Supposons pour simplifier que n = 2s, pour un certain entier positif s.

  int a = 0;
  int k = n*n*n;
  while(k > 1) //runs O(logn) complexity
   {
     for (int j=0; j<k; j++) //runs n^3 times
      { a--; }
     k = k/2; 
    }

Ma Réponse: O(n^3 log n)

Question 4

http://i.stack.imgur.com/zMkt7.jpg

  • a) Vrai - depuis sa délimitée ci-dessous par n^2
  • b) Faux - f(n) ne sont pas strictement plus petit que g(n)
  • c) Vrai
  • d) Vrai -bornée par n^10
  • e) Faux - f(n) ne sont pas strictement plus petit que g(n)
  • f) Vrai
  • g) Vrai
  • h) faux - car n'est pas égale à O(nlogn)
  • i) vrai
  • j) pas sûr
  • k) vous ne savez pas
  • l) pas sûr - comment devrais-je même essayer ces?*

Merci d'avance.

source d'informationauteur warpstar