0

0

如何分析图遍历算法的空间复杂度:以邻接矩阵+BFS为例

花韻仙語

花韻仙語

发布时间:2026-01-11 12:48:08

|

653人浏览过

|

来源于php中文网

原创

如何分析图遍历算法的空间复杂度:以邻接矩阵+BFS为例

本文详解在使用邻接矩阵存储无向图并执行bfs路径判定时,如何准确计算整体空间复杂度——需同时考虑输入结构(o(v²)邻接矩阵)与算法辅助空间(o(v)队列和visited数组),最终空间复杂度为o(v²)。

在算法分析中,“空间复杂度”常被误认为仅指函数内部申请的额外空间(即辅助空间),但严格定义下,空间复杂度 = 输入数据所占空间 + 辅助空间。这一点对图算法尤为重要,因为图的存储方式会显著影响总空间开销。

以您提供的代码为例:图采用 V×V 邻接矩阵 adjMatrix 表示(其中 V 为顶点数)。该二维数组在堆内存中占据 O(V²) 空间——这是输入本身带来的不可忽略的开销。即使 BFS 函数 hasPath1 内部仅使用了:

  • 一个 Queue:最坏情况下入队所有顶点(如链状图从起点遍历到终点),空间为 O(V)
  • 一个 boolean[] visited 数组:长度为 V,空间为 O(V)
  • 若干常量变量(n, vertex, i 等):O(1)

因此,辅助空间总计为 O(V)。但若题目问的是“整个程序的空间复杂度”(即 main 中构建图 + 调用 BFS 的全过程),则必须计入邻接矩阵的 O(V²) 存储开销:

int[][] adjMatrix = new int[n][n]; // ← 占用 O(n²) = O(V²) 空间
boolean visited[] = new boolean[n]; // ← 占用 O(V) 空间
Queue queue = new LinkedList<>(); // ← 最坏 O(V) 空间

✅ 正确结论:

DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

下载
  • BFS 算法本身的辅助空间复杂度为 O(V)
  • 整个解决方案(含输入图存储)的空间复杂度为 O(V²)

⚠️ 注意事项:

  • 若改用邻接表(如 List[] graph 或 HashMap>),输入空间可降至 O(V + E),此时整体空间复杂度通常为 O(V)(因 E ≤ V²,但稀疏图中 E ≪ V²);
  • LinkedList 作为队列虽方便,但其节点对象存在额外内存开销;若追求极致空间效率,可考虑循环数组实现的队列(需预分配大小);
  • visited 数组不可省略——缺少它将导致重复入队、无限循环或错误结果,它是 BFS 正确性的必要空间代价。

总结:判断空间复杂度时,务必明确分析范围——是“纯算法逻辑”还是“端到端程序”。对于图问题,存储结构的选择(邻接矩阵 vs 邻接表)往往是空间复杂度的决定性因素。在面试或系统设计中,应主动澄清上下文,避免因定义偏差导致结论错误。

相关专题

更多
java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

348

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

23

2025.11.30

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1463

2023.10.24

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

386

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

568

2023.08.10

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

398

2023.08.14

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

78

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

45

2026.01.09

学python好用的网站推荐
学python好用的网站推荐

本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

118

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号