图论方法学习

图论方法

考过的点

  • 2024年省赛考察:最小生成树
  • 2023年国赛考察:分层图 01 B F S 01BFS 01BFS双端队列)
  • 2022年国赛考察:Floyd算法

2024国赛准备

  • 重点掌握 D i j k s t r a Dijkstra Dijkstra S P F A SPFA SPFA F l o y d Floyd Floyd P r i m Prim Prim K r u s k a l Kruskal Kruskal基本思路和解题


    • D i j k s t r a Dijkstra Dijkstra算法(n个结点,m条边) 只能用于非负边权图
      • 朴素版: O ( n 2 ) O(n^2) O(n2) 用于稠密图
        • 更新 n − 1 n-1 n1次,每次选取一个非s集合中的距离最小的结点,去更新每一个结点的距离。
      • 堆优化版: O ( m l o g n ) O(mlogn) O(mlogn) 用于稀疏图
        • 基本思路就是用堆去优化选取非s集合中的距离最小的结点。更新的化就是遍历与当前结点所有相邻的结点进行更新,只有当某个结点被更新时才放入堆中。

    • S P F A SPFA SPFA算法(n个结点,m条边) 可以用于含有负权边的图
      • 时间复杂度:一般情况 O ( m ) O(m) O(m) 最坏 O ( n m ) O(nm) O(nm)
      • 基本思路:当一个结点的距离变小时,通过这个结点就有可能将到其他结点的距离减小。因此只需要建立一个队列,每次将距离变小的点放入队列即可,用队列中的点更新其他点。

    • F l o y d Floyd Floyd(n个结点) 多源最短路
      • 时间复杂度: O ( n 3 ) O(n^3) O(n3)
      • 基本思路:每次利用一个结点( k k k)更新所有结点(遍历( i , j i,j i,j))之间的距离。
      • k , i , j k,i,j k,i,j的方式枚举,转移: d [ i ] [ j ] = m i n ( d [ i ] [ j ] , d [ i ] [ k ] + d [ k ] [ j ] ) d[i][j] = min(d[i][j],d[i][k]+d[k][j]) d[i][j]=min(d[i][j],d[i][k]+d[k][j])

    • P r i m Prim Prim(n个结点,m条边)
      • 朴素版: O ( n 2 ) O(n^2) O(n2) 用于稠密图
        • 思路类似 D i j k s t r a Dijkstra Dijkstra
        • 更新n次(选n个点),每次选取一个非s集合中距离集合最近的点,去更新不在集合s中的点到集合s的距离。
      • 堆优化版: O ( m l o g n ) O(mlog n) O(mlogn) 用于稀疏图
        • 思路也是类似于 D i j k s t r a Dijkstra Dijkstra
        • 注意点就是要用一个 c n t cnt cnt进行计数,判断最后是否能构成最小生成树。如果存在孤立点 c n t cnt cnt肯定小于n

    • K r u s k a l Kruskal Kruskal(n个结点,m条边)
      • 时间复杂度: O ( m l o g m ) O(mlogm) O(mlogm) 用于稀疏图
      • 基本思路:先用三元组把边存起来,然后按小到大排序,依次枚举每条边判断是否在一个集合中,不在一个集合中就加上这条边,并放到集合中,用并查集实现。

  • 其他一些搜索算法的作用

    • 多源 B F S BFS BFS

      • 基本思想就是把所有的起点都先放进队列,然后再开始 B F S BFS BFS
    • 双端队列

      • 主要就是解决权值有0有1的问题,权值为0的放入队列的左边,权值为1的放到队列的右边。与堆优化版 D i j k s t r a Dijkstra Dijkstra一样必须在出对时才知道每个点的最小值,而和一般的 B F S BFS BFS不一样。
    • 双向广搜

      • 主要解决的就是搜索空间爆炸的问题。基本思想就是用两个队列一个从起点 B F S BFS BFS一个从终点 B F S BFS BFS,每次扩展一层。哪个队列的元素少就扩展哪一层。
    • A*

      • 基本思想是启发式搜索减少搜索空间,优化 B F S BFS BFS,比如第 k k k短路问题,暴力做法就是 B F S BFS BFS暴力搜索。这样的化状态空间直接爆炸。感觉应该是不会考察这东西。
      • 上面那个问题是用 D i j k s t r a Dijkstra Dijkstra反向计算最短路作为到终点的估计值。然后 A s t a r Astar Astar函数优先队列存放 [ d i s t a n c e + w [ i ] + d i s t [ j ] , [ d i s t a n c e + w [ i ] , j ] [distance+w[i]+dist[j],[distance+w[i],j] [distance+w[i]+dist[j],[distance+w[i],j]其中 d i s t a n c e distance distance存放的是 A s t a r Astar Astar的到当前点的距离, w [ i ] w[i] w[i] i i i这条边的长度, d i s t [ j ] dist[j] dist[j]表示结点 j j j的估值函数的值也就是 D i j k s t r a Dijkstra Dijkstra计算的值。一个点出队 k k k次表示当前的 d i s t a n c e distance distance是它的第 k k k短路径。与 D i j k s t r a Dijkstra Dijkstra不同的是当枚举 x x x临界点时,每个点都需要入队,而 D i j k s t r a Dijkstra Dijkstra则是更新了的点才入队。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】解决Java报错:ClassCastException

文章目录 引言1. 错误详解2. 常见的出错场景2.1 错误的类型转换2.2 泛型集合中的类型转换2.3 自定义类和接口转换 3. 解决方案3.1 使用 instanceof 检查类型3.2 使用泛型3.3 避免不必要的类型转换 4. 预防措施4.1 使用泛型和注解4.2 编写防御性代码4.3 使用注解和检查工具 5. 示…

Linux网络编程之select的理解

这两天在学习linux网络编程,其中学习到了select框架,有些地方百思不得其解。今天搞明白了,在这里记录下。 涉及的代码内容: fd_set rfds, rset; FD_ZERO(&rfds); FD_SET(sockfd, &rfds); 什么是fd_set类型; 它是一个无符号长整形的数组结构体。大体声明结构为:…

springboot停车微信小程序小程序-计算机毕业设计源码92714

摘 要 在信息飞速发展的今天,网络已成为人们重要的信息交流平台。每天都有大量的农产品需要通过网络发布,为此,本人开发了一个基于springboot停车微信小程序小程序。 对于本停车微信小程序的设计来说,它主要是采用后台采用java语…

党史馆3d网上展馆

在数字化浪潮的推动下,华锐视点运用实时互动三维引擎技术,为用户带来前所未有的场景搭建体验。那就是领先于同行业的线上三维云展编辑平台搭建编辑器,具有零基础、低门槛、低成本等特点,让您轻松在数字化世界中搭建真实世界的仿真…

2.Rust自动生成文件解析

目录 一、生成目录解析二、生成文件解析2.1 Cargo.toml2.2 main函数解析 一、生成目录解析 先使用cargo clean命令删除所有生成的文件,下图显示了目录结构和 main.rs文件 使用cargo new testrust时自动创建出名为testrust的Rust项目。内部主要包含一个src的源码文…

python如何提取html中所有中文

要从HTML中提取所有的中文文本,你可以使用Python的HTML解析库如BeautifulSoup来遍历HTML文档,并筛选出中文文本。以下是一个简单的示例,说明如何使用BeautifulSoup和正则表达式来提取HTML中的所有中文: from bs4 import Beautifu…

Centos7安装ElasticSearch

Centos7安装ElasticSearch 准备工作 下载elasticsearch https://www.elastic.co/cn/elasticsearch 将下载好的包上传到/usr/local/elasticsearch/ 路径下 安装 安装elasticsearch解压缩即可! tar -zxvf elasticsearch-8.12.2-linux-x86_64.tar.gz进入/usr/loca…

汽车EDI——Volvo EDI 项目案例

项目背景 作为Volvo的长期合作伙伴,C公司收到Volvo的EDI对接邀请,需要实现EDI对接。C公司将会面临哪些挑战?又应该相应地选择何种EDI解决方案呢? 汽车行业强调供需双方的高效协同(比如研发设计、生产计划、物流信息等…

Hi3519DV500 学习摘录

文章目录 一、问题1、open-vm-tools 安装2、pushd: not found3、autoreconf4、编译util-linux源码时报错 ERROR: You must have autopoint installed to 二、NFS1、服务器搭建2、u-boot常用命令3、配置4、问题 三、补缺1、make 一、问题 1、open-vm-tools 安装 open-vm-tools…

关于使用XX源码,开始编译的时候报错:不允许使用返回函数的函数

在使用vlc源码,开始编译的时候遇到以下错误: 仔细一看,懵掉了,NND源码编译都有错?报错如下: 一顿查找后,得出解决问题的办法:把ssize_t改为int 在大多数情况下,你可以将…

ubuntu22.04 gitleb服务器满了,扩容机器的磁盘的详细步骤

在Ubuntu 22.04上为GitLab服务器扩容磁盘可以分为以下几步进行:增加磁盘空间、扩展文件系统,并确保数据安全。这些步骤可以应用于物理服务器或虚拟机(包括云服务中的实例)。以下是详细步骤: 1. 添加新的磁盘空间 1.1…

國際知名榮譽顧問加入台灣分析集團總部,全面升級量子電腦Q系統

近期,國際知名的榮譽顧問正式加入台灣分析集團總部,利用相同的量子數據規格訊息數據庫,進行全方位的系統升級。此次升級後,量子電腦Q系統的精確預測和迅速反應能力提升了3.29%。透過高級的數據處理和技術分析,社群用戶將在瞬息萬變的市場中保持領先地位。 “量子電腦Q系統”由資…

使用紫铜管制作半波天线的折合振子

一、概述 半波天线是一种简单而有效的天线类型,其长度约为工作波长的一半。它具有较好的辐射特性和较高的增益,广泛应用于业余无线电、电视接收等领域。使用紫铜管制作折合振子,不仅可以提高天线的机械强度,还能增强其导电性能。 …

NSSCTF-Web题目7

目录 [SWPUCTF 2022 新生赛]ez_rce 1、题目 2、知识点 3、思路 ​编辑 [MoeCTF 2022]baby_file 1、题目 2、知识点 3、思路 [SWPUCTF 2022 新生赛]ez_rce 1、题目 2、知识点 ThinkPHP V5 框架漏洞的利用,命令执行 由于ThinkPHP5在处理控制器传参时&#xff…

经典神经网络(10)PixelCNN模型、Gated PixelCNN模型及其在MNIST数据集上的应用

经典神经网络(10)PixelCNN模型、Gated PixelCNN模型及其在MNIST数据集上的应用 1 PixelCNN PixelCNN是DeepMind团队在论文Pixel Recurrent Neural Networks (16.01)提出的一种生成模型,实际上这篇论文共提出了两种架构:PixelRNN和PixelCNN,两…

web学习笔记(六十四)

目录 1.路由的声明式跳转和编程式跳转 1.1声明式跳转 1.2编程式跳转 2. 路由传参query 3.路由传参 params 4.Vue中路由传参方式以及如何接收路由参数? 5.命名路由 1.路由的声明式跳转和编程式跳转 我们在这篇文章中提到的路由都是前端路由,是用来匹配组件完…

设计模式在芯片验证中的应用——迭代器

一、迭代器设计模式 迭代器设计模式(iterator)是一种行为设计模式, 让你能在不暴露集合底层表现形式 (列表、 栈和树等数据结构) 的情况下遍历集合中所有的元素。 在验证环境中的checker会收集各个monitor上送过来的transactions&#xff0…

设计软件有哪些?效果工具篇(2),渲染100邀请码1a12

这次我们继续介绍一些渲染效果和后期处理的工具。 1、Krakatoa Krakatoa是由Thinkbox Software开发的强大的粒子渲染器,可用于Autodesk 3ds Max等软件。它专注于处理大规模粒子数据,提供了高效的渲染解决方案,适用于各种特效、粒子系统和模…

TESSENT2024.1安装

一、安装过程参考Calibre安装过程(此处省略,不再赘述) 二、安装license管理器: SiemensLicenseServer_v2.2.1.0_Lnx64_x86-64.bin 三、Patch补丁: tessent安装目录和license管理安装目录,执行FlexNetLic…

debugfs和tracefs

debufs(通常指的是debugfs)和tracefs在Linux系统中都是与调试和跟踪相关的文件系统,但它们的用途和功能有所不同。以下是对两者的详细介绍和关联说明: debugfs 用途:debugfs是一个虚拟文件系统,主要用于内…