[算法导论]图的基本算法

一、图的数据结构

图有两种表示方式:邻接矩阵和邻接表。

1. 邻接矩阵

以矩阵A(i,j)表示,设图有N个结点,结点为x1...xN,则A(i,j)为N*N矩阵。如果存在x(i)到x(j)的边,则A(i,j)=w,否则A(i,j)=0(w为权值,无权值情况下为1)。那么显然,邻接矩阵适用边较多的图(稠密图)。他的空间复杂度为O(V^2)(恒定的)。

2. 邻接表

邻接表是数组和链表的组合。

3. 两种表示方式比较

邻接矩阵可以很方便的判断两个顶点之间是否存在边以及出入度的计算。另外,如果非加权图,邻接矩阵的每个元素只用一个二进制位即可。再者,当为无向图时,还可以将邻接矩阵压缩,只需要n(n+1)/2个元素。

邻接表更适宜扩展,比如结点有许多的卫星数据。

4. 如果用Python实现,图可以用字典和列表的组合实现,如:

graph = {'A':['B', 'C'], 'B':['C', 'D'], 'C':['D'], 'D':['C'], 'E':['F'], 'F':['C']}

key为结点,key的值是个列表,为以A为入度的边的出度。

二、

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值