图论

简介: 图论

图论 最小生成树相关概念

  • 连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图。
  • 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连通图。
  • 连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个顶点的代价,称这种连通图叫做连通网。
  • 生成树: 一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点,但只有足以构成一棵树的n-1条边。一颗有n个顶点的生成树有且仅有n-1条边,如果生成树中再添加一条边,则必定成环。
  • 最小生成树:在连通网里面,代价最小的生成树便是最小生成树

最小生成树(Prim&Kruskal)

  • 实例:如电路网怎么建设成本最低
  • Prim(普里姆)算法
  • Prim算法可以称为加点法,每次选择代价最小的边的点,从任一顶点开始,直至覆盖所有点
  • 算法思想:贪心
  • 算法流程:
  • 令图的所有顶点集合位V;初始令集合u={s},v=V−u
  • 寻找集合u,v中可以组成最小权重边(u0,v0)并且加入到集合u中
  • 重复上述步骤,直到生成n-1条边或者n个顶点为止
  • 普里姆算法如图:
  • Kruskal(克鲁斯卡尔)算法
  • Kruskal算法可以成为加边法,初始的生成边数为0,每次迭代选择最小代价的边,加入到最小生成树的边集合里面
  • 算法思想:贪心
  • Kruskal算法流程:
  • 将图的所有边按照代价从小到大进行排序
  • 将图中的n个顶点看成n个树构成的森林
  • 按照权值从小到大选择边,所选的边的两个顶点应该属于独立的树,则将它们连接成一棵树
  • 重复第三步,直到全部顶点都属于一棵树,或者有n-1条边为止
  • 克鲁斯卡尔算法流程:
  • Prim算法对于点操作,适用于稠密图;Kruskal算法对边进行操作,适用于稀疏图

最短路径

  • 路径长度:指路径所经历的边的数目
  • 带权路径长度:指路径所经过的边的权值之和
  • 最短路径:指带权路径值最小的路径

最短路径(Dijkstra&Floyd)

  • Dijkstra(迪杰斯特拉算法):
  • 用于求某点到其余各点的最短路径(只能计算权值大于0的边)
  • 算法思想:
  • 贪心思想
  • 设存在顶点集合U、T;U中包含了已经确定的最小权值路径的点,T中包含未确定的最小权值路径的点
  • 初始状态时:U中只包含了U0源点
  • 接下来从T中选择距离U0权值最小的点,加入U中
  • 集合U中每新增一个节点,都需要刷新U0到T中剩余元素的最小权值;新增加的U节点权值为原先权值与新增加U之后的节点的最小值
  • 重复3、4步骤,直到T中的所有节点在U中
  • 算法流程图:
  • Floyd(弗洛伊德算法):
  • 用于计算每一对顶点之间的最短距离
  • 算法思想:
  • 弗洛伊德算法的核心是DP,dp[i][j]=Math.min(dp[i][j],dp[i][k]+dp[k][j]);
  • 弗洛伊德算法模板:

   

//k为中转节点
        for(int k = 1; k <= n; k++)
            //i为开始节点
            for(int i = 1; i <= n; i++)
                //j为结束节点
                for(int j = 1; j <= n; j++)
                    //以k中间节点,求i至j的最低代价
                    if(a[i][j] > a[i][k]+a[k][j])
                        a[i][j] = a[i][k]+a[k][j];

  • Floyd算法流程:image.png
目录
相关文章
|
开发工具 Android开发 数据安全/隐私保护
Cocos Creator Android 平台 Facebook 原生登录(一)
Cocos Creator Android 平台 Facebook 原生登录
729 0
|
存储 安全 网络协议
Web Security 之 CSRF
Web Security 之 CSRF
243 0
|
5月前
|
人工智能 Java API
MCP协议重大升级,Spring AI Alibaba联合Higress发布业界首个Streamable HTTP实现方案
本文由Spring AI Alibaba Contributor刘军、张宇撰写,探讨MCP官方引入的全新Streamable HTTP传输层对原有HTTP+SSE机制的重大改进。文章解析Streamable HTTP的设计思想与技术细节,并介绍Spring AI Alibaba开源框架提供的Java实现,包含无状态服务器模式、流式进度反馈模式等多种场景的应用示例。同时,文章还展示了Spring AI Alibaba + Higress的完整可运行示例,分析当前实现限制及未来优化方向,为开发者提供参考。
LabVIEW使用VI脚本向VI添加对象
LabVIEW使用VI脚本向VI添加对象
188 2
|
11月前
|
数据可视化 算法 Java
JAVA规则引擎工具
本文介绍了六款常用的Java规则引擎:Drools、IBM ODM、Easy Rules、jBPM、OpenL Tablets 和 Apache Camel。每款引擎都有其独特的特点和适用场景,如Drools的高效规则匹配、IBM ODM的Web界面管理、Easy Rules的轻量级特性、jBPM的流程管理、OpenL Tablets的Excel规则定义以及Apache Camel的路由和规则结合。选择合适的规则引擎可以显著提高系统的灵活性和可维护性。
740 0
|
12月前
|
存储 算法 Linux
CTF—GIF文件格式、隐写方法及案例
CTF—GIF文件格式、隐写方法及案例
445 0
|
存储 算法 Unix
虚拟内存管理
虚拟内存管理
186 0
|
11月前
|
域名解析 缓存 网络协议
【网络】DNS,域名解析系统
【网络】DNS,域名解析系统
219 1
|
计算机视觉 Python
10个使用NumPy就可以进行的图像处理步骤
这篇文章介绍了使用NumPy进行图像处理的10个基本步骤,包括读取图像、缩小图像、水平和垂直翻转、旋转、裁剪、分离RGB通道、应用滤镜(如棕褐色调)、灰度化、像素化、二值化以及图像融合。通过这些简单的操作,读者可以更好地掌握NumPy在图像处理中的应用。示例代码展示了如何实现这些效果,并配有图像结果。文章强调这些方法适合初学者,更复杂的图像处理可使用专门的库如OpenCV或Pillow。
361 5
|
SQL 数据处理 数据库
提升数据处理效率:深入探讨Entity Framework Core中的批量插入与更新操作及其优缺点
【8月更文挑战第31天】在软件开发中,批量插入和更新数据是常见需求。Entity Framework Core 提供了批处理功能,如 `AddRange` 和原生 SQL 更新,以提高效率。本文通过对比这两种方法,详细探讨它们的优缺点及适用场景。
444 0