数据结构与算法-图(Graph)

特点

    一种更加复杂的非线性数据结构

    名词解释

        顶点(vertex): 图中的元素

        边(edge): 图中的一个顶点可以与任意其他顶点建立连接关系

        度(degree): 跟顶点相连接的边的条数

        有向图: 边有方向的图

        无向图: 边没有方向的图

        入度(In-degree): 有多少条边指向这个顶点

        出度(Out-degree): 有多少条边是以这个顶点为起点指向其他顶点

有向图

            带权图(weighted graph): 在带权图中每条边都有一个权重(weight)

    内存中存储图这种数据结构方法

        1.邻接矩阵(Adjacency Matrix)存储

            邻接矩阵的底层依赖一个二维数组

            对于无向图来说,如果顶点i与顶点j之间有边,就将A[i][j]和A[j][i]标记为1;

            对于有向图来说,如果有一条箭头从顶点i指向顶点j的边,就将A[i][j]标记为1;

            同理,如果有一条箭头从顶点j指向顶点i的边,我们就将A[j][i]标记为1。

            对于带权图,数组中就存储相应的权重

邻接矩阵存储方法

            无向图中,adj[0][0]没边为0,adj[0][1]有边为1,adj[0][2]有边为1,adj[0][3]无边为0

            总结

                1.存储方式简单、直接,因为基于数组在获取两个顶点的关系非常高效

                2.方便计算,可以将很多图的运算转换成矩阵之间的运算

                    比如求解最短路径问题的Floyd-Warshall算法,利用矩阵循环相乘若干次得到结果

                3.比较浪费存储空间,特别针对稀疏图(Sparse Matrix): 顶点很多但每个顶点边不多

        2.邻接表(Adjacency List)存储

            每个顶点对应一条链表,链表中存储的是与这个顶点相连接的其他顶点

            有向图: 每个顶点对应的链表里面,存储的是指向的顶点

            无向图: 每个顶点对应的链表里面,存储的是跟这个顶点有边相连的顶点

有向邻接表

            总结

                邻接表存储起来比较节省空间,但使用比较耗时

                链表的存储方式对缓存不友好,查询两个顶点之间的关系不高效

                邻接表升级(链表数据结构替换)

                    1.换成平衡二叉查找树(红黑树),可以快速地查找两个顶点之间是否存在边了</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值