【问题标题】:Confusion about O((log n)²) vs O(log n)关于 O((log n)²) 与 O(log n) 的混淆
【发布时间】:2020-10-21 23:19:35
【问题描述】:

我在互联网上找不到任何解释 O((log n)2) 等于什么的好东西。我认为它等于 O(log n),通过以下论点:

  • O(log (log n)2)
    = O(log (log n · log n))
    = O(log log n + log log n)
    = O(2 log log n)
    = O(log log n)
  • 从两边删除“log”会得到 O((log n)2) = O(log n)。李>

这有效吗?

【问题讨论】:

  • 我认为你的逻辑错误是删除了 2。LHS 真的是 exp(2*log(log(n))),你不能只删除 2。

标签: algorithm math big-o logarithm


【解决方案1】:

你在这里提出的论点很有趣,但不幸的是它不起作用。要了解原因,让我们“证明” O(n137) = O(n)。为此,请注意

O(log n137)

= O(137 log n)

= O(log n)。

所以从两边删除日志给我们 O(n137) = O(n)。

但当然,这是不对的。原因是虽然 如果 f(n) = O(g(n)) 则 log n = O(log g(n)),但通常情况并非如此log f(n) = O(log g(n)) 意味着 f(n) = O(g(n))。

至于您最初的问题 - log2 n = O(log n) 的情况并非如此。事实上,对于任何不是 O(1) 的函数 f,都不是 f(n)2 = O(f(n))。

【讨论】:

  • 谢谢,这很有意义。但是,范围在 (-1,1) 之间的任何函数都不会具有 f(n)^​​2 = O(f(n)) 的属性吗?例如:f(n) =1/x,我们的域来自 (1,infinity)。这样的函数虽然对于算法分析几乎没有用,对吧?
  • Big-O 表示法在实际分析和计算机科学中的使用方式不同。在计算机科学中,我们正在寻找极限,因为 n 趋于无穷大。通常(但不总是)在分析中,极限趋向于零。所以这可能只是符号的问题,在不同的上下文中含义略有不同。
【解决方案2】:

如果A2*log(N) 为界,则exp(A)exp(2*log(N)) 为界,exp(2*log(N)) 大于exp(log(N)) = N

在重新应用 exp() 之前删除“2”时,您的逻辑会崩溃。

【讨论】:

  • 我明白了,所以我的逻辑本质上是这样的: e^(2*log(n)) = e^(log(n)) 这不是真的,因为 e^(2*log (n)) = e^(log(n)) * e^(log(n)) = n*n 和 e^(log(n)) = n,对吧?
猜你喜欢
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多