本文实例讲述了Python数据结构与算法之图结构(Graph)。分享给大家供大家参考,具体如下:

图结构(Graph)——算法学中最强大的框架之一。树结构只是图的一种特殊情况。

如果我们可将自己的工作诠释成一个图问题的话,那么该问题至少已经接近解决方案了。而我们我们的问题实例可以用树结构(tree)来诠释,那么我们基本上已经拥有了一个真正有效的解决方案了。

邻接表及加权邻接字典

对于图结构的实现来说,最直观的方式之一就是使用邻接列表。基本上就是针对每个节点设置一个邻接列表。下面我们来实现一个最简单的:假设我们现有

n 个节点,编号分别为 0, …, n-1.

节点当然可以是任何对象,可被赋予任何标签或名称。但使用 0, …, n-1

区间内的整数来实现的话,会简单许多。因为如果我们能用数字来代表节点,我们索引起来显然要方便许多。

然后,每个邻接(邻居)列表都只是一个数字列表,我们可以将它们编入一个大小为 n

的主列表,并用节点编号对其进行索引。由于这些列表内的节点的顺序是任意的,所以,实际上,我们是使用列表来实现邻接集(adjacency

sets)。这里之所以还是使用列表这个术语,主要是因为传统。幸运的是,Python 本身就提供独立的 set 类型。

我们以下图为例,说明图结构的各种表示方法(当我们在执行与图相关的工作时,需要反复遵从一个主题思想,即一个图的最佳表示方法应该取决于我们要用它来做什么):

N = [

{b, c, d, e, f},

{c, e},

{d},

{e},

{f},

{c, g, h},

{f, h},

{f, g}

]

在图论中,N(v) 代表的是 v 的邻居节点集; >>> b in

N[a] # neighborhood membership

True

>>>

len(N[f]) # out-degree:出度

3

加权邻接字典

使用 dict 类型来代替 set 或 list 来表示邻接集。在 dict

类型中,每个邻居节点都会有一个键和一个额外的值,用于表示与其邻居节点(或出边)之间的关联性,如边的权重。 a, b, c, d, e, f, g, h = range(8)

N = [

{b:2, c:1, d:3, e:9, f:4},

{c:4, e:4},

{d:8},

{e:7},

{f:5},

{c:2, g:2, h:2},

{f:1, h:6},

{f:9, g:8}

]

客户端调用: >>> b in

N[a] # neighborhood membership

True

>>>

len(N[f]) # out-degree

3

>>>

N[a][b] # Edge weight for (a, b)

2

邻接矩阵

邻接矩阵是图的另一种表示方法,这种表示方法的主要不同在于,它不再列出每个节点的所有邻居节点。

a, b, c, d, e, f, g, h = range(8)

N =[

[0, 1, 1, 1, 1, 1, 0, 0],

[0, 0, 1, 0, 1, 0, 0, 0],

[0, 0, 0, 1, 0, 0, 0, 0],

[0, 0, 0, 0, 1, 0, 0, 0],

[0, 0, 0, 0, 0, 1, 0, 0],

[0, 0, 1, 0, 0, 0, 1, 1],

[0, 0, 0, 0, 0, 1, 0, 1],

[0, 0, 0, 0, 0, 1, 1, 0],

]

关于邻接矩阵:

(1)主对角线为自己到自己,为0

(2)行和为出度

(3)列和为入度

