当前位置: 首页 > article >正文

算法与数据结构 - 常用图算法总结

在图论中,图算法非常重要,广泛应用于计算机科学、网络分析、社交网络、地理信息系统等领域。下面是一些常用的图算法,按不同功能和应用场景分类:

1. 图的遍历

图遍历算法用于遍历图中的节点和边。主要有两种常见的图遍历方法:

  • 深度优先搜索 (DFS)

    • 从一个起始节点开始,尽可能深的搜索每一个分支,直到没有未被访问的节点为止。

    • 适用于拓扑排序、路径搜索等。

  • 广度优先搜索 (BFS)

    • 从起始节点开始,优先访问距离起始节点最近的节点,然后依次访问更远的节点。

    • 适用于最短路径问题、图的连通性检查等。

2. 最短路径算法

这些算法用于计算图中两个节点之间的最短路径。

  • Dijkstra 算法

    • 用于解决带权图中的单源最短路径问题,适用于图中所有边的权值都为非负数的情况。

    • 常用于路由、网络优化等。

  • Bellman-Ford 算法

    • 适用于带权图,能够处理负权边,但时间复杂度较高(O(VE))。

    • 可以检测图中是否有负权回路。

  • Floyd-Warshall 算法

    • 计算图中所有节点对之间的最短路径。

    • 适用于稠密图,时间复杂度为 O(V³)。

  • A 算法*:

    • 一种启发式搜索算法,适用于图的最短路径计算,特别是在带有启发式信息的情况下。

    • 常用于游戏开发、路径规划等。

3. 最小生成树

最小生成树算法用于在一个连通图中找出一个包含所有节点的生成树,且其边的权值之和最小。

  • Kruskal 算法

    • 适用于稀疏图,通过按边的权值从小到大排序并采用并查集来合并边,直到形成最小生成树。

    • 时间复杂度 O(E log E)。

  • Prim 算法

    • 适用于稠密图,从一个起始节点开始,不断扩展最小生成树,直到所有节点都被包含。

    • 时间复杂度 O(V²) 或 O(E log V)(使用优先队列时)。

4. 图的连通性

这些算法帮助判断图的连通性、寻找图中的联通分量。

  • 联合查找(Union-Find)

    • 通过并查集数据结构快速判断两个节点是否属于同一个连通分量,或者将两个分量合并为一个。

    • 常用于 Kruskal 算法的实现。

  • Tarjan 算法

    • 用于找图的强连通分量(SCC),即从一个节点出发能够到达另一个节点的所有节点集合。

  • Kosaraju 算法

    • 另一种用于寻找强连通分量的算法,基于 DFS。

5. 拓扑排序

拓扑排序用于有向无环图(DAG)中,确定节点的线性顺序。

  • Kahn 算法

    • 使用入度为 0 的节点来进行拓扑排序,通过逐步删除节点及其关联的边来完成排序。

  • DFS 拓扑排序

    • 通过 DFS 遍历图,并在每个节点完成处理后将节点压入栈中,最终栈中的顺序即为拓扑排序。

6. 图的匹配算法

图的匹配算法用于寻找图中节点之间的匹配。

  • 匈牙利算法

    • 用于求解二分图的最大匹配问题。

    • 时间复杂度 O(V²)。

  • Kuhn-Munkres 算法(KM 算法)

    • 用于解决最大权匹配问题。

7. 图的染色算法

图的染色算法用于给图中的节点或边着色,通常是为了满足某些约束条件。

  • 贪心染色算法

    • 用于图的着色问题,尝试为每个节点分配最小编号的颜色,保证相邻节点不同色。

  • 回溯染色

    • 通过回溯法来为图中的节点分配颜色。

8. 图的流问题

图的最大流和最小割问题用于解决在网络中流量的最大传输问题。

  • Ford-Fulkerson 算法

    • 用于计算最大流。

    • 通过寻找增广路径来增加流量,直到无法再找到增广路径。

  • Edmonds-Karp 算法

    • 是 Ford-Fulkerson 的一种实现,基于 BFS 查找增广路径,时间复杂度 O(VE²)。

  • Dinic 算法

    • 通过分层网络加速增广路径查找,适用于大型图。

9. 图的距离问题

在某些图中,计算节点之间的距离是一个常见问题。

  • Floyd-Warshall 算法(重复使用):适用于计算图中所有节点对之间的最短路径。

  • 单源最短路径(Dijkstra):适用于计算单源的最短路径。

10. 图的割问题

这些算法帮助解决如何分割图,使得分割后的各部分满足某些条件。

  • Stoer-Wagner 最小割算法

    • 用于计算图的最小割,解决网络流的最小割问题。

这些算法中的每一种都可以在不同的应用场景下发挥作用,解决特定的图论问题。如果你有兴趣了解某个算法的细节或示例,随时告诉我!

相关文章:

算法与数据结构 - 常用图算法总结

