找到一个确切的函数,指示算法采取的步骤数

时间:2016-10-03 00:31:21

标签: c function time-complexity big-o

int mystery(int n) {
    int s = 0;
    int tmp = n+1;
    for (int i; i<=n; i++) {
        s = tmp + i;
        tmp = s;
    }
    return s;
}

如何确定此功能以及该功能的作用?此外,这个功能可以在运行时间方面得到改善吗?

1 个答案:

答案 0 :(得分:0)

上面有一些多余的代码; s完全没必要。没有它就重新写它会让它更清晰。

int mystery(int n) {
    int tmp = n + 1;
    for (int i = 1; i<=n; i++) {
        tmp += i;
    }
    return tmp;
}

它做的是

  • tmp设为n + 1
  • 加1然后加2然后加3然后加上

目前的运行时间为O(n)。但是,事实证明1 + 2 + 3 + ... + Nconstant time formula。我们可以用它来创建以下内容,这是一个恒定的时间。

int mystery(int n) {
    int triangleNumber = (n * (n + 1)) / 2;
    return triangleNumber + n + 1;
}