Algorithm 你能用大O符号做加法/乘法吗?

Algorithm 你能用大O符号做加法/乘法吗?,algorithm,big-o,time-complexity,Algorithm,Big O,Time Complexity,我目前正在学习一门算法课,我们正在学习大O符号等等。上次,我们讨论了如何 O (n^2 + 3n + 5) = O(n^2) 我想知道,是否同样的规则也适用于此: O(n^2) + O(3n) + O(5) = O(n^2) 此外,下列符号是否适用 O(n^2) + n 或 后面的n在O之外,所以我不确定它应该是什么意思。在第二个符号中,我添加了O和Θ。符号: O(n^2) + O(3n) + O(5) = O(n^2) 以及,例如: f(n,m) = n^2 + m^3 + O(n+m

我目前正在学习一门算法课,我们正在学习大O符号等等。上次,我们讨论了如何

O (n^2 + 3n + 5) = O(n^2)
我想知道,是否同样的规则也适用于此:

O(n^2) + O(3n) + O(5) = O(n^2)
此外,下列符号是否适用

O(n^2) + n

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

符号:

O(n^2) + O(3n) + O(5) = O(n^2)
以及,例如:

f(n,m) = n^2 + m^3 + O(n+m)
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))
滥用平等符号,因为它违反了平等公理。更正式地说,您需要将O(g(x))定义为集值函数,其值是所有增长速度不超过g(x)的函数,并使用集成员关系表示法来指示特定函数是集的成员


朗道符号(大O)未定义加法和乘法

以下符号也适用

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


希望它有意义…

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

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

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


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

至少出于实际目的,(因此其表示法具有吸引力),例如:

f(n,m) = n^2 + m^3 + O(n+m)
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)

我不喜欢在没有定义它的情况下使用这种符号,因为它不清楚它应该是什么意思。很可能,O(x)+O(y)应该意味着O(x+y),同样地,O(x)+y;当你混合像O(n^2)+Θ(3n+5)这样的渐近类时,它变得更加模糊。如果给你一个涉及这类东西的练习,请你澄清。这些例子是如何违反(哪个?)平等公理的?对称公理:“如果a=b,那么b=a”。朗道符号的大多数用法是:f(x)=O(g(x)),意思是“存在常数N和C,使得| f(x)| N”,而不是表示相等。(与“f(x)是O(g(x))”或类似用法相反)谢谢你的回答!但我不完全理解为什么Θ(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)
啊,我想我现在明白了。非常感谢您的帮助:)
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))