zoukankan      html  css  js  c++  java
  • 图的其中两种表示方式

    1.无向图可以用邻接矩阵G [n] [n] —— n个顶点从0到n-1编号,若<Vi, Vj>是G中的边,则G [i] [j] = 1,否则G [i] [j] = 0;矩阵的特点:对角线都为0,以对角线为对称轴,两边对称。

    对于无向图的存储,可以用一个长度为n(n+1)/2的1维数组a存储,可以节省一半的空间(a[0] = G00, a[1] = G10, a[2] = G11……),则Gij在a中对应的下标是:a[i * (i+1) / 2 + j]

    对于网络,只要把G [i] [j]的值定义为边<Vi, Vj>的权重即可

    邻接矩阵的好处:

    1.直观、简单、好理解;

    2.方便检查任意一对顶点间是否存在边;

    3.方便找任一顶点的所有“邻接点”(有边直接相连的顶点)

    4.方便计算任一顶点的“度”(从该点发出的边数为“出度”,指向该点的边数为“入度”)

      无向图:对应行或列非0元素的个数

      有向图:对应行非0元素的个数是“出度”;对应列非0元素的个数是“入度”

    邻接矩阵的缺点:对于稀疏图来说有大量的无效元素,浪费空间。统计稀疏图中一共有多少条边,浪费时间

    2.以此,引出另一个表示方式——邻接表:G [n]为指针数组,对应矩阵每行一个链表,只存非0元素。(其表示顺序不是唯一的)

    对于网络,结构中要增加权重的域,用邻接表来存储 稀疏图 才值得

    邻接表的特点:

    1.方便找任一顶点的所有“邻接点”

    2.节约稀疏图的空间,需要n个头指针,2e个结点(每个结点至少2个域)

    3.对无向图来说,方便计算任一顶点的度;对有向图来说,只能计算“出度”;需要构造“逆邻接表”(存指向自己的边)来方便计算“入度”

    4.不方便检查任意一对顶点间是否存在边

    图的表示方式有很多,一般根据需要解决的问题来决定表示方式。

  • 相关阅读:
    两个日期之间的天数
    npm设置使用registry
    Fckeditor 2.6 插入多媒体
    Java包行业命名规则习惯
    FCKeditor编辑器在JAVA中的使用与配置
    [智能架构系列]Buddy简单高效智能的后端架构[一]
    活在墙外
    [翻译]Ambari,hadoop的配置,管理和监控项目入门
    IT战车的驱动力码农到工程师
    hadoop 2.0 详细配置教程
  • 原文地址:https://www.cnblogs.com/zhengxin909/p/12776349.html
Copyright © 2011-2022 走看看