【问题标题】:How to optimize this progression algorithm?如何优化这个级数算法?
【发布时间】:2020-09-23 13:12:39
【问题描述】:

我有这个二次算法,想减少它的渐近行为。输入是一个

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;
    }        
  }
}

【问题讨论】:

  • 您想告诉我们应该做什么,以便我们不尝试对其进行逆向工程吗?乍一看,它似乎有一个 O(1) 的简单解析解。
  • 您希望i==j 多久为真?多久为真?

标签: c optimization


【解决方案1】:

显然期望值可以直接计算如下。

int sum = n * n - 2 * n;

内部循环的主体有n * n 次迭代。在大多数情况下,总和会增加。对于n 情况(其中(i, j) 对位于对角线),总和不仅没有贡献,而且减少了。

【讨论】:

  • 知道了!但是是否有任何优化可以减少但不消除二次行为?
  • @Jacobi n*n 是二次的定义吗?
猜你喜欢
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
相关资源
最近更新 更多