显示以下代码片段的O符号

时间:2015-12-14 21:54:34

标签: big-o

问题是为以下代码片段显示O符号(显示每一行)

for x=1 to n
    {
        y=1
        while y < n
        y=y+y
    }

我相信第一行的O符号是n。 我不确定while循环的O符号是什么?为什么?

给出的答案是O(n log 2 n)

有人可以向我解释一下吗?谢谢!

2 个答案:

答案 0 :(得分:1)

假设n = 64(或2 6 ),那么while循环将运行6次,并具有以下y的最终值:

2 4 8 16 32 64

如果你重复n = 256(或2 8 ),你会发现有8次迭代。更一般地说,给定n值的执行次数将是log 2 n。由于外循环为n,总执行时间为O(n log 2 n)

答案 1 :(得分:1)

在内部循环中,y取值1,2,4 ......

y每次乘以2,因此它的形式为2 ^ k

该循环停止最大值k,例如2 ^ k <1。 n即k < log_2(n)

此循环中只有log_2(n)次迭代

x从1到n,可以通过n.log_2(n)增加迭代总数