我想了解如何计算密集与稀疏图形的大O. “简而言之算法”说,对于稀疏图,O(E)是O(V),而密集图O(E)更接近O(V ^ 2)。有谁知道这是如何衍生出来的?
答案 0 :(得分:1)
假设图表为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|)
sparsed图的一个很好的例子是互联网,其中每个URL都是一个节点,每个链接都是边缘。
请注意,如果图表不简单,则无法将|E|
与|V|
的任何函数绑定。
答案 1 :(得分:0)
它不是派生的,而是一个定义。在具有自循环的完全连接(有向)图中,边数| E | = | V |²因此密集图的定义是合理的。稀疏图的定义是O(| E |)= O(| V |)的定义,因此每个顶点有一个恒定的最大边数。
注意,如果边缘的数量要小得多,例如, O(lg | V |),那么它仍然是O(| V |)。人们可以想象一个“半稀疏”类的图,其中包含| E | = O(| V | lg | V |)或类似的东西,但我个人从未在实践中遇到过这样的课程。