【问题标题】:What is exp(O(n)) and how does it differ to O(exp(n))?什么是 exp(O(n)),它与 ​​O(exp(n)) 有何不同?
【发布时间】:2021-02-22 17:36:53
【问题描述】:

在最近的一次讲座中,我们被告知算法的时间复杂度为exp(O(n)),这与O(exp(n)) 的时间复杂度不同。我对以下内容感兴趣:

  1. 我们如何读取exp(O(n)) 的时间复杂度,它意味着什么?
  2. exp(O(n))O(exp(n)) 时间复杂度有什么区别?

我认为第一个问题也会回答第二个问题,但非常感谢您给出明确的答案。


为了澄清,我们所呈现的时间复杂度实际上是 Big-Theta,而不是 Big-O,符号,但我假设相同的相关属性适用于两者,这将是一种更有用的表达方式问题(因为我觉得人们搜索 Big-O 比搜索 Big-Theta 更多)。

对于那些好奇的人,所讨论的算法是在规则格上的节点之间寻找最小成本路径的蛮力方法。我们将它与更有效的 (Θ(n^2)) 动态编程方法进行比较。我正在学习的模块是计算生物学,主题是 DNA 和蛋白质的全局序列匹配。

【问题讨论】:

    标签: algorithm big-o exp


    【解决方案1】:

    我认为理解 exp(O(n)) 含义的最简单方法是演示差异:

    如果我们假设我们在基础 e 中工作,那么 exp(O(n)) 可以写成 e f(n),其中 f(n) ∈ O(n)。请注意,n 和 2n 都是 O(n),但是,当它们在指数中时,事情是不同的:O(en) ≠O( e2n),因为 O(e2n) = O((e2)n)。指数表达式具有不同的基数,因此属于不同的函数类别。

    因此,exp(O(n)) 是不同于 O(exp(n em>)),因为后者要求渐近增长遵循 en。 (当然,如果我们的基础不是 e,同样的论点仍然适用。)

    一个重要的结果是 exp(O(n)) 包含的函数比 O(exp(n)),因此 O(exp(n)) ⊆ exp(O(n))。

    混淆的根源可能是 exp(O(n)) 实际上与 O(exp (O(n)))。但是,由于 exp(O(n)) 已经是一类函数,所以不需要添加包装 O。因为c·exp(f(n))比exp(c·f(n)),因此 c·exp(f(n)) ∈ exp(O(n)) 对于 f(n) ∈ O( n)。

    【讨论】:

    • 只是因为它是混乱的根源。因为 2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2019-10-23
    相关资源
    最近更新 更多