【问题标题】:Can you do addition/multiplication with Big O notations?你能用大 O 符号做加法/乘法吗?
【发布时间】:2015-05-11 13:20:22
【问题描述】:

我目前正在学习算法课程,我们正在学习大 O 符号等。上次,我们谈到了如何

O (n^2 + 3n + 5) = O(n^2)

我想知道,如果同样的规则适用于此:

O(n^2) + O(3n) + O(5) = O(n^2)

另外,以下符号是否成立?

O(n^2) + n

O(n^2) + Θ (3n+5)

后面的 n 在 O 之外,所以我不确定它应该是什么意思。在第二种表示法中,我添加了 O 和 Θ 。

【问题讨论】:

  • 我不喜欢在没有定义的情况下使用这种符号,因为不清楚它应该是什么意思。可能,O(x) + O(y) 应该意味着 O(x+y),同样 O(x) + y;当你混合像 O(n^2) + Θ (3n+5) 这样的渐近类时,它仍然变得更加模糊。如果给你一个涉及这类东西的练习,请要求澄清。

标签: algorithm big-o time-complexity


【解决方案1】:

至少出于实际目的,the Landau O(...) can be viewed as a function(因此它的符号很有吸引力)。 This function has properties for standard operations,例如:

O(f(x)) + O(g(x)) = O(f(x) + g(x))
O(f(x)) * O(g(x)) = O(f(x) * g(x))
O(k*f(x)) = O(f(x))

对于定义明确的函数f(x)g(x),以及一些常量k

因此,对于您的示例,

是的:O(n^2) + O(3n) + O(5) = O(n^2)
和:
O(n^2) + n = O(n^2) + O(n) = O(n^2),
O(n^2) + Θ(3n+5) = O(n^2) + O(3n+5) = O(n^2)

【讨论】:

  • 感谢您的回答!但我不完全明白为什么 Θ (3n+5) 可以简单地变成 O(3n+5) ?如果我是正确的,Θ(3n+5) 应该意味着“生长完全像 3n+5”,所以我可以说它也“增长不超过 3n+5”,因此使 Θ(3n+5) = O(3n+5) ?
  • 是的,完全正确。 O(3n+5) 是一个更笼统、更不具体的陈述 --- 你不能做出与O(3n+5) = Θ(3n+5) 相反的陈述,因为从技术上讲n^0.5 = O(n^2)(因为n^2 仍然是一个上限), 但n^0.5 ≠ Θ(n^2)
  • 啊,我想我现在明白了。非常感谢您的帮助:)
  • 你好@DilithiumMatrix 你能告诉我大学/书籍的链接,我可以在其中找到允许步骤 O(n^2) + O(3n+5) = O(n^ 2)请?
【解决方案2】:

符号:

O(n^2) + O(3n) + O(5) = O(n^2)

还有,例如:

f(n,m) = n^2 + m^3 + O(n+m)

滥用相等符号,因为它违反了相等公理。为了更正式地正确,您需要将 O(g(x)) 定义为集合值函数,其值是所有增长速度不超过 g(x) 的函数,并使用集合成员符号表示一个特定的函数是集合的成员。

没有为朗道符号 (Big O) 定义加法和乘法。

【讨论】:

  • 这些例子如何违反(哪个?)平等公理?
  • 对称公理:“如果 a = b,则 b = a”。朗道符号的大多数使用形式为:f(x) = O(g(x)),这意味着“存在常数 N 和 C 使得 |f(x)| N",并不表示相等。 (与专门说“f(x) is O(g(x))”或类似的用法相反)
【解决方案3】:

在复杂性理论中,朗道符号用于函数集。因此O(*) 不代表单个函数,而是代表整个集合。 + 运算符没有为集合定义,但是,在分析函数时,通常使用以下操作:

O(*) + g(n)

这通常表示一组函数,其中g(n) 被添加到O(*) 中的每个函数。结果集可以再次用大 O 表示法表示。

O(*) + O(**)

这是相似的。但是,它的行为类似于一种笛卡尔积。来自O(**) 的每个函数都被添加到来自O(*) 的每个函数中。

O(*) + Θ(*)

同样的规则在这里适用。但是,由于O(*) 的松动,结果通常不能表示为Θ(**)。仍然可以将其表示为O(**)

【讨论】:

    【解决方案4】:

    以下符号也成立

    O(n^2) + n = O(n^2)
    

    O(n^2) + Θ(3n+5) = O(n^2), Θ(n)
    

    希望这是有道理的......

    【讨论】:

      猜你喜欢
      • 2010-09-13
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多