Big o 使用天花板/地板功能查找步长计数功能

Big o 使用天花板/地板功能查找步长计数功能,big-o,Big O,我在一本教科书中遇到了一个挑战性的问题,而我在这本教科书上遇到了麻烦。我需要找到以n为单位的步长计数函数,它计算打印过程被调用的次数。下面是伪代码 function EXAMPLE( some positive int n ) i <- 1 while i <= n do i <- i * 2 j <- 1 while j <= i do j <- j + 1 print("som

我在一本教科书中遇到了一个挑战性的问题,而我在这本教科书上遇到了麻烦。我需要找到以n为单位的步长计数函数,它计算打印过程被调用的次数。下面是伪代码

function EXAMPLE( some positive int n )
 i <- 1
 while i <= n do
      i <- i * 2
      j <- 1
      while j <= i do
          j <- j + 1
          print("something")

我确信,在第一个while循环中,以某种方式涉及了带有n的天花板/地板功能,但不确定如何从那里开始。感谢您的帮助。

内部循环:
j
从1增加到
i
——运行
i

外循环:经典对数循环
i
以二的幂增加,直到它大于或等于
n

所以你的猜测是正确的。请注意,
i
在内环之前而不是之后加倍;这会使通话次数增加一倍。调用
print
的总次数为:

测试值:

n    T(n)
----------
1    2
2    6
3    6
4    14
5    14
6    14
7    14
8    30
9    30
10   30
...
由于楼层操作员的原因,
T(n)
仅在
n
达到下一个2次幂时增加

n    T(n)
----------
1    2
2    6
3    6
4    14
5    14
6    14
7    14
8    30
9    30
10   30
...