Python图结构--邻接列表及其类似结构
来源:互联网 发布:池州安广网络 编辑:程序博客网 时间:2024/06/08 23:07
算法学最强大的框架之一--图结构(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')}
阅读全文
0 0
- Python图结构--邻接列表及其类似结构
- 图的邻接表存储结构的定义及其遍历
- 图及其存储结构(邻接矩阵、邻接表)
- 图的邻接表结构
- 数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)
- 第十一周-图及其存储结构(邻接矩阵丶邻接表)
- 第十二周-图及其存储结构(邻接矩阵·邻接表)算法库
- 数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)
- 第十一周-项目1-图及其存储结构(邻接矩阵、邻接表)
- Python实现类似switch的分支结构
- 图及其储存结构
- 图结构及其应用
- 图的邻接表存储结构
- 图的邻接表存储结构
- 图的存储结构(邻接表)
- 图的存储结构(邻接链表法)
- 图的常用存储结构----邻接表
- 图的邻接表存储结构
- IE浏览器缓存问题的解决方法
- Qt Model/View之实现Item自定义显示
- 傅盛认知三部曲之一:所谓成长就是认知升级
- 网络共享问题:让电脑上网的N种方法
- JAVA基础类库——System类和Runtime类
- Python图结构--邻接列表及其类似结构
- rabbitmq 基本操作
- 根据图片自动生成动画
- 一遍记住Java常用的八种排序算法与代码实现
- lnmp、lamp、lnmpa一键安装包
- 数字与字符串
- pic 16 使用8563 rtc iic 通讯 内部iic
- 解决laytpl.js模板引擎插件加载模板后无法获取模板中的元素id等内容
- Android之底部菜单 BottomNavigationBar的使用