【问题标题】:Is this algorithm technically O(1) time?这个算法在技术上是 O(1) 时间吗?
【发布时间】:2014-08-05 16:04:22
【问题描述】:

O(1) 表示“恒定时间”,那么这个最大算法在技术上是 O(1) 时间吗?

int max (int x, int y)
{
    for (int k = 0; k < 100000000000000000000000000; ++k); // useless for-loop
    return (x > y ? x : y);
}

【问题讨论】:

  • 是的。 (太短)
  • 这不是算法;这是一个代码块。
  • 编译器甚至可能不会为该 for 循环生成任何代码,因为它没有做任何事情并更新局部变量 k

标签: algorithm complexity-theory


【解决方案1】:

是的,它是恒定的时间。

我理解您的担忧:恒定时间并不一定意味着它很快,正如您人为的示例所展示的那样(即使用户 104 关于编译器没有为循环生成任何代码是正确的)。但是很多时候,大 O 符号告诉我们我们需要知道的一切。而且计算起来相对容易。

底线:大 O 表示法是关于渐近的。如果 Big O 表示法似乎与您的直觉不一致,请再次检查您的分析或检查您的直觉。重复至少三遍。如果仍然失败,请与您的教授讨论。只有当你的教授这么说的时候,你才应该做比大 O 更深入的分析(这会很困难)。

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2019-10-08
    • 2016-01-27
    • 2021-01-10
    • 2010-10-12
    • 2017-02-10
    • 1970-01-01
    • 2015-11-08
    相关资源
    最近更新 更多