双循环函数的时间复杂度

Time Complex of double loop function

我遇到了这个问题:

Func(n)
  for (a = 1; a <= n; a = a * 2)
    for (b = a; b <= n; b = b * 2)
      print a + b

我知道外部循环将 运行 loglog(n),但我很难理解内部循环将 运行 的大小。 还有这个函数的时间复杂度的最终答案是什么。 谢谢大家

也许列出几个输出可能会有所帮助。这里我举个例子 n=10.

a=1: (1+1) (1+2) (1+4) (1+8)
a=2: (2+2) (2+4) (2+8)
a=4: (4+4) (4+8)
a=8: (8+8)

如果 n 是一个精确的对数,您可以想象这是一个边缘为 roof(log(n))log(n) + 1 的正方形,即没有完全“填充”。这个方格内的物品数量几乎是面积的一半:

1/2 * log_2(n) * (log_2(n) + 1)

所以这将是您程序的渐近复杂度。