我在我的程序中使用了这个算法:
for( i=0 ; i<N ; i++ )
for( j=i+1 ; j<N+1 ; j++ )
for( k=0 ; k<i ; k++ )
doWork();
有人能帮我找到这段代码的时间复杂度吗?我猜前两个循环的复杂度是
N*(N+1)/2
没错?那三个循环一起怎么办?
我在我的程序中使用了这个算法:
for( i=0 ; i<N ; i++ )
for( j=i+1 ; j<N+1 ; j++ )
for( k=0 ; k<i ; k++ )
doWork();
有人能帮我找到这段代码的时间复杂度吗?我猜前两个循环的复杂度是
N*(N+1)/2
感谢 @Tim Meyer 纠正我:
简单的方程式给出了以下序列(N= 0,1,2,3,4,5,6,7,8...):0、0、1、4、10、20、35、56、84......,可以用以下公式解决:
u(n) = (n - 1)n(n + 1)/6
因此,它将具有O((N - 1)N(N + 1)/6)的时间复杂度,可以简化为O(N^3)
doWork()
将不会被调用。然后对于N = 2,3,4,5,..,该系列将是1,4,10,20,.. 因此它将是(N-1)*(N)*(N+1)/6
,即(N^3-N)/6
。通常你可以简化为O(N^3),因为这是该方程中的主导因素。 - Tim Meyer正式来说,你可以这样做: