Java 多重for循环的时间复杂度
我在计算一种方法的时间复杂度,我有:Java 多重for循环的时间复杂度,java,for-loop,time-complexity,Java,For Loop,Time Complexity,我在计算一种方法的时间复杂度,我有: for(int i = 0; i < P; i++){ for(int j = P-1; j >= 0; j--){ for(int k = 0; k < D; k++){} for(int z = 0; z < D; z++){} }} for(int i=0;i=0;j--){ 对于(int k=0;k
for(int i = 0; i < P; i++){
for(int j = P-1; j >= 0; j--){
for(int k = 0; k < D; k++){}
for(int z = 0; z < D; z++){}
}}
for(int i=0;i=0;j--){
对于(int k=0;k
D总是小于或等于p,但我怀疑的是最后四分之二。我的时间复杂度是O(2P^3),但我读过2可以像O(P^3)一样删除。这些是否正确?O(2P^3)
等同于O(p^3)
具体来说,O表示法描述了最坏情况下的时间/空间使用量是如何根据输入的大小增加的(在这种情况下,它是按三次方增加的,而不是按线性或二次方增加的)。因此,我们对这种复杂性的类别感兴趣-随着P
变得任意大,2P^3
与P^3
越来越难以区分,因此我们可以忽略系数2
同时,如果我们将伸缩性与
O(p^2)
进行比较,则资源使用量将大大减少,因为p
变得任意大。即使我们将P^3
的复杂度与(1000P^2)
的复杂度进行比较,也有一点P
变得如此之大以至于1000的因子变得微不足道,所以我们可以忽略它。你的意思是第二个循环中的j++
吗?哦,不,这是个错误,它的j--。我已经改正了!你可以在循环之外声明i、j、k和z,这可能会提高速度。@paladin,这不会有任何影响。我很确定减少内存分配和垃圾收集时间也会提高运行速度。谢谢!我还想知道是应该将时间复杂度计算为O(DP^2),还是O(P^3)更正确,因为D可以等于P@Marizard如果D
独立于P
,则O(DP^2)
是正确的。如果D
是从P
派生出来的,那么O(P^3)
可能会更正确,但是O(DP^2)
不会不正确,必要的是非常感谢!