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
多久为真?有多少次不是真的?明白了!但是有没有任何优化可以减少但不能消除二次行为?@Jacobi
n*n
就是二次行为的定义?明白了!但是有没有任何优化可以减少,但不能消除二次型行为?@Jacobi
n*n
就是二次型的定义?