解释算法的时间复杂度

时间:2016-10-25 12:56:02

标签: algorithm

    while(low <= high) 
{
  mid = (low + high) / 2;
  if (target < list[mid])
    high = mid - 1;
  else if (target > list[mid])
    low = mid + 1;
  else break;
}

这当然是二进制搜索,但我想找到复杂性。

仅仅看到代码我将如何找到Big-O?

对于while循环,它将平均运行N/2次?

但是如果你不知道这是二进制搜索,你怎么会通过查看代码找到这段代码的Big-O?

2 个答案:

答案 0 :(得分:0)

你只需看看while()条件如何变化......

low <= high表示您需要了解high - low的行为方式。

从代码中找到最不会改变它的内容! (最坏的情况)
在这里它减少了2倍(低提前减半,反之亦然)

然后:
T(x <= 0)= 1;
T(N)= T(N / 2)

答案 1 :(得分:0)

由于Big-O表示法涉及最坏情况的复杂性,我们只需要处理此代码的最坏情况,这意味着从未到达break行。

其他if分支意味着在while循环的每次迭代后,lowhigh的距离大致减半。

最初假设为N=|high-low|,然后d最终会变为N/2N/4,... N/(2^n)2^n大于或等于{{} 1}}以便比率d等于0. N/(2^n)high < low循环完成后的那个。

那么,我们可以将while除以2分多少次?答案大致是基数2中N的对数,因此N复杂度。