c - 找到一个精确的函数来指示算法所采取的步数

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

如何确定该函数以及该函数的用途?另外,这个函数的运行时间是否可以改进?

最佳答案

上面有一些多余的代码; 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,然后添加 4,依此类推

当前的运行时间为O(n)。然而事实证明,有一个constant time formula对于 1 + 2 + 3 + ... + N。我们可以用它来创建以下内容,即恒定时间。

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

关于c - 找到一个精确的函数来指示算法所采取的步数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39823125/

相关文章:

Php Custom Mvc - 如何检查函数是否获取参数?

Python:编写 n 个函数组合的更好方法?

java - 算法的时间复杂度取决于增量/减量步长部分,而不是实际输入大小?

c - 交换 2 个连续字符串 - 时间复杂度

c - 结构和功能

sorting - 对字符串数组进行排序的复杂性

c - while循环和算术运算符

C,从文本文件读取并在 If Else 语句中的 bool 表达式中使用扫描字符

c++ - 将 char 指针中的字符替换为 memmove

c - 如何将编译后的程序(十六进制)转换为代码行?