[英]What time complexity is this nested loop with multiplication?
educative.io 认为以下代码的复杂度为 log 2 (n!),因为var
对于 n 的每个值都会增加。
但是,我的同事和我认为,因为var
总是< n
,所以它不可能是 log2(n!) 因为它永远不会比 while 循环刚刚运行n
花费更多的时间。 如果在 while 谓词中使用n
则时间复杂度为 n*log 2 (n)。
public static void main(String[] args) {
int n = 10;
for (int var = 0; var < n; var++) {
int j = 1;
while(j < var) {
j *= 2;
}
}
}
你们都是对的。 首先,为什么它是 O(log n!) 的情况:
如果将每个单独迭代的成本相加,则总运行时间为 O(log 1 + log 2 + ... + log n)。
根据对数乘积法则,log a + log b = log a×b。
因此,O(log 1 + log 2 + ... + log n) = O(log 1×2×...×n) = O(log n!)。
一旦建立,就可以证明O(log n!) = O(n log n) 。 它们实际上是相同的复杂度类。
你应该考虑这个陈述,你们都是对的:
O(n*lg(n))=O(lg(n!))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.