图的概念

(Graph)和树比起来,是一种更加复杂的非线性表结构。

顶点&边

树中的元素称为节点,图中的元素叫作顶点(vertex)。图一个顶点可以与任意其他顶点建立连接关系,这种建立的关系叫(edge)。

1570497121476

1570497121476

在微信中,可以把每个用户看作一个顶点,两个用户之间互加好友,那就在两者之间建立一条边。所以,整个微信的好友关系就可以用一张图来表示。其中,每个用户有多少个好友,对应到图中,就叫作顶点的(degree),就是跟顶点相连接的边的条数。

有向图&无向图

微博允许单向关注,用户 A 关注了用户 B,但用户 B 可以不关注用户 A。如果用户 A 关注了用户 B,就在图中画一条从 A 到 B 的带箭头的边,来表示边的方向。如果用户 A 和用户 B 互相关注了,那我们就画一条从 A 指向 B 的边,再画一条从 B 指向 A 的边。

这种边有方向的图叫作**“有向图”。边没有方向的图就叫作“无向图”**。

1570497151653

1570497151653

无向图中的“度”表示一个顶点有多少条边,在有向图中度分为入度(In-degree)和出度(Out-degree)。

顶点的入度,表示有多少条边指向这个顶点;顶点的出度,表示有多少条边是以这个顶点为起点指向其他顶点。

对应到微博的例子,入度就表示有多少粉丝,出度就表示关注了多少人。

带权图

QQ还记录了两个用户之间的亲密度,如果两个用户经常往来,那亲密度就比较高;如果不经常往来,亲密度就比较低。在带权图(weighted graph)中,每条边都有一个权重(weight),可以通过这个权重来表示 QQ 好友间的亲密度。

1570497174693

1570497174693