时间复杂度练习(伪代码)

time complexity exercise (pseudo code)

刚开始数据结构。卡在了这个:

我在使用内部 while 和 for 循环时遇到问题,因为如果 N 数是奇数或偶数,它会改变。

我最好的情况是 - 内部 for 循环运行 logn (base 2) 次, 而 while 循环 - logn 次(基数 2)

希望得到一些帮助。

关注调用了多少次do_something()

外面的for循环显然运行了n次,里面的while循环是独立于变量i的。因此 do_something() 被调用 n 次是它在 while 循环中被调用的总次数。

在第一次通过 while 循环时,do_something() 被调用一次。第二次调用2次,第三次调用4次,以此类推

总调用次数为

1 + 2 + 4 + 8 + ... + 2^(k-1)

其中 k 最大,使得 2^(k-1) <= n.

上述总和有一个标准公式。使用它然后根据 n 求解 k 并将结果乘以外循环中的 n,就完成了。