图基本算法介绍:广度优先搜索、深度优先搜索、拓扑排序、最强连通分支(概念篇)

算法导论中关于图的几个基本概念:

   图的定义:图G可表示成(V,E),V是有穷集,E是v上的二元关系。V集是G的顶点集合,他的元素为顶点。E是G的边集合,他额元素称为边。

   有向图:边集E是由有序顶点对组成,有向图可以有自身环

   无向图:边集E是由无序顶点对组成,无向图无自身环

   【相邻】:如(u,v)是图G=(V,E)的一条边,则称顶点v与顶点u相邻

             注:无向图中邻接关系式对称的,有向图中不一定。

 【 顶点的度】:一个顶点的度,是指与之关联的边的条数。

 【有向图】顶点的出度:以该顶点为起点的边的条数。

 【有向图】顶点的入读:以该顶点为终点的边的条数。

【顶点可达】:如果存在一条从v到u的路径p,则称则称u是从v经由p可达的。

【简单路径】:如果路径上各顶点均不重复,则称这样的路径为简单路径。

【有向图】回路:如果路径P=(v0,v1,....,vk),其中v0 = vk,则称路径p形成回路

【有向图】简单回路:如果路径P=(v0,v1,....,vk),v1到vk互不相同,且v0 = vk,则称为简单回路

【连通分支】:图G=(v,E),G' = (v',E‘)。其中v' 是V的子集,E’是E的子集。且v'集合中顶点相互可达,则称G'是G的连通分支。

【无向图--连通图】:如果每对顶点都有路径相连,则称为连通图。

【有向图--强连通分支】:在“相互可达”关系下顶点的等价类称为有向图的强连通分支。

【有向图--强连通图】:如果图中国的每对顶点上都相互可达,则称其为强连通图

图的表示方法:

   1、邻接表(有向图、无向图均可表示)

              定义:由一个包含|v|个顶点的数组Adj所组成,其中数组Adj的每个元素对应于V中的一个顶点。邻接表Adj[u]包含图G中所有和顶点u相邻的顶点。
               存储分析:如果用邻接表方式表示图G = (V,E)
                                    无向图:邻接表大小 =  2*|E|
                                    有向图:邻接表大小 =   |E|
                优点:表示有向图时,每一个空间都存储着有用数据。
                            扩展能力强,每个空间可以扩展数据结构,存储更丰富的数据。
                缺点:判断一条边存不存在时,搜索效率不高

    2、邻接矩阵(有向图、无向图均可表示)

            定义:图G = (V,E),建立一个|V|*|V|矩阵adj
                 
                                      adj [ i , j ] = 1 如何(i,j) 属于E
                                                          0 不存在
            存储分析:|V|*|V|
            优点:搜索速度快,可以扩展数据结构
            缺点:当 E 小于 |V|*|V|时,会浪费存储空间
            
            邻接矩阵适合在 图较小时使用,或者E接近 |V|*|V|时












        

你可能感兴趣的:(图基本算法介绍:广度优先搜索、深度优先搜索、拓扑排序、最强连通分支(概念篇))