图---面试知识点整理

有向无环图的拓扑排序可以看成图的层序遍历,每一层的顶点可以有不同的顺序,这就造成拓扑排序序列不唯一。

1.明白何为拓扑排序,其特点为什么?  以及排序结果是否唯一?

对一个 有向无环图 (Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。排序结果不唯一。

2.如何完成拓扑排序。

由AOV网构造拓扑序列的拓扑排序算法主要是循环执行以下两步,直到不存在入度为0的顶点为止。

(1) 选择一个入度为0的顶点并输出之;

(2) 从网中删除此顶点及所有出边。

循环结束后,若输出的顶点数小于网中的顶点数,则输出“有回路”信息,否则输出的顶点序列就是一种拓扑序列

3.拓扑排序及应用。 

拓扑排序常用来确定一个依赖关系集中,事物发生的顺序。例如,在日常工作中,可能会将项目拆分成A、B、C、D四个子部分来完成,但A依赖于B和D,C依赖于D。为了计算这个项目进行的顺序,可对这个关系集进行拓扑排序,得出一个线性的序列,则排在前面的任务就是需要先完成的任务。再进行多线程程序中可能会用到,将多线程单线程化

拓扑排序的步骤:

(1)、找到一个没有后继的顶点(如果有一条边从A指向B,那么B是A的后继)。

(2)、从图中删除这个顶点,在列表的前面插入顶点的标记。

(3)、重复步骤1和2.直到所有的顶点都从图中删除。这时列表显示的顶点顺序就是拓扑排序的结果。

环路:环图是不能进行拓扑排序的,如果有N个顶点的有向图有超过N-1条边,那么必定存在环。

 

将森林转换为对应的二叉树,若在二叉树结点中,结点m是结点n的双亲结点的双亲结点,则在原来的森林中,m和n可能具有的关系是____。

1.父子关系

3.兄弟关系

结点m是结点n的双亲结点的双亲结点有4种情况

  1)  m         2)m      3)m           4)m

      /              /              \              \

    /                \              /                \

  n                  n             n                   n

爷爷             父子         叔侄(关系2)          兄弟

 

用顶点表示事件,用弧表示活动,弧的权值表示活动所需要的时间,用这种方式构造的有向无环图叫做边表示活动的网(Activity On Edge Network),简称AOE-网

在AOE-网中存在惟一的、入度为0的顶点,叫做源点;存在惟一的、出度为0的顶点,叫做汇点。从源点到汇点的最长路径的长度即为完成整个工程任务所需的时间,该路径叫做关键路径。关键路径上的活动叫做关键活动。

关键活动延期完成  ,必将延期整个工程完成时间。如果有多条关键路径,此时延期的关键活动所在路径成为关键路径,其他原关键路径变为非关键路径。

关键活动提前完成,不一定使整个工程提前完成。因为关键路径可能不唯一,一条路径上的关键活动提前,只能使这条路径变为非关键路径,其他关键路径不受影响。

工作最迟开始时间LSii(LatestStartTime)——是指在不影响整个任务按期完成的前提下,本工作必须开始的最迟时刻。工作的最迟开始时间等于工作最迟完成时间与其持续时间之差。

工作最早开始时间ESii(EarliestStartTime)——是指在其所有前面工作全部完成后,本工作有可能开始的最早时刻。

关键路径,AOE网中,从事件i到j的路径中,加权长度最大者称为i到j的关键路径,显然,关键路径决定着AOE网的工期,关键路径的长度就是AOE网代表的工程所需的最小工期。

