【问题标题】:What does the O(1) in "ln ln n / ln 2 + O(1)" mean?“ln ln n / ln 2 + O(1)”中的 O(1) 是什么意思?
【发布时间】:2013-05-08 16:40:01
【问题描述】:

我很难理解这个公式中的 O(1) 表示法,它代表一个常数吗?为什么人们会使用这样的大 O 表示法?

这个公式来自论文"Balanced Allocations" by Azar et al.,摘要中用到了这个公式:

【问题讨论】:

  • 没有上下文很难说。
  • @dextrous 不,不是。问题不在于 big-O 是什么意思
  • @icepack 这不是最有帮助的答案,但这实际上正是问题所在。 OP 不只是对 Big-Oh 符号的定义感到困惑吗?那个SO帖子回答了它。如果他确实理解了这个定义,那么这里就没有问题了。
  • @roliu- 我不认为 OP 对应用于算法的大 O 表示法的定义以及术语“f(n) + O(n)”的使用感到困惑, 这在基本算法分析中并不常见。

标签: math big-o theory


【解决方案1】:

在这里,术语 O(1) 的意思是“O(1) 的某个术语”,这意味着当 n 趋于无穷大时,某个术语从上方受到某个常数的限制。例如,它可能是 137,或 sin n,或 1 / n2。因此,描述的值可能是 ln ln n / ln 2 + 137,或 ln ln n / ln 2 + sin n 等。

这种大 O 表示法的使用在正式数学中很常见,用于讨论公式中的低阶项,这些项对总和的贡献很小。作者也可以写出整个表达式为 O(ln ln n),但这不如 ln ln n / ln 2 + O(1) 精确,因为它掩盖了 ln ln n 的系数为 1 的事实/ ln 2 并且唯一的低阶增长项由一个常数限制。通过明确写出“+ O(1)”,作者能够给出更好的精度。

希望这会有所帮助!

【讨论】:

  • 非常感谢!我想我明白这一点!
【解决方案2】:

是的,O(1) 表示恒定。未指定常量的确切值,但对于给定的表达式可能并不重要。这些概念通常用作计算中的中间步骤,它消除了对不重要细节的计算。

按如下方式阅读此表达式:执行需要lnlnn/ln2 时间并添加一些常量。将其总结为O(lnlnn)。将O(1) 替换为精确表达式不会改变此结果,因此可以使用O(1) 形式的近似值。

【讨论】:

  • 我更新了我的问题。事实上,它不是关于程序的执行时间,而是关于一个 bin 中的球数的上限。所以O(1)很重要,我不知道怎么理解。
  • O(1) 并不意味着“恒定”。它的意思是“当 n 趋于无穷时,某物从上方以一个常数为界。”
  • @Bloodmoon 你没有指定它所以我假设你在谈论时间。但这并没有改变这个概念 - 在你的情况下,资源是球的数量而不是时间
  • @templatetypedef 从形式上讲,正确。但是没有矛盾——O(1) 可以用那个边界常数代替——如果我们用大 O 来讨论,结果是一样的。希望我的答案现在更清楚
猜你喜欢
  • 1970-01-01
  • 2015-05-02
  • 2012-01-03
  • 1970-01-01
  • 2011-01-14
  • 2015-04-20
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多