在图论中,图算法非常重要,广泛应用于计算机科学、网络分析、社交网络、地理信息系统等领域。下面是一些常用的图算法,按不同功能和应用场景分类: 1. 图的遍历 图遍历算法用于遍历图中的节点和边。主要有两种常见的图遍历方法&am…...

克里金模型+多目标优化+多属性决策!Kriging+NSGAII+熵权TOPSIS!

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 克里金模型多目标优化多属性决策!KrigingNSGAII熵权TOPSIS!!matlab2023b语言运行! 1.克里金模型(Kriging Model)是一种基于空间统计学的插值方法…...

LLM 论文精读(三)Demystifying Long Chain-of-Thought Reasoning in LLMs

这是一篇2025年发表在arxiv中的LLM领域论文,主要描述了长思维链 Long Chain-of-Thought 对LLM的影响,以及其可能的生成机制。通过大量的消融实验证明了以下几点: 与shot CoT 相比,long CoT 的 SFT 可以扩展到更高的性能上限&…...

【Prompt工程—文生图】案例大全

目录 一、人物绘图 二、卡通头像 三、风景图 四、logo设计图 五、动物形象图 六、室内设计图 七、动漫风格 八、二次元图 九、日常场景图 十、古风神化图 十一、游戏场景图 十二、电影大片质感 本文主要介绍了12种不同类型的文生图技巧,通过加入不同的图像…...

本地可执行命令的智能体部署方案

本地可执行命令的智能体部署方案,目标是让大语言模型(LLM)在本地接收自然语言指令,并自动调用系统命令、脚本或应用程序,完成任务自动化。这类系统通常被称为 LLM Agent with Tool Use 或 本地 Agent 实体系统。 &…...

rust程序静态编译的两种方法总结

1. 概述 经过我的探索,总结了两种rust程序静态编译的方法,理论上两种方法都适用于windows、mac os和linux(mac os未验证),实测方法一性能比方法二好,现总结如下,希望能够帮到你. 2.方法一 2.1 添加配置文件 在项目的同级文件夹下新…...

验证码(笔记)

为什么要有验证码: 为什么验证码这么让人厌烦,每个网站还要使用它呢?换句话说,这些网站为什么要“故意为难”用户呢? 其实验证码主要是为了区分用户是计算机还是人。假设一个黑客知道了你的账号,根据账号可…...

【Linux系列】目录大小查看

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

2048游戏(含Python源码)

前言 相关参考游戏: 像素飞机大战(含Python源码)-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/147693018?spm1001.2014.3001.5501使用DeepSeek定制Python小游戏——以“俄罗斯方块”为例-CSDN博客https://blog.csdn.n…...

SwiftData 数据持久化解决方案

什么是 SwiftData? SwiftData 是苹果在 WWDC23 上推出的全新数据持久化框架,它构建在 Core Data 之上,但提供了更加 Swift 友好的 API。SwiftData 旨在简化数据模型的创建和管理,让开发者能够以更少的代码实现强大的数据持久化功…...

中间件-RocketMQ

RocketMQ 基本架构消息模型消费者消费消息模式顺序消息机制延迟消息批量消息事务消息消息重试最佳实践 基本架构 nameServer: 维护broker列表信息,客户端连接时只需要连接nameServer。可配置成集群。 broker:broker分为master和slave,master负…...

PostgreSQL 的 pg_current_logfile 函数

PostgreSQL 的 pg_current_logfile 函数 pg_current_logfile() 是 PostgreSQL 9.6 版本引入的一个系统管理函数,用于获取当前正在使用的日志文件路径。 一 基本用法 1 函数定义 pg_current_logfile([text]) → text2 简单查询 -- 获取当前日志文件路径 SELECT …...

Python就业方向有哪些?

Python 作为一门通用、易学且功能强大的编程语言,在多个领域都有广泛的应用,因此就业方向也非常多样化。以下是 Python 主要的就业方向及相关技能要求。 1. Web 开发 岗位:Python Web 开发工程师、后端工程师、全栈工程师技术栈&#xff1a…...

iptables 访问控制列表使用记录

iptables 是linux操作系统上自带的防火墙程序,功能强大,能够依据策略过滤掉一些恶意访问流量,本次记录一下iptables的常见使用方法,未尽之处,欢迎补充。 一、iptables 下载 我这里使用的是华为openEuler 22.03版本&am…...

16. Qt系统相关:事件、定时器

1. Qt事件 1.1 简介 事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用一个对象来表示一个事件。所有的Qt事件均继承于抽象类QEvent。事件是由系统或者Qt平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候&#…...

云平台搭建

物联网云平台的基本概述 基本概念 随着物联网技术的快速发展,越来越多的设备需要接入网络以实现智能化功能,物联网平台应运而生。 物联网云平台(IoT Cloud Platform)是物联网生态系统中的核心组件,它通过提供一系列…...

数学实验(Matlab语言环境和线性代数实验)

