对错 - > O(m + n)= O(m)

时间:2015-10-02 06:08:47

标签: graph asymptotic-complexity

  • m =图表中的边数
  • n =图表中的顶点数

假设图G(V,E)是无向并连通的。

我所做的是用(n *(n-1)/ 2)代替m,因为就节点数而言,这是最大可能的边缘。

所以,我发现它是真的,

但是,真正的答案是错误的。

有人可以从概念上解释与Big-Oh复杂性相比的意义吗?

3 个答案:

答案 0 :(得分:3)

边缘m的数量是否正确

是正确的
m <= (n*(n-1)/2)

n*(n-1)/2 = (n^2-n)/2

这意味着问题中的推理产生了

m+n <= (n^2-n)/1+n = O(n^2)

O(m)具有相同的复杂性;然而,以明确考虑边数和节点数的方式说明算法的复杂性比使用(n^2-n)/2的最坏情况边界更精确。

答案 1 :(得分:2)

答案: true

图表已连接=&gt; m >= n-1 =&gt; m = n-1+k其中k >= 0

m <= n(n-1)/2因为如果每2个节点之间有一条边,则不需要更多边。 =&GT; n-1+k <= n(n-1)/2 =&gt; k <= (n-1)(n/2-1) =&gt; k <= (n-1)(n-2)/2

所以,我们m = n - 1 + k 0 <= k <= (n-1)(n-2)/2; k表示超出连接所需最小数量的边数。

O(m+n) = O(n-1+k+n) = O(2n-1+k) = O(2n+k) = a

O(m) = O(n-1+k) = O(n+k) = b

现在,我们来看三种情况:

  • lim(n->inf) n/k = 0

    a = O(k(2n/k + 1)) = O(k)

    b = O(k(n/k + 1)) = O(k)

  • lim(n->inf) n/k = constant

    a = O(2*constant*k + k) = O(another_constant * k) = O(k)

    b = O(constant*k + k) = O(another_constant2 * k) = O(k)

  • lim(n->inf) n/k = inf =&gt; lim(n->inf) k/n = 0

    a = O(n(2 + k/n)) = O(2n) = O(n)

    b = O(n(1 + k/n)) = O(n)

所以,在每种情况下都是如此。

答案 2 :(得分:1)

除了一个例外,你的想法对我来说似乎是正确的。 你能确定两个相同的顶点之间不能有两条或更多条边吗?那么图表不是多图? 否则m = X * (n*(n-1))/2其中X可以增长到无穷大,并且它是问题中的新变量。然后复杂性就像O(X*n*n)

无论如何,方程式仍然是正确的,因为第一个子句中的+n仍然可以省略(因为二次函数&#34;过度充电&#34;线性一个)。