1 for for循环的最差时间复杂度(Big O)

时间:2016-05-04 21:24:30

标签: c# time-complexity big-o

所以我理解大多数复杂问题;然而,这让我很困惑。

当for循环中的第二个语句如下(i * i< n)时,循环的大O是什么?怎么计算?

for ( i = 1 ; i * i < n ; i++)

2 个答案:

答案 0 :(得分:6)

假设n是输入大小的代理(并且您的代码将仅为输入的每个可处理成员执行一次循环体,并且没有其他输入元素选择器逻辑)。

i * i < n
  i^2 < n
    i < Sqrt(n)

因此,时间复杂度为O( Floor( Sqrt( n ) ) )

让我们看一下n = 10的示例(该表显示每次迭代结束时的变量状态,恰好在i++评估之前的那一刻,{{1执行测试)。

i * i < n

(注意,在执行循环之前执行Iteration, i, i * i, n 1, 1, 1, 10 2, 2, 4, 10 3, 3, 9, 10 4, 4, 16, 10 -- 16 > 10, abort loop 5, 5, 25, 10 -- for illustrative purposes 检查时,迭代4将不会执行,因此循环将执行3次。精确的平方根10是i^2 < 10但是迭代计数是从0开始的自然数,所以使用3.1622...。)。

答案 1 :(得分:6)

i*i<n

可以转换为

i<sqrt(n)

所以它的实际O(sqrt(n))