我知道关于 Big Oh 符号有很多类似的问题,但是这个例子很有趣,而且不是微不足道的:
int sum = 0;
for (int i = 1; i <= N; i = i*2)
for (int j = 0; j < i; j++)
sum++;
外循环将迭代 lg(N) 次,但是内循环呢?所有操作的 T(N) 是多少?我只能看到 3 个可能性:
- T(N) = lg(N) * 2^N
- T(N) = log(N) * (N-1)
- T(N) = N
我的意见 - T(N) = N - 但这只是我从 sum 变量的观察值得出的直觉,当 N 被多次相乘时 - sum 几乎等于 2N,这给了我们 N。
基本上我不知道怎么算。请帮助我完成这项任务并解释解决方案 - 这对我来说非常重要。
谢谢