• 数据结构之图


    最近要考试数据结构了,将图的相关知识点记录下,加强记忆。

    1、概念:

    (1)无向完全图:任意两个顶点之间都存在边,边数=n*(n-1)/2.

    (2)有向完全图:任意两个顶点之间都存在方向互为相反的两条弧,边数=n*(n-1).

    (3)路径的长度:路径的边或弧的数目。

    2、图的存储结构:

    用一维数组存储顶点,用二维数组存储边或弧的信息。

    3、邻接矩阵

      以节点名横向竖向生成二位表,横着看,分别由v0到v1、v2。。。。做记录,若两节点之间有边或者以v0为弧尾的弧,就记录1,否则记录0.如果是弧或边有权值,两节点无边或弧则记录无限大,有边或弧记录权值,自己对自己记录0.

    4、邻接表

    如果节点很多,而弧只有1条,那么邻接矩阵很多地方都记录0,浪费了大量的空间,所以引出了邻接表。

    邻接表的方法是把某个节点的邻节点用链表串起来。比如v0,有v1,v2,连接着,则记录

    0 v0  ->  v1 ->  v2  ->  ^;

    1 v1  ....

    2 v2  ...

    5、逆邻接表

    由于邻接表只能方便查找以某个节点为弧尾的节点(出度),为了查找以它为弧头的节点(入度),所以有了逆邻接表。

    将原节点弧的方向翻转,计算出邻接表,就是逆邻接表。

    6、十字链表

    将邻接表和逆邻接表的优点结合起来。具体略,估计不会考到。

    7、图的遍历

    (1)深度优先遍历(depth first search) DFS

    类似树的前序遍历

    思想:找到一个节点作为起始节点,然后找它最右手边的节点作为下个节点,一直找下去。如果下个右手边节点被访问过了,则回溯到上个节点,再找右手左一个的节点,依次类推,直到回溯到起始节点,完成遍历。

    (2)广度优先遍历(breadth first search)

    类似树的层次遍历

    思想:找到一个节点作为起始节点,然后将其所有邻节点访问,再访问最右手边的节点的邻节点,直到所有节点的邻节点访问到。

    8、最小生成树

    概念:连接所有节点,代价最小

    算法:

    (1)普里姆算法(Prim)

    (2)克鲁斯卡算法(kruskal)

    9、最短路径

    概念:A到B,路径最短。类似游戏里面的寻路算法了。

    算法:

    (1)迪杰斯特拉算法(Dijkstra)

    (2)弗洛伊德算法(Floyd)

    10、拓扑排序(Top)

    用途:为了解决一个工程能否顺序进行。

    算法:从AOV网中选取一个入度为0的顶点输出,然后删除此顶点和以此顶点为尾的弧,继续重复此步骤,直到全部顶点输出或者AOV网中不存在入度为0的顶点(说明是环)为止。

    11、关键路径

    用途:为了获取A到B顶点的最短时间

    算法

  • 相关阅读:
    jqgard改变单元格后重新定值(事件和弹窗)
    js多个input框赋相同值
    查看PHP已安装拓展的指令
    PHP重新安装zlib拓展,处理PHP Startup: Invalid library (maybe not a PHP library) 'zlib.so' in Unknown
    php拓展安装报错:PHP Startup: Invalid library (maybe not a PHP library) 'zlib.so' in Unknown
    Composer提示:Installation Failed, Reverting ./Composer.Json To Its Original Content.错误的解决办法
    SQL Server序列号的获取
    一步步开发Windows服务(Windows Service)[转]
    HTML+CSS+JS实现的贪吃球小游戏【转】
    自制一个滚动条
  • 原文地址:https://www.cnblogs.com/louissong/p/4890460.html
Copyright © 2020-2023  润新知