LogoLogo
  • README
  • 前端编程
    • 01 Node JS
    • 02-ES6详解
    • 03-NPM详解
    • 04-Babel详解
    • 05-前端模块化开发
    • 06-WebPack详解
    • 07-Vue详解
    • 08-Git详解
    • 09-微信小程序
  • 人工智能
    • 机器学习
      • 二次分配问题
      • 非负矩阵
      • 概率潜在语义分析
      • 概率图模型
      • 集成学习
      • 降维
      • 距离度量
      • 决策树
      • 逻辑回归
      • 马尔可夫决策过程
      • 马尔可夫链蒙特卡洛法
      • 朴素贝叶斯法
      • 谱聚类
      • 奇异值分解
      • 潜在狄利克雷分配
      • 潜在语义分析
      • 强化学习
      • 社区算法
      • 时间序列模型
      • 特征工程
      • 条件随机场
      • 图论基础
      • 线性分类
      • 线性回归
      • 信息论中的熵
      • 隐马尔科夫模型
      • 支持向量机
      • 主成分分析
      • EM算法
      • Hermite 矩阵的特征值不等式
      • k-means聚类
      • k近邻法
      • PageRank算法
    • 深度学习
      • Pytorch篇
        • 01-线性模型
        • 02-梯度下降法
        • 03-反向传播
        • 04-pytorch入门
        • 05-用pytorch实现线性回归
        • 06-logistic回归
        • 07-处理多维特征的输入
        • 08-加载数据集
        • 09-多分类问题
        • 10-卷积神经网络
        • 11-循环神经网络
    • 图神经网络
      • 图神经网络笔记01
        • 01-图(Graphs)的结构
        • 02-网络的性质和随机图模型
        • 03-网络工具
        • 04-网络中的主题和结构角色
        • 05-网络中的社区结构
      • 图神经网络笔记02
        • 01-深度学习引言
        • 02-神经网络基础
        • 03-卷积神经网络
        • 04-图信号处理与图卷积神经网络
        • 05-GNN的变体与框架-
        • [06-Google PPRGo 两分钟分类千万节点的最快GNN](人工智能/图神经网络/图神经网络笔记02/06-Google%20PPRGo 两分钟分类千万节点的最快GNN.md)
        • 07-序列模型
        • 08-变分自编码器
        • 09-对抗生成网络
  • 日常记录
    • 健身日记
    • 面经记录
    • 自动生成Summary文件
  • 实战项目
    • 谷粒商城
      • 00-项目概述
      • 01-分布式基础-全栈开发篇
      • 02-分布式高级-微服务架构篇
      • 03-高可用集群-架构师提升篇
  • 数据库
    • MySQL笔记
      • 01-MySQL基础篇
      • 02-MySQL架构篇
      • 03-MySQL索引及调优篇
      • 04-MySQL事务篇
      • 05-MySQL日志与备份篇
    • Redis笔记
      • 01-Redis基础篇
      • 02-Redis高级篇
    • 02-Redis篇
  • 算法笔记
    • 01-算法基础篇
    • 02-算法刷题篇
  • 职能扩展
    • 产品运营篇
  • Go编程
    • 01-Go基础
      • 01-Go基础篇
  • Java编程
    • 01-Java基础
      • 01-Java基础篇
      • 02-多线程篇
      • 03-注射与反解篇
      • 04-JUC并发编程篇
      • 05-JUC并发编程与源码分析
      • 06-JVM原理篇
      • 07-Netty原理篇
      • 08-设计模式篇
    • 02 Java Web
      • 01-Mybatis篇
      • 01-Mybatis篇(新版)
      • 02-Spring篇
      • 02-Spring篇(新版)
      • 03-SpringMVC篇
      • 04-MybatisPlus篇
    • 03-Java微服务
      • 01-SpringBoot篇
      • 01-SpringBoot篇(新版)
      • 02-SpringSecurity篇
      • 03-Shiro篇
      • 04-Swagger篇
      • 05-Zookeeper篇
      • 06-Dubbo篇
      • 07-SpringCloud篇
      • 08-SpringAlibaba篇
      • 09-SpringCloud篇(新版)
    • 04-Java中间件
      • 数据库篇
        • 01-分库分表概述
        • 02-MyCat篇
        • 03-MyCat2篇
        • 04-Sharding-jdbc篇
        • 05-ElasticSearch篇
      • 消息中间件篇
        • 01-MQ概述
        • 02-RabbitMQ篇
        • 03-Kafka篇
        • 04-RocketMQ篇
        • 05-Pulsar篇
    • 05-扩展篇
      • Dubbo篇
      • SpringBoot篇
      • SpringCloud篇
    • 06-第三方技术
      • 01-CDN技术篇
      • 02-POI技术篇
      • 03-第三方支付技术篇
      • 04-第三方登录技术篇
      • 05-第三方短信接入篇
      • 06-视频点播技术篇
      • 07-视频直播技术篇
    • 07-云原生
      • 01-Docker篇
      • 02-Kubernetes篇
      • 03-Kubesphere篇
  • Linux运维
    • 01-Linux篇
    • 02-Nginx篇
  • Python编程
    • 01-Python基础
      • 01.配置环境
      • 02.流程控制
      • 03.数值
      • 04.操作符
      • 05.列表
      • 06.元祖
      • 07.集合
      • 08.字典
      • 09.复制
      • 10.字符串
      • 11.函数
      • 12.常见内置函数
      • 13.变量
      • 14.异常和语法错误
      • 15.时间和日期
      • 16.正则表达式
    • 02 Python Web
      • flask篇
        • 01.前言
        • 02.路由
        • 03.模板
        • 04.视图进阶
        • 05.flask-sqlalchemy
        • 06.表单WTForms
        • 07.session与cookie
        • 08.上下文
        • 09.钩子函数
        • 10.flask 信号
        • 11.RESTFUL
        • 13.flask-mail
        • 14.flask+celery
        • 15.部署
        • 16.flask-login
        • 17.flask-cache
        • 18.flask-babel
        • 19.flask-dashed
        • 20.flask-pjax
        • 21.flask上传文件到第三方
        • 22.flask-restless
        • 23.flask-redis
        • 24.flask-flash
        • 25.消息通知
        • 26.分页
    • 03-Python数据分析
      • Matplotlib
      • Numpy
      • Pandas
      • Seaborn
    • 04-Python爬虫
      • 1.准备工作
      • 2.请求模块的使用
      • 3.解析模块的使用
      • 4.数据存储
      • 5.识别验证码
      • 6.爬取APP
      • 7.爬虫框架
      • 8.分布式爬虫
