GRAPH --- 图的相关概念整理

2023-11-03

 

Graph



更多Graph 的观念与术语

被vertex v指到的vertex (vertices),称为v的 successor(s) ;指向v的vertex (vertices),称为v的 predecessor(s) 。 以「通讯录」为例, v的通讯录内所有人,都是v的successors;通讯录内含有v名字的人,都是v的predecessors。 至于无向图,则不分指出去或指进来,凡是与v有edge相连的其他vertices,都叫做v的 neighbors 。以「接壤」为例,一个国家的neighbors,就是与它接壤的邻居。 (术语往往都很直觉吧!)

从一个vertex v指出去的箭头个数(其实也就是v的successors个数),叫做v的 out-degree ;指向v的箭头个数(其实也就是v的predecessors个数),叫做v的 in- degree。 以「通讯录」为例, out-degree越高,表示通讯录名单越长; in-degree越高,表示人气越旺(很多人都将你列在通讯录内。小心病毒。)至于无向图,则不分指出去或指进来,与v连线的总数称为v的 degree 。 以「接壤」为例,一个国家的degree,就是与它接壤国家的个数。 Q: 「生下」的in-degree或是out-degree有何特性?当然,现代科技也有可能创造出例外...

两头都落在同一个vertex 上面的edge, 叫做一个loop。 这样的edge 对这个vertex 的degree 贡献了2 次。 一般用graph 描述的问题, 多数都不考虑loop 可能是因为没有太大意义, 例如「握手」; 也可能是因为每个vertex 都有loop 所以干脆全部省略, 例如「通讯录」。 Q: 「爱恋」 图中若出现loop, 可以用希腊神话里面的那一种情结来描述?

起点相同,终点也相同的两条edges,称为 parallel edges 。

一个没有loops,没有parallel edges的图,叫做一个 simple graph 。 我们一般讨论graphs,大多只对simple graphs有兴趣。

degree为0的vertex叫做一个 isolated vertex 「接壤」例中,每个岛国就是一个isolated vertex。 (但印尼与马来西亚并不是。)

一连串edges依序首尾相接,不重复经过同一vertex,称为一个 simple path 。 若从vertex a到vertex b有simple path,则称 b is accessible/reachable from a (从a可以到达b) 「沟通」例中,若a到b有simple path,则表示a讲的话, b可以直接或间接(透过翻译)听懂。

起点和终点相同的simple path,称为一个 simple cycle 。 「沟通」例中,一个simple cycle上面的每个人,都可以彼此直接或间接双向沟通。

一个undirected graph G当中,如果任两个vertices之间都可以找到simple path,则称G为 connected ;否则称G为 disconnected 。 一个graph的每一小块自成connected的部分,称为一个 connected component 。 「接壤」例中,欧亚非大陆上的国家构成一个connected component;南北美大陆上的国家构成一个connected component。 印尼虽然不在亚洲大陆上,但它与马来西亚接壤,马来西亚又与大陆上的国家接壤,所以印尼也算在同一个connected component里面。

至于一个directed graph G 是否为connected, 先忽略它的箭头方向, 将之视为undirected graph, 由这个undirected graph 来判断原图G 是否connected。

边上面有数字的图,叫做 weighted graph 。

从图里面抓一小块出来研究

一个问题以graph表示,有时我们只对其中一小部分感兴趣,从原图G = (V,E)当中取出来的一个小图,就叫做一个subgraph。 严谨地说,从G = (V,E)的V当中随便取出一些vertices V',并且从E当中随便取出一些"两端都落在V'之内"的edges E',所构成的图G ' = (V',E')称为G的一个 subgraph 。 「先修」例中,所有数学课程之间的挡修关系,就是原图的一个subgraph。

图的骨架

