2012-04-27 132 views
0

所以我一直试图得到大哦计算的句柄。我觉得我已经掌握了一些基础知识,但很难理解这个计算方法。所以如果下面的计算有一个很大的O(n log n)哦(我真的希望我至少得到了这个权利),那么改变循环顺序是否会影响复杂性呢?非常感谢您的时间。大哦对数(ish)复杂度计算

int ONLogN(int N) //O(n log n) 
    { 
     int iIterations = 0; 
     for (int i = 0; i < N; ++i) 
     { 
      ++iIterations; 
      for (int j = 1; j < N + 1; j *= 2) 
       ++iIterations; 
     } 
     return iIterations; 
    } 
    int WhatBigOhIsThis(int N) //??? 
    { 
     int iIterations = 0; 
     for (int j = 1; j < N + 1; j *= 2) 
     { 
      ++iIterations; 
      for (int i = 0; i < N; ++i)     
       ++iIterations; 
     } 
     return iIterations; 
    } 
+4

您认为它是什么?外循环是* O(log N)*,内循环是* O(N)*所以我让你猜测组合结果。 – 2012-04-27 16:50:59

+0

这几乎就像“如果a * b = x',什么是'b * a'?问题:) – dasblinkenlight 2012-04-27 16:51:57

+0

我会认为O(n日志n),但我怀疑自己,因为在本周之前我没有做过任何与大哦。 – user1361473 2012-04-27 16:56:22

回答

1

两个循环上的索引变量是独立的,因此得到的复杂度必然相同。

+0

非常感谢。我很欣赏简单的确认。 – user1361473 2012-04-27 17:05:40

0

你仍然循环迭代次数相同。更改环路的顺序对复杂性没有影响

+0

它们可能具有相同的复杂度,但对于输入32来说,第一个函数产生了224次迭代,而第二个198. – user1361473 2012-04-27 17:09:28

+0

Big-Oh表示法并不关注实际数字。例如,你可以有两个不同的常量偏移量,复杂度仍然是n log(n)。其实,这就是符号本身的要点。 – 2012-04-27 17:13:39

+0

我开始明白这一点。再次感谢! – user1361473 2012-04-27 17:14:47