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

Leetcode刷题:Dijkstra算法空间复杂度及邻接表空间疑问

Dijkstra算法实现的空间复杂度分析

1. Visit集合与优先队列的空间复杂度

你的理解不完全准确,分两部分拆解:

  • visit集合:每个顶点只会被加入一次,空间复杂度确实是O(V),这部分判断正确。
  • 优先队列(maxHeap):你的代码里虽然判断了nei not in visit才入队,但要注意:一个顶点可能在被标记为已访问前,被多条不同路径的条目推入堆中。比如顶点B可能通过顶点A、C分别生成不同概率的路径,在B被弹出堆并加入visit前,这两个条目都会存在于堆里。最坏情况下,堆的大小会达到O(E)(每条边对应一次入堆操作)。
    整体来看,visit+优先队列的总空间复杂度是O(V+E),而非单纯的O(V)。

2. 邻接表(Python dict实现)的空间复杂度

用dict构建的邻接表,空间复杂度确实是O(E)。每条边会被存储一次(无向图则对应两个顶点的邻接列表,总空间还是O(E)量级),顶点本身的存储是O(V),通常我们说邻接表的空间复杂度是O(V+E),但核心边的存储部分符合你判断的O(E)。

补充优化提示

如果想压缩优先队列的空间,可以在入队前增加判断:只有当前路径的概率(或对应问题的最优值)比已知的该顶点最优值更好时,才推入堆。这样能避免同一顶点的无效路径重复入队,让堆的空间更接近O(V)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:14:53