【发布时间】:2020-11-01 22:06:30
【问题描述】:
我正在尝试有效地实现如下公式:
sum(i=1,n) sum(j=i+1,n) sum(k=j+1,n) x(i)*x(j)*x(k)
直接的方法是这样的:
sum = 0
for (int i=1; i<n; i++ )
for( int j=i+1; j<n; j++ )
for( int k=j+1; k<n; k++ )
sum += x[i]*x[j]*x[k]
问题是这是O(n^3)。我想知道是否有某种方法可以重写这个
这样我就可以使用一些递归关系消除一层甚至两层迭代。我尝试了以下方法,但没有运气:
for (int i=n; i>0; i-- )
int sumK = 0
for( int j=n; j>i; j-- ) {
sum += sumK
sumK += x[i]*x[j]*x[j]
}
它给出了与直接代码不同的答案,但它确实消除了一层迭代,所以我认为我走在正确的轨道上(尽管偏离了轨道)。有人可以帮忙吗?
【问题讨论】:
标签: java arrays iteration time-complexity