有趣的图(一)(55)

news2024/11/18 7:31:39

小朋友们好,大朋友们好!

我是猫妹,一名爱上Python编程的小学生。

和猫妹学Python,一起趣味学编程。

今日主题

咱们今天的内容比较抽象,也比较有趣。

这里的图是指计算机中的图,确切地说,是一种数据结构。

在解决实际问题时,经常会用到。

我们举个生活中的例子:

一个人要把大陆31个省会城市自驾游一遍,最短路径是多少公里?

一个人能在一个省份只经过一次的情况下把大陆31个省会城市自驾游一遍吗?

今天的主题有:

图的定义

图的分类

图的接口

图的Python表示

图的定义

图G由两个集合组成,顶点集合和边集合。

一个由顶点(vertex)构成的有穷非空集合和一个由边(edge)构成的有穷允空集合。

比如上图:

顶点集合有:1,2,3,4,5,6,7

边集合有:有10条,带权值

比如上图:

顶点结合有:0,1,2,3,4,5

边集合有:共9条,不带权值

图的分类

图根据边是否有方向,分为有向图和无向图。

(a)为有向图,(b)为无向图

图根据边是否有权值,分为边无权值的图,边有权值的图。

如下图:

节点的度

无向图中结点的度:顶点引出的边数和。

有向图中结点的度:分为入度和出度。入度为指向该顶点的边数和,出度为该顶点向外指向的边数和。

图的接口

addVertex(v)添加顶点

deleteVertex(v)删除顶点

vertexes(v)获取所有顶点

addEdge(v1,v2)添加一条边

deleteEdge(v1,v2)删除一条边

edges()获取所有边

adjacent(v)获取v的所有邻接顶点

isEmpty()判断图是否为空

Python中的图

可以使用Python自带的列表、集合、字典来表示图,也可以使用第三方库networkx。

可以使用邻接矩阵、邻接列表、邻接集合、邻接加权字典来表示图。%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22b%22%20style%3D%22ellipse%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3Baspect%3Dfixed%3BfillColor%3D%2360a917%3BfontColor%3D%23ffffff%3BstrokeColor%3D%232D7600%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22350%22%20y%3D%22130%22%20width%3D%2220%22%20height%3D%2220%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E

邻接矩阵

设无向图G=(V,E),其中顶点集V=v1,v2,…,vn,边集 E=e1,e2,…,eε。用aij表示顶点vi与顶点vj之间的边数,可能取值为0,1,2,…,称所得矩阵A=A(G)=(aij)n×n为图G的邻接矩阵。

邻接矩阵可以描述有向图和无向图。

邻接矩阵的存储特点:

(a)无向图的邻接矩阵是一个对称矩阵,有向图不一定是。

(b)邻接矩阵所需的存储空间值域只与顶点数有关系。

(c)用邻接矩阵存储图,容易判断两个点之间是否有边。

(d)如果一个有向图的邻接矩阵为三角矩阵(主对角线为0),则它的拓扑排序一定存在。

(e)小技巧:

无向图:邻接矩阵的第i行或者第i列的非零元素的个数正好是第i个顶点Vi的度;

有向图:邻接矩阵的第i行的非零元素个数正好是第i个顶点Vi的出度,第i列非零元素的个数正好是第i个顶点Vi的入度。

(f)邻接矩阵也可以表示有权值的图,此时单元格内容是边的权值。

上图Python代码参考:

邻接矩阵的缺点:

  1. 当结点很多,边很少时,很多个0,浪费空间。

  2. 寻找每个结点的邻接顶点时,需要遍历列表,稍有不便。

邻接集合

只存储有边的数据,不存储无边的数据。

比如上图中,和a相邻的边,只存储ad和ae,只需要存储和a相邻的结点是d和e就可以了。

邻接列表

和邻接集合类似,只是将集合变为列表。

邻接加权字典

可以使用邻接加权字典表示有权值的图。

好了,我们今天的学习就先到这里。

你学会了吗?

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!

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

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

相关文章

Debian 12 x86_64 OVF (sysin) - 虚拟机自动化模板

Debian 12 x86_64 OVF (sysin) - VMware 虚拟机模板 请访问原文链接:https://sysin.org/blog/debian-12-ovf/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Debian GNU/Linux 12 (bookworm) (Linux debian 6.1.0-…

面试20k的测试工程师什么水平?知彼知己百战不殆...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 面试软件测试你需…

一文看懂python如何执行cmd命令

概要 “ 在进行Python编程时,经常需要使用到操作系统的命令行,这就要求我们学会如何使用Python执行cmd命令。” Python执行cmd命令的几种方法 Python是一种强大而灵活的编程语言,它可以很方便地执行系统命令,与操作系统进行交互。…

软件测试人员灵魂三问

可有过高光时刻?职业立足点是什么?前路在何方? 没有光高时刻的职业,不值得留恋 根据马斯洛需求层次理论,当人们温足饭饱后,还需要尊重和自我实现。 同样,作为测试员,工作不仅仅是…

I2C通信协议,最简单的总线通信