由 GitBook 提供支持
在本页
  • 什么是图?
  • 无向图与有向图
  • 度
  • 子图和路径
  • 完全图
  • 二部图
  • 邻接矩阵
  • 关联矩阵
  • 连通
  • 图数据类型
  • 同构图
  • 异构图
  • 属性图
  • 非显示图
  • 图的遍历

这有帮助吗?

在GitHub上编辑
  1. 人工智能
  2. 机器学习

图论基础

上一页条件随机场下一页线性分类

最后更新于3年前

这有帮助吗?

什么是图?

image-20210107215006240

定义图$(graph) \ or$ 网络$(network)$ $G=(V,E)$,其中集合$V$的元素称为顶点$(vertex) \ or $ 结点$node$,集合$E$的元素称为联系$(links)\ or$ 边$(edge)$。

网络与图:

网络:通常是指真实的系统

  • 网络、社交网络

图:网络的数学表示

  • 网络图,社交图,知识图

无向图与有向图

如果给图的每条边规定一个方向,那么得到的图称为有向图。相反,边没有方向的图称为无向图。

无向图:

有向图:

度

与$i$结点关联的边的数目称为$i$的度。而在有向图中,从一个顶点出发的边数称为该点的出度,而指向一个顶点的边数称为该点的入度。

无向图:

在无向图中,结点的度就是与该结点相连的边的数目。

例如:$k_A=4$

有向图:

在有向网络中,定义一个入度和出度,节点的(总)度是输入度和输出度的总和。

子图和路径

