【问题标题】:What is the meaning of O(M+N)?O(M+N)是什么意思?
【发布时间】:2012-08-13 15:55:17
【问题描述】:

这是一个基本问题……但我认为 O(M+N) 与 O(max(M,N)) 相同,因为随着我们走向无穷大,更大的项应该占主导地位?此外,这与 O(min(M,N)) 不同,对吗?我一直看到这个符号,特别是。在讨论图算法时。例如,您通常会看到:O(|V| + |E|)(例如,http://algs4.cs.princeton.edu/41undirected/)。

【问题讨论】:

    标签: performance complexity-theory big-o


    【解决方案1】:

    是的,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 是列。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 嗯,我经常在很多地方看到这个符号,包括非常有名望的人。看看:algs4.cs.princeton.edu/41undirected
      • 希望我的回答能澄清这一点。您始终可以通过重新定义 N=X+Y 将 O(X+Y) 重写为 O(N)。我们是否应该仅仅因为它是“正确”的方式来做到这一点?我说“不”,但其他人可能不同意。
      • 我理解它的意思是“线性”。恕我直言,这是一个很好的捷径,意思是“在术语中占主导地位的线性”。
      【解决方案3】:

      我知道这是一个旧线程,但是当我现在正在研究这个时,我想我会为那些目前正在搜索类似问题的人添加两分钱。

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

      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|。

      非常感谢,希望这对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 2010-12-26
        • 2011-10-22
        • 2023-02-08
        • 2012-01-03
        • 1970-01-01
        • 2011-01-14
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多