网络科学中的度量分析与应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.5 树

2.5.1 树的概念和基本性质

不包含圈的图称为无圈图,连通的无圈图称为树。在一棵树中,任意两个顶点均有唯一的路连接。树中度为1的点称为叶子;度大于1的点称为分支点或内部点。每个连通分支都是树的图称为森林。图2-14给出了六个顶点的树。

id:2147489473;FounderCES

图2-14 六个顶点的树

定理2-3 设G=(VE),|V|=n,|E|=m,则下列各命题是等价的:

G是连通的并且不含圈;

G中无圈,且m=n-1;

G是连通的,且m=n-1;

G中无圈,但在G中任意两点之间增加一条新边,就得到唯一的一个圈;

G是连通的,但删除G中任一条边后,便不连通(n≥2),也即它的每条边都是割边;

G中任意两个顶点之间均有唯一的路连接(n≥2)。

2.5.2 深度和宽度优先搜索

由前面可以看到,连通性是图的基本属性,但是怎样确定一个图是否是连通的呢?在图的规模比较小的情况下,只需检查所有顶点对之间是否有路径。然而,在大规模的图中,这种方法可能是耗时的,因为要检查的路径的数量可能是令人望而生畏的。因此,希望有一个既有效又适用于所有图的系统的程序或算法。对G的一个子图F,用∂(F)表示关于F的边割集。

T是图G的一棵树,如果VT)=VG),那么TG的一棵生成树,于是G是连通的。但是如果VT)⊂VG),则会出现两种可能:或者∂(T)=⌀,在这种情况下,G是不连通的;或者∂(T)≠⌀,在这种情况下,对任何边xy∈∂(T),其中xVT)和yVG\VT),通过添加顶点y和边xyT中得到的仍是G的一棵树。

使用上面的想法,可以在G中生成一序列根树,开始于单个根顶点r组成的平凡树,并终止于一棵生成树或与相关联的边割集是空的非生成树。将这一过程称为树搜索。如果目标只是确定一个图是否连通,任何树搜索都可以做到。然而,使用特定的标准来确定这个顺序的树搜索可以提供图结构的额外信息。例如,一个称为广度优先搜索的树搜索可能会被用来寻找在图上的距离,以社会关系网络为例,利用广度优先搜索算法,可以找出你和地球上某个人之间的距离。另一个深度优先搜索,可以找到一个图的割点。

(1)深度优先搜索介绍

图的深度优先搜索和树的先序遍历比较类似。它的思想是:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。显然,深度优先搜索是一个递归的过程。

图2-15(a)展示了一个连通图的一棵深度优先搜索树(加粗实线)。这棵树中每个顶点v被标记为(fv),lv)),其中fv)表示顶点v加入到这棵树的时间,lv)表示顶点v的所有邻点都加入到这棵树的时间。图2-15(b)展示了这棵树的另一种画法。

id:2147489505;FounderCES

图2-15 一个连通图的一棵深度优先搜索树

(2)广度优先搜索介绍

广度优先搜索,又称为“宽度优先搜索”,简称BFS。它的思想是:从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使得先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问,直至图中所有已被访问的顶点的邻接点都被访问到。如果此时图中尚有顶点未被访问,则需要另选一个未曾被访问过的顶点作为新的起始点,重复上述过程,直至图中所有顶点都被访问到为止。换句话说,广度优先搜索遍历图的过程是以v为起点,由近至远,依次访问和v有路径相通且路径长度为1,2…的顶点。

图2-16展示了一个连通图的一棵广度优先搜索树(加粗实线),其中图2-16(a)中顶点的标号表示它们加入这棵树的时间,而图2-16(b)中顶点的标号表示它们到根节点的距离。

id:2147489520;FounderCES

图2-16 一个连通图的一棵广度优先搜索树

2.5.3 最小生成树

给定图G=(VE),令TGG的一棵生成树,我们将TG中的边称为树枝;G中不在TG中的边称为弦;TG的所有弦的集合称为生成树的补。

通信网络设计问题的要求是,由所有中心点和选择建造的连线子集所构成的子图应该连通。假设图G的每条边e有正费用ce,且子图的费用就是它的边费用总和,那么问题可表述为:给定连通图G,对每条边eE给定正费用ce,找到G的一个最小费用连通生成子图。利用费用为正这个事实,可以证明最优子图将是一种特殊类型。首先有下面的观察结果。

引理2-1 G的边e=uvG的某个圈中的边当且仅当G\e中有一条从uv的路。

由此可得,如果从一个连通图的某个圈中删除一条边,那么新的图还是连通的,所以连接器问题的最优解将不含任何圈。因此可以通过解最小生成树(MST)问题来求解连接器问题:给定连通图G,对每条边eE给定正费用ce,找到G的一棵最小费用生成树。

有令人惊讶的简单算法能够找到一棵最小生成树,这里描述两个这样的算法,它们都是基于“贪婪”原则——即在每一步都做最节省的选择。

(1)MST的Kruskal算法

保持G的一个生成森林H=(VF),并且初始时取F=⌀。在每一步往F中加一条最小费用边eF并保持H是森林。当H是生成树时停止。

(2)MST的Prim算法

保持一棵树H=(VH),T),对某个rV,取VH)的初始集为{r},而T的初始集为⌀。在每一步往T中添加一条不在T中的最小费用边e使得H始终是一棵树。当H是生成树时停止。

树是图论中一个非常重要的概念,在计算机科学中有着非常广泛的应用,例如现在计算机操作系统均采用树形结构来组织文件和文件夹。