数据结构与算法Python版 图


一、图

表示图的英文单词

  • painting:用画刷画的油画
  • drawing:用硬笔画的素描/线条画
  • picture:真实形象所反映的画,如照片等,如take picture
  • image:由印象而来的画,遥感影像做image,因是经过传感器印象而来
  • figure:轮廓图的意思,某个侧面的轮廓,所以有figure out的说法
  • diagram:抽象的概念关系图,如电路图、海洋环流图、类层次图
  • chart:由数字统计来的柱状图、饼图、折线图
  • map:地图;plot:地图上的一小块
  • graph:重在由一些基本元素构造而来的图,如点、线段等

图Graph的例子

  • 图是比树更为一般的结构,树是一种具有特殊性质的图
  • 图可以用来表示现实世界中很多事物。例如道路交通系统、航班线路、互联网连接等
  • 公共交通:一个城市的公交系统有数百条运营线路,公交站点数千个
  • 互联网:一张百亿个信息点的巨型网络
  • 社交网络:六度分隔理论,世界上任何两个人之间通过最多6个人即可建立联系

在这里插入图片描述

图的相关术语表

  • 顶点Vertex(也称“节点Node”):是图的基本组成部分,顶点具有名称标识Key,也可以携带数据项payload
  • 边Edge(也称“弧Arc”):作为2个顶点之间关系的表示,边连接两个顶点;边可以是无向或者有向的,相应的图称作“无向图”和“有向图”
  • 权重Weight:为了表达从一个顶点到另一个顶点的**“代价”**,可以给边赋权;例如公交网络中两个站点之间的“距离”、“通行时间”和“票价”都可以作为权重。
  • 图的定义:一个图G可以定义为G=(V, E),其中V是顶点的集合,E是边的集合,E中的每条边e=(v, w),v和w都是V中的顶点;
  • 子图:V和E的子集
  • 赋权图:在E中的每条边e=(v, w)中添加权重分量,如果边是有向的,叫有向赋权图
  • 路径Path:图中的路径,是由边依次连接起来的顶点序列;无权路径的长度为边的数量;带权路径的长度为所有边权重的和
  • 圈Cycle:圈是首尾顶点相同的路径
  • 有向无环图(directed acyclic graph: DAG):如果一个有向图不存在任何圈,则称为有向无环图

在这里插入图片描述

二、抽象数据类型图

抽象数据类型图(ADT Graph)

方法名 描述
Graph() 创建一个空的图
addVertex(vert) 将顶点vert加入图中
addEdge(fromVert, toVert) 添加有向边,从fromVert指向toVert
addEdge(fromVert, toVert, weight) 添加带权的有向边,从fromVert指向toVert,并指定权重weight
getVertex(vKey) 查找名称为vKey的顶点
getVertices() 返回图中所有顶点的列表
in 按照vert in graph的语句形式,返回顶点vert是否存在图中,返回True或False

抽象数据类型图的实现方法

  • 方法一:邻接矩阵 Adjacency Matrix
  • 方法二:邻接表 Adjacency List

邻接矩阵

  • 矩阵的每行和每列都代表图中的顶点
  • 如果两个顶点之间有边相连,设定行列值。无权边则将矩阵分量标注为1;带权边则将矩阵分量标注为权重
  • 优点是简单,缺点效率低。大多数问题所对应的图都是稀疏sparse的,即边远远少于顶点数量平方这个量级

在这里插入图片描述

邻接列表

  • 维护一个包含所有顶点的主列表(master list),主列表中的每个顶点,再关联一个与自身有边连接的所有顶点的列表
  • 优点存储空间紧凑高效

在这里插入图片描述

三、图的实现-邻接列表法

顶点Vertex类:含了顶点信息,以及顶点连接边信息

class Vertex:
    """顶点类"""

    def __init__(self, key)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值