首页 > 其他分享 >图论 学习笔记

图论 学习笔记

时间:2023-06-21 14:46:09浏览次数:30  
标签:图论 dist 队列 复杂度 笔记 节点 学习 path 短路

图的基本概念和数据结构

圆圈表示节点
线是边
图是V和E的二元组

无向图:边没有方向(边是双向的)
有向图:边有方向

无权图:所有边的权重都是1
有权图:权重不同;在不同的应用里,权重的意义不同
没有的边记作0或者无穷大,具体看实际应用
基本原则是进行搜索的时候,使无法通过这条边

数据结构

无向无权图(Undirected Unweighted Graph)
有向无权图(Dirceted Unwieghted Graph)
无向图的邻接矩阵关于主对角线对称
有向图的邻接矩阵通常是不对称的
有向有权图(Undirected Weighted Graph)

-------------------------

最短路

Simple Path:路径上没有重复节点即为简单路径
无权图:长度等于边数
有权图:长度等于边权加和

单元最短路(Single-source Shortest Path Problem):
输入图G,起点s
输出到所有点的最短路

无权图最短路算法
int < queue >;
struct a[N]{
int v;//vertex
bool visit = 0;
int dist = inf;
int path = 0;//路径
};
首先把起始点放入队列,设为已访问,距离是0
拿出起始点(dequeue()),如果起始点未被访问过,开始迭代此点;否则取出队列中下一点然后进行相同操作
迭代:
void function()
{
拿出上一点;
visit = 1;
dist[现在点] = dist[上一点] + 1;
path[现在点] = 上一点;
此点插入队列;
return ;
}
由于无向图的最短路仅取决于经过的边数,故越早经过的必然是最短路
if( queue.empty() ) 返回结构体的表;

算法时间复杂度: O(|V|+|E|)
初始化需要把每个点的参量遍历一遍,时间复杂度是O(|V|)
队列操作只会把没有访问过的节点插入,所以每个节点只会被访问一次,时间复杂度是O(|V|);
每个节点只会被访问一次,所以每个边只会被访问一次,时间复杂度是O(|E|)

有权图最短路算法:迪杰斯特拉算法(Dijkstra`s Algorithm)
初始化:
需要一个优先队列(离起始点最近的点在最前面)
以dist为排序依据,同时记录所对应的path(即为指向的点)
一个结构体,包括vertex,dist,path
其中 dist = inf , path = 0;
如果路径更短(dist`=dist+weigth[现在点]),就取代原来的值,并记入path,同时插入到优先队列中
存在自环,所以如果不更新,则不向下迭代;即相等时不更改
要求:权重非负
时间复杂度:
插入和取出的次数不会超过节点+边的数量:O(|V|+|E|)
优先队列的长度不会超过点的数量,最坏情况下所有边都在队列里O(log|V|)(最小堆实现)
总时间复杂度:O((|V|+|E|)log|V|)

 

标签:图论,dist,队列,复杂度,笔记,节点,学习,path,短路
From: https://www.cnblogs.com/coper/p/graph_theory_note.html

相关文章

  • 线性代数-二次型-坐标变换笔记
    原来的二次型\(f\left(x_{1},x_{2},x_{3}\right)\)经过坐标变换变成了\(g\left(y_{1},y_{2},y_{3}\right)\)这个新的二次型$x^{\mathrm{T}}Ax$经过坐标变换变成$y^{\mathrm{T}}By$原来的二次型矩阵\(A\)变成了\(B\)(也是实对称矩阵)\(A\)和\(B\)之间的之间的关......
  • 美股怎么交易?美股打新怎么做?学习美股打新申购规则
    参与美股交易,除了交易一般的美股产品之外,也可以参与美股打新。美股打新怎么做?一定要先学习美股打新申购规则。美股打新申购规则一、满足参与门槛美股打新首先需要完成券商平台的选择和账户开立;其次是要选择好打新的股票;根据股票价格和认购数量,账户需预留足够的资金用于完成认购过程......
  • JVM 虚拟机笔记,不一定全,但是一定靠谱
    在学习JVM之前,先分享一则信息:2009年4月20日,Orace宣布正式以74亿美元的价格收购市值曾超过2000亿美元的Sun公司,传奇的SunMicrosystems从此落幕成为历史。一、Java虚拟机的介绍首先登场的是,虚拟机的始组:SunClassic/ExactVM,SunClassic被誉为世界上第一款商用Ja......
  • 渗透笔记:vulnhub靶机drippingblues--第一篇测试记录
    在不知道靶场的ip情况下进行扫描 出现有几个ip,但是不知道哪个是的,所以就一个个试一试namp-T4-sV-A-O-p- 192.168.13.143-T4(速度) -sV(版本扫描和开启的服务) -O(操作系统) -p-(所有端口)扫了好几个,只有一个是的,所以不是的就没有发出来了 ftp一下ip,发现有一......
  • react学习,实现子组件监听父组件对像的变化
    我们可以结合useEffet,useRef,useState来实现子组件监听父组件对像的变化:import{useEffect,useRef,useState}from"react";interfaceMyProps={counter:number;};constMyChildComponent:React.FC<MyProps>=({counter})=>{constprevCounterRef=u......
  • buuctf刷题笔记
    换表的base64解密importbase64importstringstr1="x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q"string1="ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/"string2="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkl......
  • Java学习之注册中心Zookeeper
    Zookeeper是什么ZooKeeper是一个用于维护配置信息、命名、提供分布式同步和提供组服务的集中式服务,它常作为一个注册中心服务用于分布式项目。Zookeeper拥有以下几个重要特性顺序一致性:来自客户端的相关指令会按照顺序执行,不会出现乱序的情况,客户端发送到服务的指令1->2->3->4,......
  • 线性代数笔记 #2 | 向量空间相关
    所用教材:席南华基础代数(第一卷)柯斯特利金代数学引论练习模块:https://www.cnblogs.com/IhopeIdieyoung/p/17495666.html线性相关(lineardependence):我们定义\(\mathbb{R}^n\)中的向量(组)\(v_1,v_2,\cdotsv_k\)是线性相关的,当且仅当存在不全为0的数(纯量)\(a_1,......
  • MySQL HeatWave 被添加了机器学习,甲骨文认真了
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。在开始说这个问题前,我们先了解一下什么是heatWave,MySQLHeatWave是Oracle在2020年推出的一个新服务,为MySQL数据库提供高性......
  • 数据库信息速递 支持机器学习的10个数据库 (译)
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。以下数据库虽然方法和能力各不相同,但所有这些数据库都允许您在数据所在的地方构建机器学习模型。对于机器学习将代码保持在数据附......