python函数结构图_Python数据结构与算法之图结构(Graph)实例分析相关推荐

  1. python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...

    本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...

  2. python define graph_Python数据结构与算法之图结构(Graph)实例分析

    本文实例讲述了Python数据结构与算法之图结构(Graph).分享给大家供大家参考,具体如下: 图结构(Graph)--算法学中最强大的框架之一.树结构只是图的一种特殊情况. 如果我们可将自己的工作 ...

  3. python 熊猫钓鱼_Python数据结构与算法之使用队列解决小猫钓鱼问题

    本文实例讲述了Python数据结构与算法之使用队列解决小猫钓鱼问题.分享给大家供大家参考,具体如下: 按照<啊哈>里的思路实现这道题目,但是和结果不一样,我自己用一幅牌试了一下,发现是我的 ...

  4. python遍历树结构_python 数据结构与算法——树的遍历

    1.广度优先遍历 2.深度优先遍历 先序遍历:把根放在最前面 中序遍历:把根放在中间 后序遍历:把根放在后面 # -*- coding: utf-8 -*- """ Cr ...

  5. 数据结构与算法——29. 图(Graph)的概念及应用

    文章目录 一.图(Graph)的概念 1. 图的相关术语 2. 图的定义 二.图抽象数据类型(ADT Graph) 1. 邻接矩阵实现图 2. 邻接列表实现图 3. python代码实现 三.图的应用 ...

  6. python hash表_python数据结构与算法——哈希表

    哈希表 学习笔记 参考翻译自:<复杂性思考> 及对应的online版本:http://greenteapress.com/complexity/html/thinkcomplexity00 ...

  7. 【数据结构与算法】图结构最小生成树Kruskal算法的Java实现

    Kruskal算法 Kruskal算法是图论中用于求解最小生成树的算法,算法时间复杂度为O(eloge) 比较起Prim算法,Kruskal算法虽然同求最小生成树,却更适合稀疏网. 这里图的储存结构建 ...

  8. python获取游戏窗口_python中pygame针对游戏窗口的显示方法实例分析(附源码)

    本文实例讲述了python中pygame针对游戏窗口的显示方法.分享给大家供大家参考,具体如下: 在这篇教程中,我将给出一个demo演示: 当我们按下键盘的'f'键的时候,演示的窗口会切换到全屏显示和 ...

  9. 【数据结构与算法】图结构的Java实现

    邻接矩阵表示 邻接矩阵是图论中的一个基本概念,也是图的重要表示方法(矩阵表示之一). 它比较方便编程实现,因为我们只需要构造一个二维数组,其与矩阵形似+神似,很容易进行操作. 对于无向图,邻接矩阵是对 ...

最新文章

  1. const volatile同时限定一个类型int a = 10
  2. 笔记本电脑下载python视频教程-Python的Jupyter Notebook入门教程
  3. 完全二叉树的JAVA实现(以及非递归遍历方法)
  4. Web.xml配置详解之context-param(转)
  5. 运维小菜鸟随笔Linux入门级操作命令(更新中。。。)
  6. Java集合(8)--集合工具类Collections
  7. x264_param_t结构体参数分析
  8. 深入理解K-Means聚类算法
  9. HTML+CSS+JS实现网页随机点名
  10. 答非所问:产品质量怎样?发现了很多BUG
  11. java listview用法_Android ListView使用 | 学步园
  12. 计算机表格中格式隐藏了怎么办,excel表格第一列被隐藏起来了怎么办
  13. oracle共有同义词,Oracle同义词概念
  14. 女性意识觉醒,内衣是为了舒适还是性感?
  15. 手机远程启动汽车,汽车远程启动还是手机控制好!有一种远程手机启动热车系统非常的不错是什么功能知道吗?
  16. 三型两步验证登不上_苹果手机开启了双重认证,未信任的设备之前登入了,开启了双重认证未...
  17. RocketMq之消费方式
  18. 手机电视的概念及其发展状况
  19. 关于URL重写的实现
  20. 从头开始做一个智能家居设备:MQTT协议及使用

热门文章

  1. 脱口秀《娶妻当娶女博士》续集《娶妻别娶女博士》北大生物女博士的自白,爆笑加泪点...
  2. Nature综述——真菌的多样性:真菌的高通量测序及鉴定
  3. pandas使用drop函数删除dataframe中指定索引列表对应位置的数据行(drop multiple rows in dataframe with integer index)
  4. R语言ggplot2可视化分面图(faceting)、并设置每一个分面中的条形图都是排序的(bars are in order in each per facet of facet_warp)
  5. R语言使用pwr包的pwr.chisq.test函数对卡方检验进行效用分析(power analysis)、在已知效应量(effect size)、显著性水平、效用值的情况下计算需要的样本量
  6. Python使用numpy函数hsplit水平(按列)拆分numpy数组(返回拆分后的numpy数组列表)实战:水平(按列)拆分二维numpy数组、split函数水平(按列)拆分二维numpy数组
  7. Pandas判断dataframe是否为空
  8. R语言泊松回归模型案例:基于AER包的affair数据分析
  9. R可视化包ggplot2更改背景色实战
  10. 破译“生命天书”20年