关键活动,若活动ak的最大可利用时间等于0(即(l(k)=e(k)),则称ak 为关键活动,否则为非关键活动。 显然,关键活动的延期,会使整个工程延期。但非关键活动不然,只要它的延期量不超过它的最大可利用时间,就不会影响整个工期。换句话说,即关键活动一定位于关键路径上。

 

BFS是广度优先遍历,DFS是深度优先遍历。对于一些特殊的图,比如只有一个顶点的图,其BFS生成树的树高和DFS生成树的树高相等。一般的图,根据图的BFS生成树和DFS树的算法思想,BFS生成树的树高比DFS生成树的树高小。

DFS深度优先遍历从一个顶点出发:依次对访问过的顶点做标记,并寻找没有访问过的相邻顶点,找直接相连的点,依次找,找到尽头时,再往回溯。

对于DFS,BFS遍历来说,时间复杂度和存储结构有关:

1.若采用邻接矩阵存储,时间复杂度为O(n^2);

2.若采用邻接链表存储,时间复杂度为O(n+e);

若所有边的长度相等,广度优先搜索算法是最佳解——亦即它找到的第一个解,距离根节点的边数目一定最少;但对一般的图来说,BFS并不一定回传最佳解。这是因为当图形为加权图(亦即各边长度不同)时,BFS仍然回传从根节点开始,经过边数目最少的解;而这个解距离根节点的距离不一定最短。这个问题可以使用考虑各边权值,BFS的改良算法 成本一致搜寻法 ( en:uniform-cost search )来解决。然而,若非加权图形,则所有边的长度相等,BFS就能找到最近的最佳解。

 

n个顶点的连通图至少有n-1条边,再少就不连通了,连通是指任意两个顶点之间都有路径,而不要求都有边相连.有路径是指从一个顶点沿着某些边可以到达另一个顶点。

无向连通图最少边为n-1,最多边为n*(n-1)/2

n个顶点,m条边的全连通图,至少去掉几条边才能构成一棵树?

n个顶点的树一定有n-1条边,所以需要去掉m-(n-1)=m-n+1条边

有n个顶点的强连通图 最多有n(n-1)条边,最少有n条边。

解释如下:

强连通图 (Strongly Connected Graph)是指一个有向图(Directed Graph)中任意两点v1、v2间存在v1到v2的路径(path)及v2到v1的路径的图。

最多的情况:

即n个顶点中两两相连,若不计方向,n个点两两相连有n(n-1)/2条边,而由于强连通图 是有向图,故每条边有两个方向,n(n-1)/2×2=n(n-1),故有n个顶点的强连通图最多有n(n-1)条边。

最少的情况:

即n个顶点围成一个圈,且圈上各边方向一致,即均为顺时针或者逆时针,此时有n条边。

 对于具有e条边的无向图,它在邻接表中有2e个边节点。对于任意一条边,在邻接表表示时都需要表示两次,每次都涉及两个节点。

表节点应该包括顶点表节点和边表结点。n个顶点的无向图有n个顶点表节点,n个顶点的无向图最多有n*(n-1)/2条边, 在邻接表中每条边存储两次,所以边表结点有n*(n-1)个结点,所以表节点有n+n*(n-1)=n^2个。

 

 有向图中顶点V的度等于其邻接矩阵中行表示出度,列表示入度。度等于出度加入度。

在 无向图 中,如果从顶点vi到顶点vj有路径,则称vi和vj连通。如果图中任意两个顶点之间都连通,则称该图为 连通图 ,否则,称该图为非连通图,则其中的极大连通子图称为连通分量,这里所谓的极大是指子图中包含的顶点个数极大。 

有向完全图:图中各边都有方向,且每两个顶点之间都有两条方向相反的边连接的图。

n个结点的完全有向图含有边的数目:n*(n-1)

无向图的顶点个数为n,则该图最多有n*(n-1)/2条边

 

一个带权的无向连通图的最小生成树的权值之和是唯一的。树不唯一,权值之和唯一。

十字链表是有向图的一种链式存储结构。该结构可以看成是将有向图的邻接表和逆邻接表结合起来得到的。用十字链表来存储有向图,可以达到高效的存取效果。同时,代码的可读性也会得到提升。

邻接表存储有向图时,所需空间为:8*(V+1)+8*m

邻接表存储无向图时,所需空间为:8*(V+1)+8*m*2

所以与顶点数和边数均有关

 

posted @ 2017-04-07 10:26  walanwalan  阅读(509)  评论(0编辑  收藏  举报