图算法

23+ 个基本图算法的综合指南,包含复杂度分析、用例和交互式可视化。

试用交互式平台

图遍历

广度优先搜索 (BFS)

逐层探索图,在深入之前访问所有邻居。使用队列数据结构来维护探索顺序。

时间复杂度: O(V + E)
空间复杂度: O(V)
用例: 无权图中的最短路径,层序遍历,查找连通分量

深度优先搜索 (DFS)

在回溯之前沿着每个分支尽可能深入地探索。使用栈(或递归)来跟踪探索路径。

时间复杂度: O(V + E)
空间复杂度: O(V)
用例: 拓扑排序,环检测,路径查找,迷宫求解

拓扑排序

有向无环图 (DAG) 中顶点的线性排序,其中每个顶点都出现在它所指向的所有顶点之前。

时间复杂度: O(V + E)
空间复杂度: O(V)
用例: 任务调度,依赖解析,构建系统,课程先决条件

欧拉路径

在无向图中找到恰好访问每条边一次的路径。当图有恰好 0 或 2 个奇度顶点时存在。

时间复杂度: O(V + E)
空间复杂度: O(V)
用例: 路线规划,拼图求解,电路设计,DNA 测序

最短路径算法

迪杰斯特拉算法

在具有非负边权重的加权图中,从源顶点到所有其他顶点找到最短路径。

时间复杂度: O((V + E) log V)
空间复杂度: O(V)
用例: GPS 导航,网络路由,社交网络

贝尔曼-福特算法

从源顶点找到最短路径并检测负权重环。适用于负边权重。

时间复杂度: O(VE)
空间复杂度: O(V)
用例: 货币套利检测,网络协议

弗洛伊德-沃歇尔算法

使用动态规划和中间顶点找到所有顶点对之间的最短路径。

时间复杂度: O(V³)
空间复杂度: O(V²)
用例: 全对最短路径,传递闭包

最小生成树

普里姆算法

通过从单个顶点开始生长来构建最小生成树,总是添加连接到新顶点的最小权重边。

时间复杂度: O((V + E) log V)
空间复杂度: O(V)
用例: 网络设计,聚类算法

克鲁斯卡尔算法

通过对所有边进行排序并使用并查集来避免环路,同时添加最小权重边来构建最小生成树。

时间复杂度: O(E log E)
空间复杂度: O(V)
用例: 网络设计,电路设计,聚类

博鲁夫卡算法

使用并行基于组件的方法构建最小生成树,适用于分布式计算环境。

时间复杂度: O(E log V)
空间复杂度: O(V)
用例: 并行 MST 计算,分布式算法

图连通性

塔扬强连通分量算法

使用DFS和low-link值以及栈在有向图中查找强连通分量。

时间复杂度: O(V + E)
空间复杂度: O(V)
用例: 依赖分析,社交网络分析

科萨拉朱强连通分量算法

使用两次DFS遍历查找强连通分量:一次在原图上,一次在转置图上。

时间复杂度: O(V + E)
空间复杂度: O(V)
用例: 网络爬虫,依赖解析

关节点

查找在无向图中移除后会增加连通分量数量的顶点。

时间复杂度: O(V + E)
空间复杂度: O(V)
用例: 网络可靠性,关键基础设施分析

桥查找

查找在无向图中移除后会增加连通分量数量的边。

时间复杂度: O(V + E)
空间复杂度: O(V)
用例: 网络可靠性,关键路径分析

二分图检查

确定图是否可以用恰好两种颜色着色,使得没有相邻顶点共享相同颜色。

时间复杂度: O(V + E)
空间复杂度: O(V)
用例: 匹配问题,调度,资源分配

特殊算法

环检测

使用DFS和并查集等各种技术检测有向图和无向图中环的存在。

时间复杂度: O(V + E)
空间复杂度: O(V)
用例: 死锁检测,依赖分析

哈密顿路径

使用回溯和动态规划技术找到恰好访问每个顶点一次的路径。

时间复杂度: O(2ⁿ × n²)
空间复杂度: O(2ⁿ × n)
用例: 旅游规划,优化问题

旅行商问题

找到恰好访问每个城市一次并返回起点的最短可能路线。

时间复杂度: O(n² × 2ⁿ)
空间复杂度: O(n × 2ⁿ)
用例: 路线优化,物流,电路板钻孔

图着色

为顶点分配颜色,使得没有两个相邻顶点共享相同颜色,使用最少的颜色数量。

时间复杂度: O(V × 2ⱽ)
空间复杂度: O(2ⱽ)
用例: 调度,寄存器分配,频率分配

最大团

找到最大的完全子图,其中每对顶点都由一条边连接。

时间复杂度: O(3ⁿ/³)
空间复杂度: O(V)
用例: 社交网络分析,生物信息学,数据挖掘

弦图检查

确定图是否为弦图(长度为4或更多的每个环都有一条弦 - 连接环中两个非相邻顶点的边)。

时间复杂度: O(V + E)
空间复杂度: O(V)
用例: 完美图识别,优化问题

网络流

最大流

使用Ford-Fulkerson等算法和增广路径在流网络中找到从源到汇的最大流。

时间复杂度: O(V²E)
空间复杂度: O(V²)
用例: 网络容量规划,资源分配,二分匹配

最小割

找到将源与汇分离的最小容量割,通过最大流最小割定理与最大流密切相关。

时间复杂度: O(V²E)
空间复杂度: O(V²)
用例: 网络可靠性,图像分割,聚类

准备好探索这些算法了吗?

体验所有这些算法的交互式可视化和逐步执行。

启动交互式平台