【发布时间】:2020-10-01 16:27:03
【问题描述】:
谁能帮我找到 T(n),内循环将作为 n 的函数运行的次数,用于以下循环:
for (int i = 0; i < n; i++)
for (int j = i; j > 0; j /= 2)
cout << j << endl;
只看这个我知道大O是O(n*log(n)),但我也应该弄清楚T(n)
我已经运行了代码并找到了语句执行的次数。我想出了一个系列,但我还没有想出如何简化它:
log_2(n-1)+1+log_2(n-2)+1+log_2(n-3)+1+.......
我尝试使用对数积规则将其简化为
T(n)=log_2((n-1)!2^2))
但这不满足方程。
*已编辑以解释我所说的 T(n) 的意思
【问题讨论】:
-
“T(n)”是什么意思?这不是像 Big-O 表示法那样的标准术语。
-
您是否要准确找出循环运行的次数?最差的情况? T(n) 对我来说也没有任何意义,所以请解释一下。
-
假设您知道
T(n)是什么。那么如果n增加1,你还需要做多少工作呢?好吧,你必须再做一次内循环。内部循环从i(大约是n)到0,每次减半。所以你会得到类似T(n) = T(n-1) + log_2(n)。
标签: c++ algorithm math time-complexity big-o