我正在分析算法,我只是想知道我是否在正确的轨道上。
对于这个算法,我只计算行中有***的乘法。
这是算法:
p=p*20*z
完全执行(j) + (j-1)+(j-2)+(j-3)...1
次。这恰好等于j(j+1)/2
。2 * (j(j+1)/2)
。 n(2 * (n(n+1)/2))
。这是我背后的思考过程。我对么?感谢。
答案 0 :(得分:8)
您的思维过程是正确的。你需要用n替换j项(n是j可以假设的最大值),但这可能是一个错字。
此外,您可以从以下地方进一步简化:
n(2*(n(n+1)/2))
2*n*(n^2+n)/2
n^3+n^2
=> O(n^3)
最后一步是因为n立方项将以比n平方项更大的速度增长,我们可以说它将主导大n的运行时间。我要提到的另一点是你应该把商店看作是一个操作以及两个乘法,虽然这显然不会改变简化的大运行时间。
答案 1 :(得分:4)
如果您发现所有三个循环都具有相同的退出条件up to n
,则可以简化此特定示例中的计算:
i <= n
j <= n
k <= j
基本上第三个循环也会运行n
个迭代,因为j <= n
所以k <= n
,
这意味着复杂性将是n * n * n = O(n ^ 3)
答案 2 :(得分:1)
这是有条不紊地获取算法增长顺序的方法: