Time complexity 这个代码片段的时间复杂度是多少?
我在程序中使用此算法:Time complexity 这个代码片段的时间复杂度是多少?,time-complexity,Time Complexity,我在程序中使用此算法: for( i=0 ; i<N ; i++ ) for( j=i+1 ; j<N+1 ; j++ ) for( k=0 ; k<i ; k++ ) doWork(); 对吧??这三个循环加起来怎么样?感谢@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 +
for( i=0 ; i<N ; i++ )
for( j=i+1 ; j<N+1 ; j++ )
for( k=0 ; k<i ; k++ )
doWork();
对吧??这三个循环加起来怎么样?感谢@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)形式上,您可以执行以下操作:
在一个简单的分析中,你会省去任何常数乘数和求和,这确实会给你留下O(N³)。在这种特殊情况下,摊销运行时分析可能会很有趣,这要困难得多因此,请确保您确实需要准确地了解它。它不是100%正确的,因为for N=0和N=1
doWork()
将不会被调用。那么对于N=2,3,4,5,。。该系列将是1,4,10,20,。。所以它应该是(N-1)*(N)*(N+1)/6
,也就是(N^3-N)/6
。通常你把它简化为O(N^3),因为这是其中的主要因素equation@Tim迈耶-谢谢你的更正,我已经更新了答案
u(n) = (n - 1)n(n + 1)/6