zoukankan      html  css  js  c++  java
  • 图---面试知识点整理

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

    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

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

  • 相关阅读:
    部署方法
    MIME
    设置下载文件位置
    访问端口
    什么是Linq表达式?什么是Lambda表达式?
    彻底理解js中this的指向,不必硬背。
    获取checkbox状态
    checkbox复选框,如何让其勾选时触发一个事件,取消勾选时不触发
    leetcode — reverse-nodes-in-k-group
    leetcode — swap-nodes-in-pairs
  • 原文地址:https://www.cnblogs.com/lxt1105/p/6676895.html
Copyright © 2011-2022 走看看