You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

邻接表存储无向图traversal算法最坏时间复杂度求解

算法时间复杂度分析问题

设$G=(V, E)$为一个拥有$n$个顶点且$m>n$条边的无向连通图,所有顶点初始未标记且存储在数组$V$中,考虑以下算法:

Algorithm traversal(G)
Input: Undirected, connected graph G.
c←0
for i ← 0 to n − 1 do {
     u ← V [i]
     for each edge (u, v) incident on u do {
           Mark u
           if v is not marked then c ← c + 1 }
}

假设$G$以邻接表存储,算法traverse(G)最坏情况下的时间复杂度是什么?选项如下:

  • (A) O(n)
  • (B) O(n²)
  • (C) O(n × degree(u))
  • (D) O(m)
  • (E) O(nm)

正确答案:(D) O(m)

推导过程:

  1. 邻接表遍历特性:无向图的邻接表中,每条边会被存储两次(分别在两个端点的邻接链表中),遍历所有顶点的邻接边的总次数为$2m$,属于$O(m)$量级。
  2. 算法执行逻辑:外层循环遍历$n$个顶点,但每个顶点的内层循环仅遍历自身的邻接边(次数等于该顶点的度数$\text{degree}(u)$)。根据无向图的握手定理,所有顶点的度数之和$\sum_{u \in V} \text{degree}(u) = 2m$,因此总遍历操作次数与$m$线性相关。
  3. 错误选项排除:
    • (A) 显然不成立,$m>n$时遍历边的次数远多于顶点数。
    • (B) 仅在完全图($m=\frac{n(n-1)}{2}$)这类特殊场景下等价于$O(n^2)$,但这只是$O(m)$的特例,并非通用最坏情况复杂度。
    • (C) $\text{degree}(u)$是单个顶点的度数,该表达式无法代表总遍历次数,总次数是所有顶点度数之和而非$n$乘以某个顶点的度数。
    • (E) $O(nm)$错误,邻接表中每个顶点仅遍历自身邻接边,不会重复遍历所有$m$条边$n$次,总操作次数仅为$O(m)$级别。

内容的提问来源于stack exchange,提问作者nitr0_nick03

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 00:25:55