图 -- 基础


  图可以分为有向图(directed graph)和无向图(undirected graph)。

  每个顶点都临界的无向图为完全图(complete graph)。如果无向图G的顶点集V可以划分为V1,V2,是的对(u,v)属于E有u属于V1,v属于V2,则称图为二分图(bipartite graph)。

  无回路的无向图成为森林;连通的,无回路的无向图为(自由)树,也叫做有向无环图(dag)。 

 

  有n(n-1)/2条边的无向图称为完全图(complete graph).

  具有n(n-1)条弧的有向图称为有向完全图.

  对于有向图,e的取值范围时0 到 n(n-1).

  有很少条边的图称为稀疏图(sparse graph),有反之称为稠密图(dense graph).

 

有向图


   有向图G是一对(V,E),其中V是有穷集,E是V上的二元关系。V成为G的顶点集,E成为G的边集。可能存在自身环(self-loops)。

  G中一条边(u,v),称(u,v)离开(incident from/leaves)定点u,到达(incident to/ enters)定点v。

  顶点的度等于该顶点的入度(in degree)和出度(out degree)之和。出度是以其为起点的边的个数;入度是以其为终点的边的个数。

 

无向图


   无向图G中,边集E是由无序定点对,而非有序顶点对构成的。(u,v)和(v,u)视为同一条边。在无向图中不允许有自身环。

  G中一条边(u,v),称(u,v)关联(incident on)定点u,v,顶点u,v是相邻的(adjacent).

  在无向图中,顶点的度(degree)是与之关联的边的个数。如果一个顶点的度为0,则成为孤立的(isolated)。 

 

  无论是有向图还是无向图, 都满足图的边数 e = 度之和/2

路径


  图G中顶点u到顶点v的路径是,以顶点u为起点,顶点v为终点的顶点的集合。路径中边的个数为路径的长度。

  如果图中包含顶点u到顶点v的路径p,则成顶点u是经过p可达(reachable)顶点v的。

  如果一个路径中所有顶点都是不同的,则成为简单路径(simple path)。

  在有向图中,如果起点与终点相同,且路径至少有一条边,则成路径(v0,...,vk)形成回路。如果回路中顶点个不相同,则为简单回路。

 

连通


  在无向图中,如果所有顶点都有路径相连,则成为连通图(connected)。连通分量(connected component)指的是无向图的极大连通子图。

  在有向图中,如果每对顶点都是相互可达的,则称其为强连通图(strongly connected)。有向图的极大强连通子图称做有向图的强连通分量 

  

生成树


  一个连通图的生成树是一个极小的连通子图,它包含图中所有的顶点,但是只有n-1条边.

  对于有n个顶点的图,如果其边数少于n-1,则非连通;如果其边数多于n-1,则存在环;边数为n-1的不一定是生成树.

  

存储模式


  邻接矩阵:    所需空间O(V*V), 可以在O(1)的时间判断两个顶点(vertex)是否相邻.(对于稀疏图,耗费空间)

  邻接表:     所需空间O(V + E), 判断两个顶点是否相邻需要遍历相关两个链表.(缺点: 边的两个顶点在不同的链表中).

  十字链表:    所需空间O(V + E), 可以方便的计算顶点的出度和入度,寻找以某顶点为头/尾的边.(有向图)

  邻接多重表:   

 

遍历


  图中任何顶点都有可能和其余的顶点相邻接,在访问了某个顶点后,可能沿着某条路径又回到该顶点上.所以,需要辅助数组.

  时间复杂度:  在遍历图时,依靠辅助数组,对每个节点只会访问一次.因此,对于邻接矩阵存储的图,遍历的时间复杂度为O(V*V);对于邻接表存储的图,遍历的时间复杂度为O(V+E).

  

你可能感兴趣的:(基础)