O(M + N)是什么意思?

时间:2012-08-13 15:55:17

标签: performance complexity-theory big-o

这是一个基本问题......但我认为O(M + N)与O(max(M,N))相同,因为当我们进入无穷大时,较大的项应该占主导地位?而且,这与O(min(M,N))不同,是吗?我一直看到这种符号,尤其是在讨论图算法时。例如,您经常看到:O(| V | + | E |)(例如http://algs4.cs.princeton.edu/41undirected/)。

3 个答案:

答案 0 :(得分:8)

是,O(M + N)与O(max(M,N))的含义相同。这与O(min(M,N))不同。正如@Dr_Asik所说,O(M + N)在技术上是线性O(N)但是当M和N有意义时,能​​够说“线性在什么?”是很好的。想象一下,算法的行数和列数是线性的。我们可以定义N = rows + cols并说O(N)或者我们可以说O(M + N)其中M是行,N是列。

答案 1 :(得分:2)

线性时间记为O(N)。由于(M + N)是线性函数,因此也应简单地注意O(N)。同样地,将O(1)与O(2),O(10)等进行比较是没有意义的,它们都是恒定的时间,应该都注意到O(1)。

答案 2 :(得分:1)

我知道这是一个老话题,但是当我正在研究这个时,我想我会为目前搜索类似问题的人增加两分钱。

我认为在表示为adjacency list的图形的上下文中,O(n + m)正是如此,并且由于以下原因而无法更改:

1)O(n + m)= O(n)+ O(m),但O(m)上限为O(n ^ 2),因此 O(n + m)= O(n)+ O(n ^ 2)= O(n ^ 2)。然而,这纯粹仅仅是n,也就是说,它只考虑顶点并给出一个弱上界(弱,因为它试图用顶点表示边)。这确实表明O(n)不等于O(n + m),因为与顶点相比,可能是一个二次数量的边。

2)说O(n + m)考虑了在实现算法时必须通过的所有元素,该算法被简化为Breadth First Search(BFS)。因为它只考虑图中的所有元素一次,它可以被认为是线性的,并且是一个更严格的分析,用n ^ 2对边缘进行上限。为了表示法,可以写出类似n = | V |的东西+ | E |因此BFS运行是O(n)并给读者一种线性感,但一般来说,正如OP提到的那样,它写成O(n + m),其中 n = | V |和m = | E |。

非常感谢,希望这有助于某人。