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

为什么广度优先搜索(BFS)的时间复杂度为O(n+m)?

enter image description here

在最坏场景下,首个while循环需要遍历图中的全部节点,这部分开销为n量级。对于每个被访问的节点,算法都需要检查其所有邻接节点/边,我原本推导认为该过程的时间复杂度应该是 O(n * 最大节点度 deg(u))。

但检索到的所有解答都表示,由于算法仅需访问每个节点、每条边各一次,因此整体时间复杂度为 O(n + m)。这里的核心困惑是:遍历邻接节点/边的过程中会碰到已经访问过的重复节点,只是碰到这类已访问节点时不会将其重复加入待遍历列表,这类检查操作依然会产生运行时开销,为什么没有被计入总复杂度?

具体示例

对于结构为 a->b->c 的图,我们从节点a出发执行遍历:

  • 从节点a出发,检查其邻接节点b,将b加入待遍历列表
  • 接着前往节点b,从b出发检查邻接节点a和c,其中a是已访问节点,因此将c加入待遍历列表,之后再前往节点c
  • 可见在从节点b向外探索的过程中,对应的操作数是O(2),即O(deg(b))量级,并没有因为a是已访问节点就省去这次检查的时间开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 10:15:04