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

时间:2018-05-09 20:53:20

标签: 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("something")

我尝试从少数情况下找到关于n调用print的次数开始:

n  T(n)
1   2
2   6
3   6
4   14
5   14

我确信第一个while循环以某种方式涉及带有n的天花板/地板功能,但我不确定如何从那里开始。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

内循环:j从1增加到i ---运行i次。

外循环:经典的对数循环。 i增加为2的幂,直到它变得大于或等于n

enter image description here

所以你的猜测是正确的。请注意i在内循环之前加倍而不是之后;这会使呼叫次数加倍。然后,print的总呼叫数为:

enter image description here

测试值:

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时才会增加。