【问题标题】:Is it O(n^2) or O(1)?是 O(n^2) 还是 O(1)?
【发布时间】:2015-05-21 03:25:24
【问题描述】:

Is the execution time of this unique string function reduced from the naive O(n^2) approach?

这个问题有很多有趣的讨论让我想知道如果我们对算法设置一些阈值,它会改变 Big-O 运行时间复杂度吗?例如:

void someAlgorithm(n) {
    if (n < SOME_THRESHOLD) {
         // do O(n^2) algorithm
    }
}

是 O(n2) 还是 O(1)。

【问题讨论】:

  • 您的代码 sn-p 是否存在else 条件?如果您不执行任何高于硬编码的有限值的操作,则运行时间将由一个常数限制。

标签: algorithm


【解决方案1】:

这将是O(1),因为有一个常数,这样无论输入有多大,您的算法都会在小于该常数的时间内完成。

从技术上讲,它也是O(n^2),因为有一个常数c,这样无论您的输入有多大,您的算法都会在c * n ^ 2 时间单位下完成。由于 big-O 为您提供了上限,所以 O(1) 的所有内容也是 O(n^2)

【讨论】:

    【解决方案2】:

    如果SOME_THRESHOLD 是常数,那么您已经硬编码了函数增长的常数上限(f(x) = O (g(x)) 给出了g(x)f(x) 增长的上限)。

    按照惯例,O(k) 表示某些常数,k 只是 O(1),因为我们不关心常数因素。

    请注意,下限是未知的,至少在理论上是这样,因为我们对O(n^2) 函数的下限一无所知。我们知道对于f(x) = Omega(h(x))h(x) &lt;= 1,因为f(x) = O(1)in theory 可以使用小于恒定时间的函数,尽管在实践中 h(x) = 1,所以 f(x) = Omega(1)

    所有这一切的意思是通过对函数强制一个恒定的上限,该函数现在有一个紧密的界限:f(x) = Theta(1)

    【讨论】:

    • 根据计算模型,您实际上可能有 f(n) = Theta(0)
    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2011-09-10
    相关资源
    最近更新 更多