串口通信只能在两个设备之间进行,如果是四组串口通信,那每个设备都需要三组串口,其线路连接相当繁琐(如下图)。 为了解决这个痛点,人们设计了一种总线通信,总线通信有很多种协议(如…

记一次gstreamer解码存图绿线问题排查

背景 业务需求需要将某些解码后的视频帧保存为图片,大部分情况下图片都是正常的,更换了某些视频流后,在保存的图片顶部就会出现一条绿线,现记录下解决过程。 部分代码如下 解码回调如下,完整代码可参考之前的文章G…

JVM零基础到高级实战之内存区域分布与概述

JVM零基础到高级实战之内存区域分布与概述 JVM零基础到高级实战之内存区域分布与概述 文章目录 JVM零基础到高级实战之内存区域分布与概述前言Java语言为甚么优势巨大?总结 前言 JVM零基础到高级实战之内存区域分布与概述 Java语言为甚么优势巨大? 一处…

FMCW 雷达室内多目标人员MATLAB仿真

分享一则代码,主要用于FMCW雷达室内多目标MATLAB仿真,涉及到的内容和算法模块有如下: 1、目标参数设置 2、雷达参数设置 3、目标运动状态设置 4、雷达信号建模(IQ信号) 5、雷达近场收发几何位置偏差校正 6、距离维FFT…

速刷剑指offer

链接:No5、 用两个栈来实现一个队列 | 阿秀的学习笔记 第五题跳过。栈和队列等着代码随想录二刷补上。 JZ11 旋转数组的最小数字 链接:旋转数组的最小数字_牛客题霸_牛客网 代码: 这个二分法是左闭右开的,就真的不好理解。 class …

Vue - 第五天 动态组件 插槽 自定义指令

动态组件& 插槽& 自定义指令 一、动态组件1.什么是动态组件2.如何实现动态组件渲染3.使用 keep-alive 保持状态4. keep-alive 对应的生命周期函数5. keep-alive 的 include 属性6.动态展示左右组件7.例子 二、插槽1.什么是插槽2.体验插槽的基础用法2.1 没有预留插槽的内…

VGGNet

论文信息 论文名称:Very Deep Convolutional Networks For Large-Scale Image Recognition 论文地址:https://arxiv.org/pdf/1409.1556.pdf 发表期刊: ICLR 发表年份: 2015 论文详情:VGGNet是2014年ILSVRC&#xff08…

【并发篇】04-05 线程池核心参数代码演示

B站 黑马程序员 java八股的视频笔记 自留备忘 如有错误请多多指教。 (一)理论知识 这道题其实就是在问java中线程池的实现类ThreadPoolExecutor,这个类参数最多的构造方法有7个参数。 线程池本质上就是管理一组线程,用来执行提交…

python:消除已安装库在import导入时出现红线问题

问题 在pycharm中,对于已经安装的库文件,在进行import导入时出现红线,不影响运行, 简单有效的消除红线的方法。 解决办法 在工程目录中的程序可以采用Mark directory - Source Root方法。 对于安装的第三方库文件环境不在本工程…

springboot实现后端防重复提交(AOP+redis分布式锁)单机情况下

文章目录 0、依赖1、自定义接口2、实现redis分布式锁3、自定义AOP4、测试 为什么要实现这个功能呢,可能用户在提交一份数据后,可能因为网络的原因、处理数据的速度慢等原因导致页面没有及时将用户刚提交数据的后台处理结果展示给用户,这时用户…

LayoutTransformer: Layout Generation and Completion with Self-attention

LayoutTransformer: Layout Generation and Completion with Self-attention (Paper reading) Kamal Gupta, University of Maryland, US, Cited:41, Code, Paper 1. 前言 我们解决了在各种领域中(如图像、移动应用、文档和3D对象)进行场景布局生成的…

后台管理系统模板 - zhadminvue

没事的时候写了一个后台管理系统模板:zhadminvue,欢迎大家提issue和PR,以及想要添加一些有意思的功能模块,在没事的时候我也会加进去~ github:https://github.com/iotzzh/zh-admin-vue gitee: https://gitee.com/iotzzh/zh-admin.…

算法模板(4):动态规划(1)

动态规划 闫氏 d p dp dp 分析法: 集合:怎么划分。通常以集合的划分来定义数组。 f ( i , j ) f(i, j) f(i,j):选前 i i i 个物品. 体积不超过 j j j。全部初始化为 0 0 0; j j j 非负时状态才合法。体积恰好是 j j j。 f…

Springboot集成magic-api

目录 1、前言 2、springboot集成magic-api 2.1、添加maven依赖 2.2、application.yml配置 2.3、编写测试接口 2.4、启动程序,访问接口 2.5、magic-api脚本 3、magic-api其他语法 4、注意事项 1、前言 今天项目中遇到一个问题,springboot后端项目…

《机器学习算法竞赛实战》-chapter3数据探索

《机器学习算法竞赛实战》学习笔记,记录一下自己的学习过程,详细的内容请大家购买作者的书籍查阅。 数据探索 数据探索是竞赛的核心模块之一,贯穿竞赛始终,也是很多竞赛胜利的关键。 在竞赛中如何确保自己准备好竞赛使用的算法模…

cmake 添加一个库

目录 项目格式 cmake基本语法 添加库 链接库 添加库的头文件 cmake打印字符串 库的cmake文件 cmake生辰库 mian函数中使用 让库成为可选的 cmake基本语法 设置option变量 cmake设置条件链接库 链接库 添加头文件 修改cmake配置文件 修改引用的源码 项目格式 …