时间复杂度练习(伪代码)
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
,就完成了。
刚开始数据结构。卡在了这个:
我在使用内部 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
,就完成了。