c++ - 函数调用另一个函数的时间复杂度?

标签 c++ time-complexity big-o asymptotic-complexity

我知道如何找到几乎所有选项(简单函数、带循环的函数等)的时间复杂度,但我不知道如何确定调用另一个 函数,特别是如果调用函数在循环内。

我写了一些函数,用作示例。

int g(int k) {
  int i=0;

  while(k>0) {
    i += k;
    k= k/2;
  }

  return i;
}

int f(int n) {
  int m = 0;

  for (int i=0; i<n; ++i) {
    for (int j=i; j<n; ++j) {
      m += g(j);
    }
  }

  return m;
}

我想不通:我是否必须考虑函数 g() 的时间复杂度? ,如果我必须如何在函数 f() 中计算它?或者我只是忽略函数 g()并仅包括函数 f() 中的函数调用?

最佳答案

因为,函数 g 的复杂度取决于参数 k(对数),您在从函数 f 调用它时必须考虑它。以防万一,如果 g 的最坏情况操作具有常数时间复杂度,那么您可能不需要明确考虑它。

在你的例子中,f 的复杂度是 O(n2) & g 的复杂度是 O(lg(n)),产生 O(n2 LG(n))

关于c++ - 函数调用另一个函数的时间复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38133293/

相关文章:

c++ - 带有 HKEY_LOCAL_MACHINE 的 RegOpenKeyExW 在 Windows Embedded 7 64 位上返回 2

algorithm - 在直方图上分配值的快速算法?

c++ - 查找通过 4x4 网格的所有路径

c++ - boost::function 静态成员变量

C++ 编码逻辑 - 各种想法

c++ - 如何在 Xcode 中创建一个新的 C++ 项目?

java - 从字符串到整数的映射——各种方法的性能

algorithm - 为什么用 Big O 表示法而不是 Theta 给出算法复杂度?

algorithm - 排列列表的后缀

python - 为什么我计算数字阶乘的算法的时间复杂度是 O(n^2) 而不是预期的 O(n)?