【发布时间】:2021-01-21 11:31:42
【问题描述】:
我假设在表示邻接表时,我们需要遍历所有顶点及其邻居,因此构建邻接表的时间复杂度为 O(|V| * k) 其中 V 是顶点的集合,k是某个顶点具有的邻居数(如果图完整,则 k = |V| - 1)。然而,我遇到的每个资源都表明构建邻接表的时间复杂度是 O(|E|),其中 E 是边的集合。
由于我们正在考虑最坏情况,因此图的最坏情况是连通图,其中 |E|等于 (|V| 2) = (|V| * (|V|-1))/2。如上所述,从完整图构建邻接列表需要遍历所有顶点及其邻居。该操作的时间复杂度为 |V| * k 其中 k 是 |V|-1。所以,它应该是 O(|V| * (|V|-1)) => O(|V|^2)。 既然我们发现边数是(V * (V-1)) / 2 => O(|V|^2),那么两个复杂度O(|V| * k)和O(|E| ) 应该是一样的。
让我困惑的是为什么人们更喜欢使用 O(|E|) 而不是 O(|V| * k)?
【问题讨论】:
标签: algorithm graph big-o complexity-theory