【问题标题】:How to calculate Time Complexity in nested for loop? [duplicate]如何计算嵌套for循环中的时间复杂度? [复制]
【发布时间】:2017-05-22 09:27:31
【问题描述】:
下面sn-p的时间复杂度是多少?你能解释一下吗?
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
//print something
}
}
【问题讨论】:
标签:
java
algorithm
performance
time-complexity
【解决方案1】:
外部循环有n 迭代。
对于外循环的每次迭代,内循环都有i+1 迭代。
因此内循环的总迭代次数为:
1 + 2 + 3 + ... + n
等于
n*(n+1)
-------
2
这是O(n^2)
【解决方案2】:
每当您遇到计算时间复杂度的问题时,只需看看您要完成这项工作的次数。
在这里,在您的问题中,无论您在做什么工作,比如说打印一些东西,您都要做外循环的次数,它本身运行 n 长度。
因此,您将完成 1+2+3+....n 次的工作
变成
n*(n+1)/2
次。
因此,它只是 O(n^2)
【解决方案3】:
- 对于 i=0,内循环运行 1 次
- 对于 i=1,内循环运行 2 次li>
- 对于 i=2,内循环运行 3 次
...
n-1。对于i=n-1,内循环运行n次
所以,总时间 = 1 + 2 + 3 +....+ n
n*(n+1)/2
并表示为 O(n^2)
【解决方案4】:
时间复杂度是 n 平方的大 O,即O(n^2)
外圈是n
内循环成本为1 + 2 + 3,...n-2, n-1, n
所以总成本是O(n^2)
【解决方案5】:
二次函数(二次运行时间)
如果,则称算法是二次的
二次函数出现的主要原因是嵌套循环,其中内部循环执行线性数量的操作n,而外部循环也执行线性数量的操作n,因此,在这种情况下,整个算法执行 操作。
n 是任何给定数组中的元素数。
如果数组中的元素数为 10,这意味着需要 10 * 10 = 100 次操作才能完成逻辑的执行。
一个很好的例子是检查列表中有多少单个项,这需要将列表中的每个元素与列表中的所有元素(包括它自己)进行比较。
二次函数图:
我有一个旧的 BigO 符号注释,涵盖了 7 个最著名的运行时复杂性,看看这是否会有所帮助 BigO