确定这些不同循环的大O运行时间?

时间:2012-06-19 04:24:06

标签: algorithm math big-o time-complexity

我有一系列问题需要反馈和答案。我会评论我的想法,这不是作业,而是准备我的考试。

我的主要问题是确定不同情况下循环的迭代。怎么会尝试解决这个问题?

评估运行时间。

Q2。

 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++;

正确答案:N×N2×N = O(N ^ 4)

对于以下问题,我没有正确答案。

Q3。一个)

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

我的答案:O(n)

b)为简单起见,假设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;
    }

我的答案:O(n)

c)为简单起见,假设n = k ^ 2,

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

我的答案:O(登录)

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;

我的答案: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++;

我的答案: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;

我的答案:O(n ^ 4)

(g)为简单起见,假设n = 3k,对于某些正整数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++;
    }

我的答案:O(n x log base 3 n?)

(h)为简单起见,假设n = k2,对于某些正整数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++;

我的答案:n x logn x log n = O(n log n ^ 2)

(i)为简单起见,假设n = 2s,对于某些正整数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;
    }

我的答案: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++;

我的答案:O(n ^ 3)

(k)的        int i = 1,z = 0;        while(z&lt; n *(n + 1)/ 2){//算术系列,运行n次           Z + = I;我++;         }

我的答案:O(n)

(m)为简单起见,假设n = 2s,对于某些正整数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; 
    }

我的答案:O(n ^ 3 log n)

问题4

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

  • a)真 - 因为它的下限是n ^ 2
  • b)假 - f(n)不严格小于g(n)
  • c)真的
  • d)真正受n ^ 10
  • 限制
  • e)假 - f(n)并不严格小于g(n)
  • f)真的
  • g)真的
  • h)false - 因为不等于O(nlogn)
  • i)true
  • j)不确定
  • k)不确定
  • l)不确定 - 我怎么能尝试这些?*

提前致谢。

0 个答案:

没有答案