图算法概论
1. 图的表示
图的表示法有两种,邻接表和邻接矩阵法,这两种方法既可以表示有向图也可以用于表示无向图。邻接表方法在稀疏的图中比较节省资源,但是邻接矩阵法在密度比较高的情况下比较好。
2. 搜索算法
搜索一个图示有序地沿着图的边访问所有的定点,图的搜索技术是图算法领域的核心
a. 广度优先搜索(Breadth-first search,BFS)
过程:
对于无向图来说,广度优先搜索也是获得最短路径的算法之一。
广度优先搜索会产生广度优先树。
b. 深度优先搜索(Depth-first search, DFS)
过程:
深度优先搜索会产生深度优先森林。
3. 最小生成树
将所有的顶点连接,并且所有边权值之和最小的树。 最小生成树并不是唯一的,但是权值之和是唯一的。最小生成树,两种贪心方法,Kruskal(/kru:ska:/ 克鲁卡尔)和Prim(普利姆)。
a. Kruskal算法
算法的主要思想是:
I. 将所有边的权值排序,
II. 在未选过的边中,选择其中权值最小的边,如果该边是安全边(连接两个不同的树),就将选择该边,否则丢弃。
b. Prim算法
I.随意选择一个顶点,从该顶点开始,构造树,每次选与该树临近的并且权值最小的顶点。
4. 最短路径
路径,就是从一个顶点到另一个顶点的所有边。一个顶点到另一个顶点的路径有多种,其中路径中边和最小的那个路径叫最短路径。
最短路径有几种情况:
1. 单源最短路径
单源表示单个源节点,单源最短路径就是计算单个源节点到其他各个节点的最短路径。计算方法有 Bellman-ford算法(广泛,可以在存在负权边的情况下)和Dijkstra(/jikstra:/迪杰斯特拉,在不存在负权边的情况下,比bellman-ford有更好的表现)。
2. 一对顶点间的最短路径
可以有单源最短路径计算。
2. 每对顶点间的最短路径
按理来说,单源最短路径可以直接用来计算每对顶点间最短路径,但是在每对顶点间最短路径上是有特殊优化的。计算方法有Floyd-warshall算法(属于动态规划算法)和稀疏图上的Johnson算法。
5. 最大流
什么叫最大流? 举一个简单的例子,假设每条有向边认为是传输物质的管道,每个管道的最大物质通过速度是固定的,管道相互连接,最大流就是物质从入口到出口流动的最大速率。
最大流里面有几个概念,流网络G=(V,E)是一个有向图,每条边(u,v)的权重都是非负的,源点s是入口点,汇点t是出口点。多源点和多汇点的流网络可以简化为单源点,单汇点的问题。
解决最大流的算法有Ford-Fulkerson方法。一些组合问题可以很容易的转换为最大流问题,如最大二分匹配问题。
6. 欧拉路
欧拉路概念:
欧拉回路概念:
7. 哈密顿路
哈密顿路概念:
8. 匹配与覆盖
9. 网络流
残量网络概念:
增广路径概念:
最小费用流:
10. 独立集、团与支配集
独立集:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器