减法在大 O 符号中有效吗?

Subtraction is valid in big O-notation?

如果我们有f(n)=O(g(n))h(n)=O(x(n)),那么f(n)-h(n)=O(g(n)-x(n))是真的吗?

我不这么认为,因为从 g(n) 中减去 x(n) 时,O 表示法定义中的不等式会被反转,也就是说;因为 f(n)<=c_1g(n) 对于某个常量 c_1h(n)<=c_2x(n) 对于另一个常量 c_2,不清楚我们是否可以直接减去这些项。有什么提示吗?提前致谢。

你是对的。 f(n)O(g(n))h(n)O(x(n)) 并不意味着 f(n)-h(n)O(g(n)-x(n)).

作为反例,只需取 g(n) = x(n) = 1f(n) = 2 以及 h(n) = 1。这显然满足假设,但是 f(n)-h(n) = 1,而 g(n)-x(n) = 0 等说法不成立。

关于区别,您唯一可以说的是 O(max(|h(n)|, |x(n)|))

但是请注意,如果函数允许负值,则加法也是如此。在与编程相关的上下文中,通常假设该函数只取正值,在这种情况下减法只有部分意义。