【问题标题】:When we compute Big-Oh for 50n logn it is O(n log n)? Can we take O(n^5) as Big-Oh?当我们计算 50n logn 的 Big-Oh 时,它是 O(n log n)?我们可以把 O(n^5) 当作 Big-Oh 吗?
【发布时间】:2016-04-14 11:06:28
【问题描述】:

我最近遇到了一些渐近符号,当这个问题出现时,即 50 n logn 并且根据流行的规则来获得 Big-OH​​ 符号是简单地删除常数和低阶项。但 50n logn 也是n^5 的 BIG-OH。 那么为什么 Big-oh 符号最好考虑 O(nlogn) 而不是 O(n^5)。 .

当输入大小在 wolfram 中更改为 0 到 50 时,结果图在这里

【问题讨论】:

  • 为什么说“50n logn 也是 n^5 的 BIG-OH”? FWIW,log(n^5) = 5*log(n),所以 O(log(n^5)) = O(log(n))。
  • 尝试在例如 wolframalpha 中输入50n log n, n^5, from 0 to 50,您会看到对于较大的n,多项式n^5 相对于n log n 变得非常大
  • O() 表示上限,Theta() 表示更准确的范围。
  • 50n logn is also BIG-OH of n^5 请扩展您的意思。如果可以,那么这个问题的框架很糟糕,如果你不能,那你就错了。
  • 因为当你抱怨你的工资有多低时,你更愿意说“我连饭都吃不饱”而不是“我连一辆法拉利都买不起”跨度>

标签: c algorithm data-structures big-o


【解决方案1】:

当您说50.n.log(n) = O(n^5) 时,您是完全正确的。这在数学上没有问题。我们可以找到一个常量C = 1,这样对于所有高于某个值10n,我们都有

|50.n.log(n)| < C.|n^5|

请参阅维基百科了解formal definition

这是毫无疑问的。

如果我们更愿意说50.n.log(n) = O(n.log(n)) 是因为我们经常想知道支配算法复杂性的增长最慢的函数是什么。这通常用于比较算法复杂度。

【讨论】:

  • @fjardon 我想这可能是真正的原因。我也找到了相同的定义
【解决方案2】:

50n log n 不是字面意义上的O(n log n),也不是O(n^5)

50n log n 是一个函数。

O(n log n)O(n log n) 都是函数类,所以50n log n 也不能“成为”。

然而,

50n log nboth 类的成员。根据定义,O(g(n)) 包含所有函数f(n),因此∀n &gt; N: f(n) &lt; Mg(n) 用于某些常量MN。这(令人困惑地)写成f(n) = O(g(n))。大 O 表示法描述函数增长的上限

Big-O 符号系列中的两个类似的函数类别是 Θ(n log n)Θ(n^5)(大写希腊字母 Theta)。这些类小于相应的O 类。 50n log n 属于第一个,但不属于第二个。 Big Theta 表示法描述了严格的双边界限f(n) = Θ(g(n)) 表示 f(n) 的增长速度不会比 g(n) 快也不会慢(直到某个常数因子)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多