一、Matlab语言环境和线性代数实验 1.Matlab语言环境 Matlab简介 Matlab:Matrix Laboratry 矩阵实验室 Matlab 提供了强大的科学计算、灵活的程序设计流程、高质量的图形可视化与界面设计等功能,被广泛应用于科学计算、控制系统、信息处理等领域的分…...

sherpa:介绍

更多内容:XiaoJ的知识星球 目录 1. sherpa 介绍 1. sherpa 介绍 sherpa是 Next-gen Kaldi 项目的部署框架。 sherpa 支持在各种平台上部署与语音相关的预训练模型,并提供多种语言绑定。 目前,sherpa 拥有以下子项目: k2-fsa/sh…...

图片上传的util和使用

图片上传的util package com.ruoyi.web.controller.common.utils;import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.spri…...

2025年4月个人工作生活总结

本文为 2025年4月工作生活总结。 研发编码 一个项目的临时记录 自2月份领导让我牵头负责一个项目起,在本月算是有较多时间投入——但也是与之前的相比。 月初,清明节前一晚上,因某事务被叫上参加临时紧急远程会议,几方领导都在…...

利用Elixir中的原子特性 + 错误消息泄露 -- Atom Bomb

题目信息: This new atom bomb early warning system is quite strange… 题目使用 elixir 语言 一开始,我们会访问 /page.html <!DOCTYPE html> <!-- 设定文档语言为英语 --> <html lang"en"> <head><!-- 设定字符编码为UTF-8 --><…...

numpy pandas

视频链接 numpy numpy是基于一个矩阵的运算 矩阵的属性 import numpy as np# 把一个列表转换成矩阵的方法 array np.array([[1,2,3],[3,4,5]])# 打印矩阵 print(array)# 维度 print(number of dim:,array.ndim)# 行数和列数 print(shape:,array.shape)# 总共有多少个元素在…...

Amazon Redshift 使用场景解析与最佳实践

作为 AWS 云上数据仓库服务的核心成员&#xff0c;Amazon Redshift 凭借其高性能、可扩展性与经济性&#xff0c;正在成为越来越多企业实现数据驱动决策的首选方案。本文将解析 Redshift 的典型使用场景&#xff0c;并分享几项实用的落地最佳实践&#xff0c;帮助企业在数据仓库…...

STM32F446 RTC在VDD/VDDA关闭后失振问题的分析与解决

【原创】STM32F446 RTC在VDD/VDDA关闭后失振问题的分析与解决 作者: 思考的味道[你的ID] | weix_42368227 版权声明: 禁止未经授权转载 1. 问题描述 在某低功耗STM32F446项目中&#xff0c;采用以下供电方案&#xff1a; VDD&#xff1a;由DC-DC 3.3V提供&#xff08;主电源…...

SSM框架(Spring + Spring MVC + MyBatis)整合配置的详细步骤

以下是 SSM框架&#xff08;Spring Spring MVC MyBatis&#xff09;整合配置的详细步骤&#xff0c;适用于 Maven 项目。 &#xff08;一&#xff09;、pom.xml中添加相关依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"ht…...

Elasticsearch 中的索引模板:如何使用可组合模板

作者&#xff1a;来自 Elastic Kofi Bartlett 探索可组合模板以及如何创建它们。 更多阅读&#xff1a; Elasticsearch&#xff1a;可组合的 Index templates - 7.8 版本之后 想获得 Elastic 认证吗&#xff1f;查看下一期 Elasticsearch Engineer 培训的时间&#xff01; El…...

内存泄漏系列专题分析之七:高通相机CamX--Android通用ION(dmabuf)内存分配和释放原理

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:内存泄漏系列专题分析之六:高通camx 内存泄漏测试的未回收问题分析 这一篇我们开始讲:内存泄漏系列专题分析之七:高通相机CamX--Android通用ION(dmabuf)内存分配和释放原理 目录 一、背景 二、…...

【LeetCode 42】接雨水(单调栈、DP、双指针)

题面&#xff1a; 思路&#xff1a; 能接雨水的点&#xff0c;必然是比两边都低&#xff08;小&#xff09;的点。有两种思路&#xff0c;一种是直接计算每个点的最大贡献&#xff08;也就是每个点在纵向上最多能接多少水&#xff09;&#xff0c;另一种就是计算每个点在横向上…...

【JS逆向基础】前端基础-HTML与CSS

1&#xff0c;flask框架 以下是一个使用flask框架写成的serve程序 # noinspection PyUnresolvedReferences #Flash框架的基本内容from flask import Flask app Flask(__name__)app.route(/index) def index():return "hello index"app.route(/login) def login():re…...

什么是HTML、CSS 和 JavaScript?

HTML、CSS 和 JavaScript 是构建网页的三大核心技术&#xff0c;它们分工明确又紧密协作。接下来我将分别介绍三者的定义、功能&#xff0c;并阐述它们如何共同构成网页&#xff0c;最后推荐学习资源。 一、HTML&#xff1a;网页的骨架与内容基础 HTML&#xff08;HyperText …...