从一个connected undirected graph G = (V,E)当中,挑一些edges E'出来,与原图当中所有的vertices合起来成为G' = (V, E')当然是G的一个subgraph。 如果G'满足: (1)它是connected (2)它没有cycle则称G'为G的一个 spanning tree 。 也就是要取够多的edges让它足以张开涵盖所有的vertices;但是又不要取太多edges以免造成cycle。

一个graph 可能有很多不同的spanning trees。 但无论如何, 若G 有n 个vertices 则它的每棵spanning tree 一定恰有n-1 条edges 。

一个weighted connected undirected graph的所有spanning trees当中, edges总和最小的那些spanning trees,称为 minimal spanning trees 。 例如油管布线,或网路线的配置,如果一切以最低成本为考量,而不考虑替代路线,可能就喜欢布成一棵minimal spanning tree。 这里说"minimal"而不说"minimum"主要是因为最小的spanning tree可能不只一棵。

一个disconnected undirected graph G当然就无法有spanning tree了。 但可以为每个connected component找出一个spanning tree,这些spanning trees合起来就称为G的一个 spanning forest 。

至于directed graph G 的spanning tree 或spanning forest 呢? 凡是谈到connected 的问题, 一律先将G 视为undirected graph 来讨论就对了。 因为spanning tree/spanning forest 的定义当中提到connected, 所以比照办理。

特殊的图

一个directed graph,如果里面完全没有cycle,就叫做一个 directed acyclic graph (DAG) 。 「生下」与「先修」必然是DAG。

没有edges,每个vertex都是一个isolated vertex (因而也都是一个独立的connected component),这种graph叫做一个 discrete graph 「生下」例中,如果题目范围内的所有人彼此没有血缘关系,那就是一个discrete graph。

linear graph: ...

complete graphs: K1 到 K4 任两个vertices之间都有edge相连的undirected graph叫做一个 complete graph 。 具有n个vertices的complete graph,记做K n ,它共有n(n-1)/2条edges。 「沟通」例中,如果题目范围内的所有人都讲同一种语言,那就是一个complete graph。 右图分别是K1, K2, K3与K4。

一个graph,如果可以找到一种拆法,把它所有的vertices分成两国,让所有的edges都横跨两国,也就是同一国内的vertices彼此之间都没有edges,则称此graph为bipartite graph (只允许有"国际线",不可有"国内线") 「爱恋」一例,就是一个bipartite graph。 (除非...)

complete bipartite graphs: K(5,2) 與 K(3,4) 一个bipartite graph,如果允许有edges的地方都有edges,也就是"国际线"全满,就叫做一个complete bipartite graph。 若它的两国各有m个与n个vertices,则将这个graph记为K m,n ,它共有mn个edges。 右图分别是K 5,2 与K 3,4

连得很紧与连得不太紧的connected graphs

一個 separable graph, 有 6 個   articulation points, 2 條 bridges, 5 個 biconnected components 一个connected graph最"脆弱"的地方,是 articulation point 与 bridge :前者是"一拿走,就会令图散开的vertex";后者是"一断掉,就会令图散开的edge"。 这里所谓"散开"指的是令原来的connected graph变成disconnected graph。 一条bridge的两个端点,通常都是articulation points。 (除非端点的degree为1...)

「通讯录」例中,班上两个小圈圈的唯一交集人物就是一个articulation point;两各小圈圈之间唯一有联络的两个人,就是bridge。 一个没有articulation point (当然也就没有bridge)的graph叫做一个 biconnected graph ,也称为 non-separable graph 。 反之,有articulation point的graph叫做一个 separable graph 。 祝各位毕业以后,班上的联络状况是一个biconnected graph,是一个non-separable graph。

一个graph当中,每块大到不能再大的biconnected subgraph ( maximal biconnected subgraph),叫做一个 biconnected component 。 上图为一个separable graph,有3个articulation points, 1条bridge, 3个biconnected components。

绕得回来与绕不回来的图

一個 digraph, 有 5 個   strongly connected components 一个digraph,如果从每个vertex出发,都有路可以到达其他任何一个vertex,就叫做一个 strongly connected graph 。 一个graph当中,每块大到不能再大的strongly connected subgraph ( maximal strongly connected subgraph),叫做一个 strongly connected component 。

如果将一个digraph 的所有strongly connected components 标示出来, 每个component 以一个大vertex 取代, 形成一个新的图, 则这个图是一个DAG。 (可以这样想: digraph 除以strongly connectedness 等于DAG。) 上图为一个strongly connected graph, 它有5 个strongly connected components。 若将每个strongly connected component 以一个vertex 取代, 则成最下方的DAG。


以下尚未整理


Weighted Graph

同构

若G1 = (V1, E1), G2 = (V2, E2), 且f 为一个从V1 到V2 的one-to-one correspondence, 并且保留对应vertices 之间的相邻关系, 则称f 为一个从G1 到G2 的isomorphism. 两个graphs 之间如果可以找到isomorphism, 则称它们为isomorphic graphs.

自己到自己的isomorphism 叫做automorphism.

Planar Graphs

  1. 可以被 embed (嵌) 到平面上,而所有edges互不交叉的图,叫做 planar graph .
  2. Kuratowski' Theorem:一个图G为non-planar graph <==> G至少有一个subgraph与K 5 或K 3,3 homeomorphic.
  3. Euler's Formula: 凡是一个planar graph, 它的vertices, edges, regions 的个数之间必满足下列等式: v-e+r=2
  4. 一个planar graph 若它没有loop 且至少含一个edge, 则必满足3r <= 2e 且e <= 3v-6. 所以r 属于O(v) 且e 属于O(v).
  5. 若G为一个planar graph,则可由G定义出它的一个 dual graph (对偶图) G^d如下:在G的每个region r (含infinite region)内画一个G^d的vertex叫它r^d ;找出每对相邻的regions r1与r2 ,及它们之间的分界edge e,然后把r1与r2的dual vertices r1^d与r2^d用一条G^d的edge连起来,命名为e ^d.
  6. Dual graph 的例子: 地图上的国家边界, 它的dual graph 代表国与国的相邻关系.
分类:  其他
标签:  概念  ,  邻接表  ,  图论  ,  graph  ,  术语  ,  同构  ,  连通图

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GRAPH --- 图的相关概念整理 的相关文章

  • Floyd Warshall 算法的时间复杂度

    Skiena 的算法书包含以下解释弗洛伊德 沃歇尔算法 http en wikipedia org wiki Floyd E2 80 93Warshall algorithm floyd adjacency matrix g int i j
  • 如何使用 RDFLib 解析大数据集?

    我正在尝试使用 RDFLib 3 0 解析几个大图 显然它处理第一个图并在第二个图上死掉 MemoryError 看起来 MySQL 不再支持作为存储 您能建议一种以某种方式解析这些图的方法吗 Traceback most recent c
  • 在尝试找到最长路径的同时消除有向无环图中的无关边

    我问了一个question https stackoverflow com q 8685598 35690关于在可变数量的集合中查找没有重复字符的子序列 解决方案是创建每对字母的矩阵 丢弃每组中未出现的字母 然后找到最长路径 http en
  • 为什么使用 Dijkstra 算法而不是最佳(最便宜)优先搜索?

    从我到目前为止所读到的来看 这最佳优先搜索 https en wikipedia org wiki Best first search在找到到达目标的最短路径方面似乎更快 因为 Dijkstra 算法在遍历图时必须放松所有节点 是什么让 D
  • Vuejs 2 将 prop 对象传递给子组件并检索

    我想知道如何使用 props 和检索将对象传递给子组件 我了解如何将其作为属性来执行 但是如何传递对象并从子组件中检索对象 当我从子组件中使用 this props 时 我收到未定义或错误消息 父组件
  • 什么是好的、免费的 PHP 图表套件?

    我要做的只是基本的折线图 任何人分享的经验将不胜感激 不是真正的 PHP 但我发现 amchart 非常容易实现 而且看起来很棒 http www amcharts com http www amcharts com 还可以查看 Googl
  • Java hibernate/jpa 如何创建自相关的动态通用实体

    我想使用 JPA hibernate 创建动态和通用的超类 它将针对每个层次结构模型进行扩展 例如 角色 页面 目录 部门 权限 树 我想使用递归和java反射来创建这个对象动态树 它应该看起来像这样 该实体应该引用自身实体 我希望它是完全
  • 使用 d3 在两个节点之间绘制多条边

    我一直在关注 Mike Bostock 的代码这个例子 http bl ocks org 1153292学习如何在 d3 中绘制有向图 并且想知道如何构建代码 以便可以在图中的两个节点之间添加多个边 例如 如果上例中的数据集定义为 var
  • ZedGraph 垂直线与 LineObj 问题

    我有一个 ZedGraphControl 里面有几条曲线 我想在一些固定的 x 位置添加垂直线 当然 这些线只能位于实际图形区域内 我尝试以下 LineObj line new LineObj Color Black xPos myPane
  • 带回溯的 Dijkstra 算法?

    In a 相关主题 https stackoverflow com questions 28333756 finding most efficient path between two nodes in an interval graph
  • 如何在matplotlib_venn中将维恩图保存为PNG图

    使用以下代码我尝试创建维恩图 然后另存为文件 import matplotlib from matplotlib venn import venn2 set1 set A B C D set2 set B C D E plt venn2 s
  • 在 Python 中删除表达式树及其每个子表达式树中第一个元素周围的括号

    目标是实现简化操作 删除表达式树及其每个子表达式树中第一个元素周围的括号 其中表达式作为括在各个括号中的字符串输入给出 这必须适用于任意数量的括号 例如 12 3 45 6 gt 123 45 6 删除 12 周围的括号 然后删除 45 周
  • 如何显示 matplotlib 饼图中的实际值

    我有一个饼图 绘制从 CSV 文件中提取的值 当前显示值的比例 百分比显示为 autopct 1 1f 有没有办法显示每个切片的数据集中表示的实际值 Pie for Life Expectancy in Boroughs import pa
  • 在无向图中查找强连通分量

    我想在无向图中找到强连接的组件 即如果我从节点开始A然后我会回到节点A并且每条边都被恰好访问一次 对于有向图可以使用Tarjan算法来寻找强连通分量 但是对于无向图怎么办 我认为您错过了强连通分量的含义 强连接组件 如果所有顶点对之间都存在
  • Javascript 3d 绘图实用程序? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道有什么好的 javascript 3d 绘图实用程序吗 我知道每个网站都推荐过画布 3d 图
  • 非二叉树的中序树遍历

    对于比二叉树更宽的树 术语 中序遍历 是否有明确定义的含义 或者 前 和 后 顺序是唯一有意义的 DFS 类型吗 我的意思是与n每个节点 gt 2 个子节点 我猜是为了n这甚至可能意味着之后要转到 根 n 2孩子们 但这曾经这样使用过吗 那
  • Bokeh 中单独的节点和边缘悬停工具?

    我正在尝试为 Bokeh 中的节点和边缘获取单独的悬停工具提示 但未能使其正常工作 有人可以指出我做错了什么吗 我相信代码应该如下所示 from bokeh io import show output notebook from bokeh
  • 如何在Matlab中绘制网络?

    我有一个矩阵AMatlab中的维数mx2每行包含两个节点的标签 显示网络中的直接链接 例如 如果网络有4矩阵的节点A可能A 1 2 1 3 2 1 2 4 3 2 4 1 4 2 其中第一行表示有一个链接来自1 to 2 第二行表示有一个链
  • TColorProperty德尔福柏林10.1.2?

    我正在尝试将组件从 Delphi 7 转换为 Delphi Berlin 平面组件 https sourceforge net projects flatstyle https sourceforge net projects flatst
  • 如何计算 Postgres 上图表中所有连接的节点(行)?

    我的桌子有account id and device id One account id可以有多个device ids 反之亦然 我正在尝试计算每个连接的多对多关系的深度 Ex account id device id 1 10 1 11

随机推荐

  • 2022年,软件测试还能学吗?别学了,软件测试岗位饱和了...

    8年前 我懵懂的选择了软件测试这个行业 穷困潦倒的时候 爸妈给我付了2万块钱进入了一家培训机构 我怀着感激和破釜沉舟的情绪开始学习软件测试 3个月的学习时间 住群租宿舍 吃盒饭 平时上课认真听讲 周末就跑自习室 在学了基础课程之后 找工作的
  • vue中纯JS调用自定义组件

    案例以vant为例 1 首先创建index vue index js文件 2 index vue跟我们平常写的组件是一样的
  • 51单片机学习笔记(十二) - 红外遥控

    文章目录 前言 一 红外遥控的背景知识 1 人机交互 2 红外遥控的相关知识 二 原理图电路分析 三 NEC协议讲解 1 逻辑1与逻辑0的表示 2 NEC协议格式 3 NEC协议的关键点 四 代码实现 总结 前言 随着科技的发展 红外遥控器
  • 【Spring Boot整合MyBatis教程】

    Spring Boot是由Pivotal团队提供的全新框架 其设计目的是用来简化新Spring应用的初始搭建以及开发过程 该框架使用了特定的方式来进行配置 从而使开发人员不再需要定义样板化的配置 通过这种方式 Spring Boot致力于在
  • 用4种语言编写端口扫描器(Java、C、Python、Go)

    Java import java net InetSocketAddress import java net Socket import java util concurrent ExecutorService import java ut
  • Ghost-Docker(五)Nginx+SSL+Https

    使用 Ngins SSL 证书 为 Ghost 实现 Https 访问 HTTPS 协议是由 HTTP 加上 TLS SSL 协议构建的可进行加密传输 身份认证的网络协议 主要通过数字证书 加密算法 非对称密钥等技术完成互联网数据传输加密
  • ElementUI过渡动画篇

    ElementUI过渡动画篇 element官方提供的过渡动画并不能很好的满足使用 我尝试过几种过渡动画的设置方式 最终选择了Animate css 一 使用方法 引入 引入 npm install animate css save 然后在
  • 保姆级连载讲义学Python:第四篇多文件项目的演练

    多文件项目的演练 开发 项目 就是开发一个 专门解决一个复杂业务功能的软件 通常每 一个项目 就具有一个 独立专属的目录 用于保存 所有和项目相关的文件 一个项目通常会包含 很多源文件 目标 在项目中添加多个文件 并且设置文件的执行 多文件
  • FastAPI从入门到实战(10)——响应模型与状态码

    前面一直记录的是请求相关的内容 这篇文章开始记录一下响应相关的内容 包括请求模型和模型继承以及状态码等相关的内容 一个任意dict构成的基本响应 任意dict构成的响应 app06 get stu06 dict response model
  • STL容器使用中的拷贝成本

    include stdafx h include
  • ESP32基础应用之HTTP 服务器

    文章目录 1 HTTP服务器简介 2 ApiPost测试工具 3 HTTP服务器实验 3 1 ApiPost之GET测试 3 2 ApiPost之POST测试 3 3 ApiPost值PUT测试 参考资料 esp32 http服务器编程指南
  • windows xp 驱动开发(五) USB驱动程序、应用软件概述

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家提出意见 一起讨论 1 USB设备驱动程序 WDM模型 1 1 分类 USB设备驱动程序的设计是基于微软件的WDM WDM采用分层驱动程序模型
  • vue dependencies相关说明

    依赖项相关说明 dependencies 主页面 riophae vue treeselect 0 4 0 树形多选框 菜单等使用 vue count to 1 0 13 数据动态滚动展示 echarts 4 9 0 fuse js 6 4
  • Feature Selective Anchor-Free Module for Single-Shot Object Detection论文阅读

    Feature Selective Anchor Free Module for Single Shot Object Detection 下载地址 Feature Selective Anchor Free Module for Sing
  • 【深度学习】基于卷积神经网络的验证码识别

    活动地址 CSDN21天学习挑战赛 目录 前言 了解captcha数据集 下载weather photos数据集 采用CPU训练还是GPU训练 区别 使用CPU训练 使用GPU训练 支持中文 导入数据 查看数据量 显示部分图片 预处理 手动
  • 蓝桥杯2022初赛.求和

    题目描述 给定n个整数a 1 a 2 a n 求两两相乘再相加的和 即 S a 1 a 2 a 1 a 3 a 1 a n a 2 a 3 a 2 a n a n 1 a n 输入格式 第一行为正整数n 第二行为n个整数 30 的数据 2
  • nacos启动失败集锦

    我们启动nacos时 常常因各种环境条件所限 导致nacos启动不成功 现将nacos启动不成功的原因及解决办法罗列一下 物理内存小于启动时nacos的虚拟机内存设置 free 命令显示系统内存的使用情况 包括物理内存 交换内存 swap
  • 单元测试时调用 Debug.Break() 无效

    解决方案 在 Debug Break 后等待一帧 示例 UnityTest public IEnumerator TestDebugBreak Debug Log 编辑器暂停 Debug Break yield return null 等待
  • 夜神常用路径

    夜神安卓模拟器下载的文件在哪 怎么找不到了 小伙伴们是不是经常有这些疑问 一般情况下 使用夜神安卓模拟器下载的文件只能在夜神安卓模拟器里面看到 因为其下载的位置是在模拟器的景象文件里 电脑系统的文件夹里是无法直接看到的 不过用户可以使用夜神
  • GRAPH --- 图的相关概念整理

    Graph 更多Graph 的观念与术语 被vertex v指到的vertex vertices 称为v的 successor s 指向v的vertex vertices 称为v的 predecessor s 以 通讯录 为例 v的通讯录内