求解:T(n)= T(n / 2)+ n / 2 + 1

时间:2017-05-05 11:11:08

标签: time-complexity computer-science asymptotic-complexity computer-science-theory

我很难用O表示法定义以下算法的运行时间。我的第一个猜测是O(n),但是迭代和我应用的数字之间的差距并不稳定。我怎么错误地定义了这个?

public int function (int n ) 
{
  if ( n == 0) {
    return 0;
  }

  int i = 1;
  int j = n ;
  while ( i < j ) 
  {
    i = i + 1;
    j = j - 1;
  }
  return function ( i - 1) + 1;
}

1 个答案:

答案 0 :(得分:29)

while大约n/2时间执行。

执行递归时,n传递的值大约是原始n的一半,所以:

n/2 (first iteration)
n/4 (second iteration, equal to (n/2)/2)
n/8
n/16
n/32
...

这类似于geometric serie

事实上它可以表示为

n * (1/2 + 1/4 + 1/8 + 1/16 + ...) 

因此它会收敛到n * 1 = n

所以O表示法是 O(n)