Python图结构--邻接列表及其类似结构

算法学最强大的框架之一--图结构(graph)

对于图结构的实现来说,最直观的方式之一就是使用邻接列表。基本上就是要针对每个节点设置一个邻居列表(也可以是set等其他容器或迭代器类型)

下面我们来实现一个最简单的:假设现在我们有n个节点,编号分别为0,1,...,n-1。

注意:节点可以是任何对象,可以被赋予任何标签或名称,但使用0,1,...n-1区间内的整数来实现的的话,会简单许多。

1.简单明了的邻接集表示法

>>> a,b,c,d,e,f,g,h=range(8)
>>> N=[{b,c,d,e,f},#a
   {c,e},#b
   {d},#c
   {e},#d
   {f},#e
   {c,g,h},#f
   {f,h},#g
   {f,g}#h
   ]

>>> b in N[a]
True
>>> len(N[f])
3

2.邻接列表:

>>> a,b,c,d,e,f,g,h=range(8)
>>> N=[[b,c,d,e,f],#a
   [c,e],#b
   [d],#c
   [e],#d
   [f],#e
   [c,g,h],#f
   [f,h],#g
   [f,g]#h
   ]
list类型的背后实际上是一个动态数组。使用list实现的优势主要体现在它是一个已经被调试好了的、速度非常快的数据结构。

当我们执行与图相关的工作时,需要反复遵从一个主题思想,即一个图的最佳表示方法应该取决于我们要用它来做什么。例如,邻接列表(或数组)可以让我们在维持低成本的情况下,对N(v)中所有节点v进行有效遍历。然而,其在检查u和v是否互为邻居时,这时,邻接集或许是个好的选择。


3.加权邻接字典

>>> a,b,c,d,e,f,g,h=range(8)
>>> N=[{b:2,c:1,d:3,e:9,f:4},#a
   {c:4,e:3},#b
   {d:8},#c
   {e:7},#d
   {f:5},#e
   {c:2,g:2,h:2},#f
   {f:1,h:6},#g
   {f:9,g:8}#h
   ]
>>> b in N[a]
True
>>> len(N[f])
3
>>> N[a][b]
2

4.用dict作为主结构:

邻接集的字典表示法:

>>> N={
	'a':set('bcdef'),
	'b':set('ce'),
	'c':set('d'),
	'd':set('e'),
	'e':set('f'),
	'f':set('cgh'),
	'g':set('fh'),
	'h':set('fg')
	}


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值