算法的时间复杂度计算

时间:2014-11-22 17:34:32

标签: algorithm time time-complexity

以下计划的复杂程度如何:

void function(int n)
{
int i, j, k , count =0;
for(i=n/2; i<=n; i++)
  for(j=1; j=j + n/2<=n; j++)
      for(k=1; k<=n; k= k * 2)
         count++;
}

根据我的理解,外循环执行n / 2次。内循环执行n / 2次,第三内循环执行log n次。现在,如果我们将算法的时间复杂度表示为函数T(n)。

  

T(n)= n / 2 * n / 2 * log n       = n ^ 2/4 * log n

现在,对于非常大的n项输入大小,与术语n ^ 2相比,log n变得太小。因此,根据我的理解,算法的时间复杂度必须为O(n ^ 2)。但我已经检查了上述程序的答案,它说答案是O(n ^ 2logn)。

任何人都可以帮助我理解为什么我们不能忽略n的较大值的log n一词?或者我的计算错了吗?

2 个答案:

答案 0 :(得分:3)

您只能忽略常量值。如果n增加,log(n)也会增加。

答案 1 :(得分:0)

如果我们假设你的algorihtm有运行时功能(不完全正确):

T(n)=n/2*n/2*log n =n^2/4*log n= an^2*log(n)

你可以做正式的渐近分析:

enter image description here

我们可以很容易地证明我们可以找到c1和c2来实现:

enter image description here

所以最后你可以说你的算法有复杂性:

enter image description here