图(Graph),作为一种数据结构,普遍存在于自然界,图论也是一个经典的数学研究领域。只要我们的研究对象之间存在某些关系,往往都可以抽象出来对应的图结构。如经典的:电影演员直接按照是否在一部电影中合作过,可以作出一个关系图结构;日常社交网络中,按照两个人是否是好友关系,可以作出一个社交关系图结构 等等。图结构与我们熟知的其他数据结构(队列,栈等)最大的不同点在于,它的灵活性和复杂性。下面,我们先从最基础的图的数学定义开始,来看看图在数学上都有哪些研究方法:
图
无向图
图论中,图是一个有序对 G = ( V , E ) G=(V,E) G=(V,E),其中 V V V是点集,也就是图中的节点(Node),而 E E E是边集,可以被定义为 E ⊆ { { x , y } : ( x , y ) ∈ V 2 } E\subseteq\left\{\{x,y\}:(x,y)\in V^2\right\} E⊆{{x,y}:(x,y)∈V2},从中我们可以看出,这个图的所有边是没有指向性的,只是将两个端点向连接,所以该图结构也被称为无向图,特别的,我们并没有特别说明边连接的端点是不是同一个端点,这也说明存在自连接的可能。
有向图
同样的,有无向图自然也存在边具有指向性的有向图。有向图同样也可以看作一个有序对 G = ( V , E ) G=(V,E) G=(V,E),其中 V V V是点集,而 E E E是边集,可以被定义为 E ⊆ { { x , y } : ( x , y ) ∈ V 2 , x ≠ y } E\subseteq\left\{\{x,y\}:(x,y)\in V^2,x \neq y\right\} E⊆{{x,y}:(x,y)∈V2,x=y},一般情况下有向图不考虑存在自连接的情况。
度
在图论中,我们一般将一个节点在图中的度(degree)定义为与这个节点相连接的边的数目,其中自连接将被计数两次。即,节点 v v v的度可以被记为 d e g ( v ) deg(v) deg(v),给定一个无向图 G = ( V , E ) G=(V,E) G=(V,E)的度求和公式为:
∑ v ∈ V d e g ( v ) = 2 ∣ E ∣ \sum _{v\in V} deg(v)=2|E| v∈V∑deg(v)=2∣E∣
其中, ∣ E ∣ |E| ∣E∣即是一个图中边的数量。
而有向图中度的定义则被分为:入度和出度,即针对一个节点,进入(指向)它的边的数量和出去(指出)它的边的数量。而它们的数量求和公式为:
∑ v ∈ V deg + ( v ) = ∑ v ∈ V deg − ( v ) = ∣ E ∣ \sum_{v \in V} \deg^+(v) = \sum_{v \in V} \deg^-(v) = |E| v∈V∑deg+(v)=v∈V∑deg−(v)=∣E∣
其中, deg + ( v ) \deg^+(v) deg+(v)和 deg − ( v ) \deg^-(v) deg−(v)分别指的是入度和出度。
因为,简单的来说,度就是在衡量一个节点连接边的数量。
异质图
在这之前我们定义图结构的时候,并没有对图中节点之间多加区分,那么如果一个图结构中,节点和边的类型都有一定的差异,那么这种扩充的图结构,我们将其定义为异质图(Heterogeneous Graph),这种图结构的定义往往是为了更好的适应实际问题。当然,我们以可以用一个四元组来定义它: G = ( V , E , R , T ) G=(V,E,R,T) G=(V,E,R,T),其中, v i ∈ V v_i\in V vi∈V是带有类型的节点, ( v i , r , v j ) ∈ E (v_i,r,v_j)\in E (vi,r,vj)∈E是带有类型的边, T ( v i ) T(v_i) T(vi)是节点类型, r ∈ R r\in R r∈R是边的类型。
日常生活中许多异质图的例子,比如学术论文的图结构:
二分图
二分图(Bipartite graph)是一类比较特殊的图结构,它的特点在于,它的节点可以被分为两个集合,每个边都是将其中一个集合的节点与另一个集合的节点相连接的。这样的图结构例子有很多:
- 论文 - 作者 图结构
- 电影 - 演员 图结构