【问题标题】:What is the worst case complexity of max() function inside a for loop?for 循环中 max() 函数的最坏情况复杂度是多少?
【发布时间】:2021-07-28 00:40:35
【问题描述】:

我已经看到 max() 的复杂度是 O(N)。 在程序 sn-ps(在 geeksforgeeks)中,我看到以下代码的复杂性是 O(N)。 但是,如果在 for 循环中这是 O(N) 的另一个函数,那怎么可能。 所以总复杂度应该是O(N^2)。 请解释什么是正确的以及如何?

int x(vector<int> nums){
    int tmp;
    for(auto i=0;i<nums.size();i++){
        maximum=max(nums);
        cout<<maximum;
    }
}

【问题讨论】:

  • 这个 sn-p 并不是特别切,每次交互每次都计算相同的值。 i 未在循环中使用。这个复杂度显然是O(N^2)。你确定那是你看到的sn-p吗?
  • 好吧,我猜 Geeksforgeeks 错了。如果max(nums) 的最坏情况复杂度是O(N),那么在nums 上的循环中调用它将是O(n^2)
  • 上面的代码只是平面错误——不能编译; int tmp; 未使用; maximum 未声明; i 迭代数组但不用于索引它。请发布一些真实的代码并检查它是否编译 1st。
  • Geeksforgeeks 以低质量、糟糕的代码风格和错误的信息而闻名。这是不明确或错误信息的示例。你应该避开那个网站。
  • max() 函数长什么样子?

标签: c++ algorithm data-structures time-complexity


【解决方案1】:

请解释一下什么是正确的

所示函数的时间复杂度为O(N*N)

怎么做?

具有线性复杂度的函数称为线性次数。

理论上,编译器可以足够聪明地知道max 返回相同的值并且没有副作用,在这种情况下会自动记忆结果,这将导致 O (N) 复杂性。但在实践中,这样的证明对于编译器来说往往太难了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2015-01-20
    相关资源
    最近更新 更多