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

【学习笔记】Matlab和python双语言的学习(图论最短路径)

文章目录

  • 前言
  • 一、图论
    • 基本概念
    • 示例
  • 二、代码实现----Matlab
  • 三、代码实现----python
  • 总结


前言

通过模型算法,熟练对Matlab和python的应用。
学习视频链接:
https://www.bilibili.com/video/BV1EK41187QF?p=36&vd_source=67471d3a1b4f517b7a7964093e62f7e6

一、图论

图论(Graph Theory)是数学和计算机科学中的一个重要分支,专门研究图(graphs)的性质及其应用。图是一种抽象的数据结构,用于表示对象及其相互关系。

基本概念

  1. 图(Graph)
    一个图由一组顶点(或称为节点)和一组边(连接这些顶点的线)组成。形式上,一个图 ( G ) 可以表示为 ( G = (V, E) ),其中 ( V ) 是顶点集合,( E ) 是边集合。

  2. 顶点(Vertex)
    图中的一个基本单位,代表某个对象。顶点的集合通常用 ( V ) 表示。

  3. 边(Edge)
    顶点之间的连接。边的集合通常用 ( E ) 表示。边可以是有向的(directed)或无向的(undirected)。

  4. 有向图(Directed Graph or Digraph)
    边有方向的图,即边表示从一个顶点指向另一个顶点的箭头。

  5. 无向图(Undirected Graph)
    边没有方向的图,即边仅表示顶点之间的连接,没有方向性。

  6. 权重(Weight)
    在一些图中,边可以附带一个数值,称为权重(weight),表示顶点之间的距离、成本或其他度量。

  7. 路径(Path)
    从一个顶点到另一个顶点经过的一系列边和顶点。路径的长度通常表示为路径上所有边的权重之和。

示例

在这里插入图片描述

  • 求 0 到 8 的最短距离。

二、代码实现----Matlab

在MATLAB中,shortestpath 函数用于计算图中两个节点之间的最短路径。

shortestpath 函数的基本语法如下:

[P, d] = shortestpath(G, s, t)
  • G:一个图对象,通常使用 graphdigraph 函数创建。
  • s:起始节点。
  • t:目标节点。
  • P:返回的最短路径上的节点序列。
  • d:返回的最短路径的长度(或权重和)。
% 定义图的边和权重
s = [9 9 1 1 3 3 3 2 2 5 5 7 7 8]; % 起始节点编号
t = [1 2 2 3 4 6 7 4 5 4 7 6 8 6]; % 终止节点编号
w = [4 8 3 8 2 7 4 1 6 6 2 14 10 9]; % 边的权重% 创建一个图形对象 G
G = graph(s,t,w);% 绘制图形 G,并将边的权重添加到图形上
% G.Edges.Weight 表示图形对象 G 中所有边的权重值,'EdgeLabel' 表示在图形上显示这些权重值
plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2)
% 隐藏图形的坐标轴
set( gca, 'XTick', [], 'YTick', [] );% shortestpath 函数计算从节点 9 到节点 8 的最短路径和路径长度,并将路径和路径长度分别存储在 P 和 d 中
[P,d] = shortestpath(G, 9, 8);
% 在图形 G 中高亮显示最短路径
% highlight 函数高亮图形对象 myplot 中的路径 P,'EdgeColor', 'r' 表示将路径颜色设置为红色。
myplot = plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2);
highlight(myplot, P, 'EdgeColor', 'r')

运行结果:
在这里插入图片描述

三、代码实现----python

在 Python 中,可以使用 NetworkX 库和 Matplotlib 库来实现带有权重的无向图的创建和绘制。

import networkx as nx
import matplotlib.pyplot as plt# 定义图的边和权重
edges = [(9, 1, 4), (9, 2, 8), (1, 2, 3), (1, 3, 8), (3, 4, 2), (3, 6, 7), (3, 7, 4), (2, 4, 1), (2, 5, 6), (5, 4, 6), (5, 7, 2), (7, 6, 14), (7, 8, 10), (8, 6, 9)]# 创建一个有加权边的图形对象 G
G = nx.Graph()  
G.add_weighted_edges_from(edges)# 计算从节点 9 到节点 8 的最短路径和路径长度
path = nx.shortest_path(G, source=9, target=8, weight='weight')
path_length = nx.shortest_path_length(G, source=9, target=8, weight='weight')# 绘制图形 G,并将边的权重添加到图形上
pos = nx.spring_layout(G)  # 计算节点位置
nx.draw(G, pos, with_labels=True, node_color='lightblue', edge_color='gray', node_size=500, font_size=10, width=2)
edge_labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)# 在图形 G 中高亮显示最短路径
path_edges = list(zip(path, path[1:]))
nx.draw_networkx_edges(G, pos, edgelist=path_edges, edge_color='r', width=2)# 隐藏图形的坐标轴
plt.gca().set_xticks([])
plt.gca().set_yticks([])# 显示结果
print('最短路径:', path)
print('最短路径长度:', path_length)plt.show()

运行结果:
在这里插入图片描述
在这里插入图片描述

总结

本文介绍了使用图论求最短路径,并通过典型示例建立模型,分别使用Matlab和python进行代码编写。

相关文章:

【学习笔记】Matlab和python双语言的学习(图论最短路径)

文章目录 前言一、图论基本概念示例 二、代码实现----Matlab三、代码实现----python总结 前言 通过模型算法,熟练对Matlab和python的应用。 学习视频链接: https://www.bilibili.com/video/BV1EK41187QF?p36&vd_source67471d3a1b4f517b7a7964093e6…...

vue.config.js 配置 devserve 配置

在 Vue CLI 项目中,devServer 配置用于设置开发服务器的行为。这包括了开发服务器的端口、主机名、是否开启 HTTPS、自动打开浏览器等设置,以及配置代理规则来解决跨域问题。 devServer 配置详解(version > 4.0.0) host: 设置开发服务器的主机地址&a…...

不入耳耳机什么牌子性价比高?五大年度必选款揭秘

和传统的入耳式耳机相比,开放式耳机采用的是不深入耳道的设计,佩戴舒适度更高,卫生健康,安全性也更高。同时音质表现也更加有空间感。想要体验开放式耳机带来的便利,就需要做好选购攻略,不入耳耳机什么牌子…...

SQL Zoo 6.The JOIN operation

以下数据均来自SQL Zoo 1.Modify it to show the matchid and player name for all goals scored by Germany. To identify German players, check for: teamid GER.(它以显示德国所有进球的比赛和球员名字,识别德国球员) SELECT matchid,player FROM goal where teamid GE…...

视频教程:Vue3移动端抽屉弹层组件实战

本教程演示了vue3的composition api实现的移动端h5抽屉弹层组件,录屏讲解包含了功能演示和具体的源码实现。 笔者相关教程: 使用tailwindcss轻松实现移动端rem适配Vue3.4双向绑定新特性:defineModel好用爱用 学习要点: 自定义…...

CSS 的 BFC(块级格式化上下文)

BFC是Block Formatting Context(块级格式化上下文)的缩写,是CSS中一个概念,用于描述页面上如何对元素进行布局。 BFC是一个独立的容器,它内部的元素不会受到外部容器的影响,同时它也会影响其内部元素的表现…...

【2023年】云计算金砖牛刀小试2

A场次题目:Openstack 平台部署与运维 control172.17.31.10compute172.17.31.20 compute任务1 私有云平台环境初始化 1.初始化操作系统 使用提供的用户名密码,登录竞赛云平台。根据表 1 中的 IP 地址规划,设置各服务器节点的 IP 地址,确保网络正常通信,设置控制节点主机名…...

python--将mysql建表语句转换成hive建表语句

1.代码 import json import sys import pymysqldef queryDataBase(tablename):# 连接数据库并查询列信息conn pymysql.connect(userroot, password123456, hosthadoop11)cursor conn.cursor()cursor.execute("SELECT column_name, data_type FROM information_schema.C…...

异步调用实践:Async,Future, TaskExecutor、EventListener

1. 异步调用概述 异步调用允许一个方法调用在不被当前线程阻塞的情况下继续执行,而调用者可以继续执行其他任务,直到异步操作完成。 在Spring Boot中,异步调用常用于提高应用的响应性和吞吐量,尤其是在处理长时间运行的任务时&a…...

Flask 异常处理

Flask 异常处理 使用 app.errorhandler 装饰器使用 app.handle_exception 装饰器使用 register_error_handler调试模式总结 在 Flask 应用中,异常处理是一个非常重要的部分,它可以帮助你管理运行时错误,提供友好的错误页面,以及记…...

【海思SS626 | 内存管理】海思芯片的OS内存、MMZ内存设置

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

linux crontab没有按照规则执行排查

配置了cron规则,但是一段时间后任务没有按预期执行,记录一次修复过程 检查crond服务 systemctl status crond规则正常 crontab -l脚本有执行权限 查看日志 第一种:journalctl journalctl -u crond | grep 03:00 -C 3-u 指定crond.serv…...

Cloudflare的D1使用技巧

总文档&#xff1a;https://developers.cloudflare.com/workers/wrangler/commands/#d1查询某个数据库中哪些命令占用资源最大&#xff1a; To find top 10 queries by execution count: npx wrangler d1 insights <database_name> --sort-typesum --sort-bycount --co…...

解决端口号被占用问题

第一种&#xff1a; 最简单有效的方法&#xff0c;重启一下电脑&#xff0c;占用此端口的程序就会释放端口。 第二种&#xff1a; 使用命令找到占用端口的程序&#xff0c;把它关闭。 1、打开运行窗口输入&#xff1a;CMD &#xff0c;进入命令窗口。 2、输入&#xff1a;n…...

如何在linux上部署zabbix监控工具

<1>搭建服务机 1&#xff09;首先我们先执行 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config ​ #然后我们再把防火墙开机自启关掉 马上生效 systemctl disable --now firewalld 2&#xff09;我们获得rpm包 rpm -Uvh https://mirrors.aliyun.com/…...

vulnhub系列:sp eric

vulnhub系列&#xff1a;sp eric 靶机下载 一、信息收集 nmap扫描存活&#xff0c;根据mac地址寻找IP nmap 192.168.23.0/24nmap扫描端口&#xff0c;开放端口&#xff1a;22、80 nmap 192.168.23.189 -p- -A -sV -Pndirb 扫描目录&#xff0c;.git 源码&#xff0c;admin…...

JVM二:JVM类加载机制

目录 前言 1.什么是类加载? 2.类加载整体流程 3.一个类什么时候被加载? 4.双亲委派模型 4.1 JVM默认提供了三个类加载器 4.1.1 BootstrapClassLoader 4.1.2 ExtensionClassLoader 4.1.3 ApplicationClassLoader 4.2 破坏双亲委派模型 前言 在上一篇文章中&#xf…...

对于springboot无法连接redis解决方案

对于springboot无法连接redis解决方案 一、测试是否能在本地应用上访问到你的redis&#xff08;如果是部署在linux上的话&#xff09;1. 开启telnet功能2. 开始测试端口是否能访问到&#xff08;适用于所有&#xff0c;包括MQ&#xff09;3. 开放6379端口4. 看spring的配置文件…...

关于android中的各种尺寸与计算

--张学友《心如刀割》很好听 先说几个术语&#xff1a; Screen size(屏幕尺寸)&#xff1a; 指的是手机实际的物理尺寸&#xff0c;比如常用的2.8英寸&#xff0c;3.2英寸&#xff0c;3.5英寸&#xff0c;3.7英寸 摩托罗拉milestone手机是3.7英寸 Aspect Ratio(宽高比率)&am…...

MySQL避免索引失效的方法详细介绍

避免索引失效 在MySQL中&#xff0c;索引是帮助MySQL高效获取数据的数据结构。它就像一本书的目录&#xff0c;通过索引可以快速定位到数据的具体位置&#xff0c;从而减少对数据库的扫描量&#xff0c;提高查询速度。索引可以存储在表中的一个或多个列上&#xff0c;创建索引…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...