若图$G^{'}=(v',E')$的顶点集合边集分别是另一个图$G=(V,E)$的顶点集的子集和边集的子集,即$V'\subseteq V$,且$E'\subseteq E$,则称图$G'$是图$G$的子图。

在图$G=(V,E)$中,若从顶点vi出发,沿着一些边经过一些顶点$v_{p1},v_{p2},\cdots,v_{pm}$,到达顶点$v_j$,则称边序列$P_{ij}=(e_{v_iv_{p1}},e_{v_{p1}v_{p2}},\cdots,,e_{v_{pm}v_{j}})$为从顶点$v_i$到顶点$v_j$的一条路径($Path$,也可称为通路),其中$P_{ij}=(e_{v_iv_{p1}},e_{v_{p1}v_{p2}},\cdots,,e_{v_{pm}v_{j}})$为图$G$中的边。

  • 路径的长度:路径中边的数目通常称为路径的长度$L(P_{ij})=|P_{ij}|$。

  • 顶点的距离:若存在至少一条路径由顶点$v_i$到达顶点$v_j$,则定义$v_i$到$v_j$的距离为:

也即两个顶点之间的距离由它们的最短路径的长度决定。我们设$d(v_i,v_j) = 0$,节点 到自身的距离为$0$。

  • $k$阶邻居:若$d(v_i,v_j) = k$,我们称$v_j$为$v_i$的$k$阶邻居。

  • $k$阶子图(k-subgraph):我们称一个顶点$v_i$的$k$阶子图为:

举例:图中的阴影部分是顶点$V_1$的2阶子图

完全图

$N$个节点上的无向图的最大边数为:

一个边数为$E =E_{max}$的无向图称为完全图(每两个顶点都有$1$条边相联的简单图称为完全图),它的平均度数是$N-1$。

二部图

节点可以被分成两个不相交集$U$和$V$的图每条链路将$U$中的一个节点连接到$V$中的一个节点; 也就是说,$U$和$V$是独立的集合$(U \cap V = \oslash)$。

如果$U$的顶点与$V$的顶点每个都邻接,则称为完全二部图。

在实际应用中,可以通过二部图进行链路预测:

通过$U$与$V$之间的关系,预测出$U$与$V$内部边的链接情况。

邻接矩阵

采用一个大小为$V\times V$的矩阵$A$,对于有权图,$A_{ij}$可以表示$V_i$到$V_j$的边的权重,如果是无权图,则可设为$1$表示存在边,$0$表示不存在边。因此邻接矩阵的表示相当的直观,而且对于查找某一条边是否存在、权重多少非常快。但其比较浪费空间,对稠密图($E>>V$)来说,会比较适合。

\begin{align} \left\{ \begin{array}{**lr**} A_{ij}=1,if\ there\ is\ a\ link\ from\ node\ i\ to\ node\ j & \\ A_{ij}=0,otherwise \end{array} \right. \end{align}

无向图的矩阵是对称的,有向图的矩阵可能不对称。

  • 无向图的邻接矩阵属性:

  • 有向图的邻接矩阵属性:

  • 边表

将图表示为一组边:

(2,3);(2,4);(3,2);(3,4);(4,5);(5,2);(5,1)
  • 邻接列表

如果矩阵是稀疏矩阵,采用邻接列表则能够快速检索给定节点的所有邻居。

1:
2:3,4
3:2,4
4:5
5:1,2

现实世界中的网络大多数都是稀疏的$(E<<E_{max})$

  • 边的属性

    • 权重(如通讯频率)

    • 排名(最好的朋友,第二好的朋友…)

    • 类型(朋友、亲戚、同事)

    • 标志:朋友vs敌人,信任vs不信任

    • 属性取决于图的其余部分的结构:共同好友的数量

  • 更多类型的图

循环图:

多图:

关联矩阵

设关联矩阵$B\in R^{N×M}$来描述节点与边之间的关联,定义如下:

连通

  • 连接(无向)图:任意两个顶点都可以被一条路径连接起来。

如果擦掉了绿色颜色的边缘,那么这个图形就会变成不连通的图:如果擦掉了蓝色颜色的结点,那么这个图形就会断开连接,也会变成不连通的图。

  • 不连通图:是由两个或多个连通子图组成的。

  • 强连通图:在有向图$G$中,如果两个顶点$v_i,$$v_j$间$(v_i>v_j)$有一条从$v_i$到$v_j$的有向路径,同时还有一条从$v_j$到$v_i$的有向路径,则称两个顶点强连通$(strongly\ connected)$。如果有向图$G$的每两个顶点都强连通,称$G$是一个强连通图。有向图的极大强连通子图,称为强连通分量$(strongly\ connected\ components)$。

$e.g.$:$A-B-C$就构成了强连通图。

  • 弱连通图:定义对于有向图 $G$ ,将所有的有向边替换为无向边得到图$G$的基图,若图$G $的基图是连通的,则称图$ G $是弱连通图。

图数据类型

同构图

同构图:是指图中的节点类型和关系类型都仅有一种。

异构图

异构图:是指图中的节点类型或关系类型多于一种,与同构图相反。

属性图

属性图:相较于异构图,属性图给图数据增加了额外的属性信息。

非显示图

非显示图:是指数据之间没有显示地定义出关系,需要依据某种规则或计算方式将数据的关系表达出来,进而将数据当成一种图数据进行研究。比如计算机3D视觉中的点云数据,如果将节点之间的空间距离转换成关系的话,点云数据就成了图数据。

图的遍历

图的遍历是指从图中的某一顶点出发,按照某种搜索算法沿着图中的边对图中的所有顶点访问一次且仅访问一次。图的遍历主要有两种算法:深度优先搜索(DFS,Depth-First-Search)和广度优先搜索(BFS,Breadth-First-Search)。图的遍历是一种重要的图检索手段,深度优先搜索与广度优先搜索给出了相应的算法基础。

深度优先搜索是一个递归算法,有回退过程。其算法思想是:从图中某一顶点$v_i$开始,由$v_i$出发,访问它的任意一个邻居$w_1$;再从$w_1$出发,访问$w_1$的所有邻居中未被访问过的顶点$w_2$;然后再从$w_2$出发,依次访问,直到出现某顶点不再有邻居未被访问过。接着,回退一步,回退到前一次刚访问过的顶点,看是否还有其他未被访问过的邻居,如果有,则访问该邻居,之后再从该邻居出发,进行与前面类似的访问;如果没有,就再回退一步进行类似访问。重复上述过程,直到该图中所有顶点都被访问过为止。以图为例,可以得到如下深度优先搜索序列:$v_1→v_2→v_4→v_5→v_3$。

广度优先搜索是一个分层的搜索过程,没有回退过程,其算法想是:从图中某一顶点$v_i$开始,由$v_i$出发,依次访问$v_i$的所有未被访问过的邻居$w_1,w_2,…,w_n$;然后再顺序访问$w_1,w_2,…,w_n$的所有还未被访问过的邻居,如此一层层执行下去,直到图中所有顶点都被访问到为止。以图为例,可以得到如下广度优先搜索序列:$v_1→v_2→v_3→v_4→v_5$。

image-20210107215921485
image-20210107215929372
image-20210108115349220
image-20210108115737393
kCin=2,KCout=1,kC=3k^{in}_C = 2,K^{out}_C = 1,k_C = 3kCin​=2,KCout​=1,kC​=3
d(vi,vj)=min(∣Pij∣)d(v_i,v_j) = min(|P_{ij}|)d(vi​,vj​)=min(∣Pij​∣)
Gvi(k)=(V′,E′),V′={vj∣∀ vj,d(vi,vj)≤k},E′={eij∣∀ vj,d(vi,vj)≤k}G^{(k)}_{v_i} = (V',E'),V' = \{v_j|\forall\ v_j,d(v_i,v_j)\le k \},E' = \{e_{ij}|\forall\ v_j,d(v_i,v_j)\le k \}Gvi​(k)​=(V′,E′),V′={vj​∣∀ vj​,d(vi​,vj​)≤k},E′={eij​∣∀ vj​,d(vi​,vj​)≤k}
image-20210301105016227
Emax=N(N−1)2E_{max} = \frac{N(N-1)}{2}Emax​=2N(N−1)​
image-20210108120545817
image-20210108120926369
image-20210108123025248
image-20210108123529713
A左图=[0101100100011110]                 A右图=[0001100000000110]\begin{align} A_{左图} = \left[ \begin{matrix} 0&1&0&1 \\ 1&0&0&1\\ 0&0&0&1\\ 1&1&1&0 \end{matrix} \right] \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ A_{右图} = \left[ \begin{matrix} 0&0&0&1 \\ 1&0&0&0\\ 0&0&0&0\\ 0&1&1&0 \end{matrix} \right] \end{align}A左图​=​0101​1001​0001​1110​​                 A右图​=​0100​0001​0001​1000​​​​
image-20210108124234211
Aij=Aji;Aii=0ki=∑j=1NAij;kj=∑i=1NAijE=12∑i=1Nki=12∑i,jNAij\begin{align} &A_{ij} = A_{ji};A_{ii} = 0\\ &k_i = \sum_{j=1}^N A_{ij};k_j = \sum_{i=1}^N A_{ij} \\ &E = \frac{1}{2}\sum_{i=1}^N k_i=\frac{1}{2}\sum_{i,j}^N A_{ij} \end{align}​Aij​=Aji​;Aii​=0ki​=j=1∑N​Aij​;kj​=i=1∑N​Aij​E=21​i=1∑N​ki​=21​i,j∑N​Aij​​​
image-20210108124548679
Aij≠Aji;Aii=0E=12∑i=1Nkiin=12∑j=1Nkjout=∑i,jNAij\begin{align} &A_{ij} \not= A_{ji};A_{ii} = 0\\ &E = \frac{1}{2}\sum_{i=1}^N k_i^{in}= \frac{1}{2}\sum_{j=1}^N k_j^{out}=\sum_{i,j}^N A_{ij} \end{align}​Aij​=Aji​;Aii​=0E=21​i=1∑N​kiin​=21​j=1∑N​kjout​=i,j∑N​Aij​​​
image-20210108125043031
image-20210108125724183
image-20210108125757347
Bij={1if vi与ej相连0elseB_{ij} = \left\{\begin{matrix}1&if\ v_i与e_j相连\\0&else\end{matrix} \right.Bij​={10​if vi​与ej​相连else​
image-20210301110220570
image-20210108130004562
image-20210108130012808
image-20210108131045000
image-20210301113323602
image-20210301113343364
img
image-20210301110547978