zoukankan      html  css  js  c++  java
  • 数据结构之图

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

    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顶点的最短时间

    算法

  • 相关阅读:
    笔记(用Python做些事情)--变量(数字、字符串)
    笔记(用Python做些事情)--变量(日期和时间)
    服务设计-ETL-核心框架
    zookeeper-服务-应用
    HBASE-表设计-优化
    HBASE-读取数据-优化
    HBASE-数据写入-优化
    Zookeeper-客户端-zkclient-curator
    KAFKA-使用问题
    HBASE-Spark操作hbase数据-思考
  • 原文地址:https://www.cnblogs.com/louissong/p/4890460.html
Copyright © 2011-2022 走看看