C 如何优化这个渐进算法?
我有这个二次算法,希望减少它的渐近行为。输入是一个C 如何优化这个渐进算法?,c,optimization,C,Optimization,我有这个二次算法,希望减少它的渐近行为。输入是一个 n > 0 对应于级数基数,而输出是项的求和和和减法 有什么想法吗 int sum = 0; for (int i = 0; i < n; i++ ){ for (int j = 0; j < n; j++ ){ if (i == j) { sum = sum -1; } else { sum = sum + 1; } } } int和=0;
n > 0
对应于级数基数,而输出是项的求和和和减法
有什么想法吗
int sum = 0;
for (int i = 0; i < n; i++ ){
for (int j = 0; j < n; j++ ){
if (i == j) {
sum = sum -1;
} else {
sum = sum + 1;
}
}
}
int和=0;
对于(int i=0;i
显然,所需的值可以直接计算如下
int sum = n * n - 2 * n;
有
n*n
内部循环体的迭代。在大多数情况下,总和是增加的。对于n
情况(成对(i,j)
位于对角线上),总和不仅没有贡献,而且减少了。显然,所需值可以直接计算如下
int sum = n * n - 2 * n;
有
n*n
内部循环体的迭代。在大多数情况下,总和是增加的。对于n
情况(成对(i,j)
位于对角线上),总和不仅没有贡献,而且减少了。您想告诉我们它应该做什么,以便我们不尝试反向工程吗?乍一看,它似乎在O(1)中有一个简单的解析解。你期望i==j
多久为真?有多少次不正确?您想告诉我们它应该做什么,这样我们就不会尝试对其进行反向工程吗?乍一看,它似乎在O(1)中有一个简单的解析解。你期望i==j
多久为真?有多少次不是真的?明白了!但是有没有任何优化可以减少但不能消除二次行为?@Jacobin*n
就是二次行为的定义?明白了!但是有没有任何优化可以减少,但不能消除二次型行为?@Jacobin*n
就是二次型的定义?