【发布时间】:2012-02-20 16:32:59
【问题描述】:
我想了解如何计算密集图与稀疏图的大 O。 “算法简而言之”说,对于稀疏图,O(E) 是 O(V),而对于密集图,O(E) 更接近 O(V^2)。有谁知道这是怎么推导出来的?
【问题讨论】:
标签: graph-algorithm
我想了解如何计算密集图与稀疏图的大 O。 “算法简而言之”说,对于稀疏图,O(E) 是 O(V),而对于密集图,O(E) 更接近 O(V^2)。有谁知道这是怎么推导出来的?
【问题讨论】:
标签: graph-algorithm
假设图是simple - 在最坏的情况下,每个节点都可以连接到所有|V|-1 其他节点,导致[在非有向图中:]|E| = (|V|-1) + (|V| -2) + ... + 1 <= |V| * (|V| -1) = O(|V|^2)。在有向图中:|E| = |V| * (|V|-1) = O(|V|^2)。
密集图的一个很好的例子是clique - 它有所有的边。
对于稀疏图 - 我们假设连接到每个顶点的边数由一个常数限制。让这个常数为k。因此:|E| <= k* |V|,我们得到|E| = O(|V|)
互联网是稀疏图的一个很好的例子,其中每个 URL 都是一个节点,每个链接都是一条边。
注意,如果图形不简单,则不能将|E|与|V|的任何函数绑定。
【讨论】:
它不是派生的,它是一个定义。在具有自环的全连接(有向)图中,边数 |E| = |V|² 所以密集图的定义是合理的。稀疏图的定义是 O(|E|) = O(|V|),因此每个顶点的最大边数是恒定的。
请注意,如果边数少得多,例如O(lg |V|),那么它仍然是 O(|V|)。可以想象一个带有 |E| 的“半稀疏”类图。 = O(|V| lg |V|) 之类的,但我个人在实践中从未遇到过这样的类。
【讨论】: