matlab使用教程(15)—图论基础

news2024/11/27 13:28:54

1.有向图和无向图

1.1什么是图?

        图是表示各种关系的节点和边的集合:
        • 节点 是与对象对应的顶点。
        • 是对象之间的连接。
        • 图的边有时会有权重 ,表示节点之间的每个连接的强度(或一些其他属性)。
        这些定义是概括性的,因为节点和边在图中的确切含义取决于具体的应用情形。例如,您可以使用图为社交网站中的朋友关系建模。图节点表示人,边表示朋友关系。图与物理对象和各种情况的自然对应关系意味着,您可以使用图对各种系统进行建模。例如:
        • 网页链接 - 图节点代表网页,边表示网页之间的超链接。
        • 机场 - 图节点代表机场,边表示机场之间的航班。在 MATLAB 中,graph digraph 函数用于构建表示无向图和有向图的对象。
        • 无向图的边没有方向。这些边指示双向关系,因为每条边都可以在两个方向上穿过。下图显示了一个包含三个节点和三条边的简单无向图。
        • 有向图的边带有方向。这些边指示单向关系,因为每条边只能在单个方向上穿过。下图显示了一个包含三个节点和两条边的简单有向图。
        边在图中的确切位置、长度或方向通常没有含义。换言之,只要基础结构不变,就可以通过重新排列节点和/或使边扭曲,以多种不同的方式显示同一个图。

1.2 自环和多重图

        使用 graph digraph 创建的图可以有一个或多个自环,自环是指一条边的两端为同一个节点。此外,图可以具有多条有相同源节点和目标节点的边,这样的图称为多重图。多重图可能包含自环,也可能不包含。
        对于 MATLAB 中的图算法函数来说,如果图中包含的节点只有一个自环,则不属于多重图。但是,如果图中包含的节点具有多个自环,则属于多重图。
        例如,下图显示了具有多个自环的无向多重图。节点 A 有三个自环,节点 C 有一个。该图包含以下三个条件,任何一个条件都满足多重图的条件。
        • 节点 A 有三个自环。
        • 节点 A 和 B 之间有五条边。
        • 节点 A 和 C 之间有两条边。
        要确定给定的图是否为多重图,请使用 ismultigraph 函数。

2.创建图

        创建图的主要方式包括使用邻接矩阵或边列表。

2.1 邻接矩阵

        有一种表示图中信息的方法是使用方形邻接矩阵。邻接矩阵中的非零项表示两个节点之间的边,条目值表示边的权重。邻接矩阵的对角线元素通常为零,但非零对角线元素表示自环或通过边与其自身相连的节点。
        • 当您使用 graph 创建无向图时,邻接矩阵必须对称。但在实践中,为避免重复,这些矩阵通常为三角形。要仅使用邻接矩阵的上三角或下三角构建无向图,请使用 graph(A,'upper')
graph(A,'lower')
        • 当您使用 digraph 创建有向图时,邻接矩阵不需要对称。
        • 对于大型图,邻接矩阵包含许多零并且通常为稀疏矩阵。
        • 您不能从邻接矩阵创建多重图。
        例如,考虑创建如下无向图。

 

        可以通过下面的邻接矩阵表示该图:
 
        要在 MATLAB 中构建该图,请输入:
A = [0 1 2; 1 0 3; 2 3 0];
node_names = { 'A' , 'B' , 'C' };
G = graph(A,node_names)
G =
graph with properties:
Edges: [3×2 table]
Nodes: [3×1 table]
        您可以使用邻接矩阵通过 graph digraph 函数来创建图,也可以使用 adjacency 函数求预先存在的图的加权或未加权的稀疏邻接矩阵。

2.2 边列表

        表示图信息的另一种方法是列出所有边。例如,考虑创建与上面相同的无向图。现在用边列表来表示该图
        从边列表中很容易得出以下结论:该图包含三个唯一节点 A BC,这三个节点通过三条列出的边相连。如果该图有断开的节点,边列表中将不会列出这些节点,您需要单独指定它们。 在 MATLAB 中,边列表按列划分为源节点和目标节点。对于有向图,边的方向(从源到目标)很重要;但对于无向图,源节点和目标节点是可以互换的。使用边列表构建该图的一种方法是,对源节点、目标节点和边权重使用单独的输入:
source_nodes = { 'A' , 'A' , 'B' };
target_nodes = { 'B' , 'C' , 'C' };
edge_weights = [1 2 3];
G = graph(source_nodes, target_nodes, edge_weights);
        graph digraph 都允许使用边列表构造简单图或多重图。构建图 G 后,可以使用命令 G.Edges 查看边(及其属性)。这些边在 G.Edges 中的顺序首先按源节点(第一列)排列,其次按目标节点(第二列)排列。对于无向图,索引较小的节点列为源节点,索引较大的节点列为目标节点。由于 graph digraph 的底层实现取决于稀疏矩阵,因此许多相同的索引创建成本均适用。使用前述方法之一基于三元对组 (source,target,weight) 一次性构建图比先创建空图再以迭代方式添加更多节点和边要快。为获得最佳性能,请尽量减少对 graphdigraphaddedgeaddnodermedgermnode 的调用次数。

3.图节点 ID

        默认情况下,系统会对使用 graph digraph 创建的图的所有节点进行编号。因此,您始终可以通过数值节点索引来引用它们。如果图具有节点名称(即 G.Nodes 包含变量 Name),则您还可以使用节点名称来表示图中的节点。因此,可以通过节点索引或节点名称来表示图中的已命名节点。例如,可以调用节点 1'A'。术语节点 ID 同时包含节点标识的两个方面的内容。节点 ID 既表示节点索引,也表示节点名称。为方便起见,MATLAB 会记住您在调用大多数图函数时使用的节点 ID 的类型。因此,如果您使用节点索引表示图中的节点,则大多数图函数返回的数值答案也会通过节点索引来表示这些节点。
A = [0 1 1 0; 1 0 1 0; 1 1 0 1; 0 0 1 0];
G = graph(A,{ 'a' , 'b' , 'c' , 'd' });
p = shortestpath(G,1,4)
p =
1 3 4
        但是,如果使用节点名称来表示节点,则大多数图函数返回的答案也会通过节点名称来表示这些节点(包含在字符向量元胞数组或字符串数组中)。
p1 = shortestpath(G, 'a' , 'd' )
p1 =
1×3 cell array
{'a'} {'c'} {'d'}
        使用 findnode 查找给定的节点名称的数值节点 ID。反过来,对于给定的数值节点 ID,请创建指向G.Nodes.Name 的索引以确定对应的节点名称。

4.修改或查询现有图

        构造 graph digraph 对象后,您可以使用各种函数来修改图结构或确定图有多少个节点或多少条边。下表列出了一些可用于修改或查询 graph digraph 对象的函数。

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

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

相关文章

【Vue-Router】使用 prams 路由传参失效

报错信息: [Vue Router warn]: Discarded invalid param(s) “name”, “price”, “id” when navigating. list.json {"data": [{"name": "面","price":300,"id": 1},{"name": "水",&quo…

【力扣每日一题】617. 合并二叉树 dfs bfs 8.14打卡

文章目录 题目思路代码 题目 617. 合并二叉树 难度: 简单 描述: 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会&#xff0…

AIGC热潮涌动 HashData如何降低大模型应用门槛?

当前,以ChatGPT为代表的大语言模型(LLM)正在掀起新一轮的AI 浪潮,数字产业生态也迎来前所未有的变局。随着大模型应用的兴起,如何低成本地实现大模型的构建和应用,成为企业关注的重点。 数据仓库是企业数据…

网络安全--筛选给定范围内的日志

目录 pass:在观看此篇前先看上篇的awk介绍 一、文件 二、第一方法 1.步骤 ​编辑三、第二方法: awk内容: 结果: 四、第二要求 统计独立ip 操作步骤: 1.先创建文件写入一下测试内容: 2.书写awk代码…

Redis缓存穿透、击穿和雪崩

1、Redis缓存穿透 缓存穿透是指当用户在查询一条数据的时候,而此时数据库和缓存却没有关于这条数据的任何记录,而这条数据在缓存中没找到就会向数据库请求获取数据。用户拿不到数据时,就会一直发请求,查询数据库,这样…

如何在电力行业运用IPD?

电力行业是国民经济众多垄断行业中较早实施改革的行业之一。近几年我国电力行业保持着较快的发展速度,也取得了很大的成绩,发电机容量和发电量居世界首位。2015-2020年,全国发电量不断攀升。 电力是以电能作为动力的能源。电力的发现和应用掀…

MR300C工业无线WiFi图传模块 内窥镜机器人图像传输有线无线的两种方式

MR300C无线WiFi图传模使用方法工业机器人图像高清传输 ⚫ MR300C图传模块基于MIPS处理器实现,电脑/手机连接模块的WIFI热点或网口即可查看视频流 ⚫ 模块的USB 2.0 Host接口,可接入USB uvc摄像头/内窥镜默认输出的视频格式必须是MJPG ⚫ 模块支持接入摄…

Linux 主函数参数介绍

主函数如下: int main( int argc, char* argv[], char* envp[]) 参数分析如下: (1) argc 参数个数 (2) argv 参数内容,是char*类型,说明传给主函数的内容是一个一个的字符串。 (3) envp 环境变量,传给主函数的也…

蓝牙入耳式耳机老是滑出来,耳朵小适合戴什么样的骨传导耳机

最近体验了几款骨传导耳机,分享下我的使用感受。首先说一下为什么要选择骨传导耳机,我之前是使用入耳式耳机,戴久了耳朵会疼,而且晚上睡觉不能戴。于是就考虑骨传导耳机,因为骨传导耳机在传声的过程中不需要经过耳膜&a…

【Elasticsearch】学好Elasticsearch系列-脚本查询

本文已收录至 Github,推荐阅读 👉 Java 随想录 先看后赞,养成习惯。 点赞收藏,人生辉煌。 文章目录 概念支持的语言Painless特点简单例子 Scripting的CRUDinsert(新增)update(更新)d…

智能工厂:适应不断变化的制造世界

制造业已经从过去传统的装配线工艺流程中走了很长一段路。随着技术的进步和工业 4.0 的兴起,制造业正在迅速发展,以满足现代世界不断变化的需求。近年来出现的一个关键概念就是“智能工厂”。在这篇文章中,我们将探讨什么是智能工厂、它是如何…

为什么要学PMP项目管理?

为什么要学习PMP呢,主要有以下五点: 01提升个人能力 PMP是一个系统学习的过程,充分理解各个项目管理的过程以及项目管理的各个过程组、知识领域等,可以从理论上掌握项目经理应具有的理论素质。能够知道如何对执行的项目进行系统…

【Docker】个人镜像文件Dockerfile制作详解

前言 洁洁的个人主页 我就问你有没有发挥! 知行合一,志存高远。 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是…

jupyter打开ipynb后,还没有运行cell,反复报错

今天遇到了一个比较奇怪的问题: 这个原因是当前目录下有一个code.py的文件,一旦打开ipynb,就是先执行code.py,而且遇到报错,还会反复执行,导致内核崩溃。

Windows 11 家庭中文版找不到组策略文件gpedit.msc

最近因为调整日期问题需要用到组策略文件gpedit.msc,但是发现找不到文件 在按键盘 winR 打开运行界面输入 gpedit.msc 回车 Windows找不到文件’gpedit.msc’。请确定文件名是否正确后,再试-次。 检查电脑Windows系统版本 是 Windows 11 家庭中文版 果断早网上搜…

生信豆芽菜-单基因预后

网址:http://www.sxdyc.com/panCancerPrognosis 该工具主要用于查看单基因在泛癌的预后情况,这里默认用火山图展示 提交后等待运行成功即可,还可以关注公众号:豆芽数据分析

617-合并二叉树

题目: 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果…

How to install GrayLog5.1.2 with one-click script

先决条件: CentOS7.9 OpenSearch2.7 环境下安装 GrayLog5.1 基础环境及组件版本说明 1、CentOS7.9 2、GrayLog5.1.2 3、MongoDB6.0 4、OpenSearch2.8 1. 准备一台 Centos 7.9 主机 最低配置要求 CPU*8 内存16GB HDD500 正式环境根据需要来 2. 一键安装属于…

clickHouse部署

docker仓库地址 https://hub.docker.com/ 1、docker环境搭建 # 1.先安装yml yum install -y yum-utils device-mapper-persistent-data lvm2 # 2.设置阿里云镜像 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 3.查…

【C语言】回调函数,qsort排序函数的使用和自己实现,超详解

文章目录 前言一、回调函数是什么二、回调函数的使用1.使用标准库中的qsort函数2.利用qsort函数对结构体数组进行排序 三、实现qsort函数总结 先记录一下访问量突破2000啦,谢谢大家支持!!! 这里是上期指针进阶链接,方便…