有人给我这段代码,我想要找到确切的复杂性,换句话说,找到一个公式,让特定的n知道如何计算L.
L = 0;
for (i = 1; i<n; i++)
for (j = 1; j<i; j++)
for (k = j; k<n; k++)
L++;
我的第一个想法是(n ^ 3 + n ^ 2)/ 2,但是错了。
例如n = 5 L = 20; n = 10L = 240
谢谢:D
编辑: 此问题来自基础算法,第140页或pdf中的幻灯片161(这是免费书籍版本) http://www.freebookspot.es/Comments.aspx?Element_ID=76025
答案 0 :(得分:2)
这是数学,而不是编程。
L等于(S是大西格玛,总和):
n-1 i-1 n-1
S S S 1
i=1 j=1 k=j
n-1 i-1
= S S (n - j)
i=1 j=1
n-1 i-1 n-1 i-1
= S S n - S S j
i=1 j=1 i=1 j=1
n-1 n-1
= n * S (i-1) - S (i-1)i/2
i=1 i=1
等等。您需要知道第一个n
整数的总和为n(n+1)/2
,并且第一个n
正方形的总和为n(n+1)(2n+1)/6
。你最终会在n
中得到一个三次方程式。
感谢Barmaley的回答指出我不再是本科生,我不必操纵公式来简化它们。 Wolfram Alpha会为我做的; - )
答案是n(n-1)(n-2)/3
。通常情况下,当这些事情很好地分解时,事实证明,我可以在早期做出一个关键的洞察力(可能是几何的洞察力),以便在不写太多长表达的情况下得到答案。这个结果看起来很可疑,就像刻在长方体上的金字塔体积有n
,n-1
,n-2
。