问题是为以下代码片段显示O符号(显示每一行)
for x=1 to n
{
y=1
while y < n
y=y+y
}
我相信第一行的O符号是n。 我不确定while循环的O符号是什么?为什么?
给出的答案是O(n log 2 n)
有人可以向我解释一下吗?谢谢!
答案 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)增加迭代总数