欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 数据结构编程实践20讲(Python版)—13图形数据结构

数据结构编程实践20讲(Python版)—13图形数据结构

2024/10/26 17:18:46 来源:https://blog.csdn.net/qq_32882309/article/details/142958242  浏览:    关键词:数据结构编程实践20讲(Python版)—13图形数据结构

本文目录

    • 13 图形数据结构(Graph)
      • S1 说明
        • 图的基本概念
        • 图的基本特征
        • 图的基本操作
      • S2 典型图数据结构示例
        • 邻接矩阵(Adjacency Matrix)
        • 邻接表(Adjacency List)
        • 边列表(Edge List)
        • 邻接集合(Adjacency Set)
      • S3 应用
        • 1. 无向图
        • 2. 有向图
        • 3. 无向加权图
        • 4. 有向加权图

往期链接

01 数组02 链表03 栈04 队列05 二叉树06 二叉搜索树07 AVL树08 红黑树09 B树10 B+树
11 线段树12 树状数组

13 图形数据结构(Graph)

S1 说明

图形数据结构是一种重要的数据结构,用于表示一组对象(称为顶点或节点)之间的关系(称为边)。图的应用广泛,常见于社交网络、网络路由、推荐系统等领域。

图的基本概念
  • 顶点(Vertex):
    图中的基本单位,表示一个对象。
  • 边(Edge):
    连接两个顶点的线,表示它们之间的关系。
  • 有向图与无向图:
    • 有向图(Directed Graph):边有方向,从一个顶点指向另一个顶点。
    • 无向图(Undirected Graph):边没有方向,连接的两个顶点是对称的。
  • 加权图与非加权图:
    • 加权图(Weighted Graph):边有权重,表示连接两个顶点的代价或距离。
    • 非加权图(Unweighted Graph):边没有权重,所有边被视为相同。
图的基本特征

1. 连通性

  • 连通图:图中任意两个顶点之间都有路径相连。
  • 非连通图:至少存在一个顶点无法通过路径到达其他顶点。

2. 度

  • 顶点度(Degree):与一个顶点相连的边的数量。
  • 入度(Indegree):有向图中指向某个顶点的边的数量。
  • 出度(Outdegree):有向图中从某个顶点出发的边的数量。

3. 子图

  • 子图:由图的部分顶点和边组成的图,可以是有向的或无向的。

4. 环与无环

  • 环(Cycle):路径的开始和结束顶点相同,且至少包含一个边。
  • 无环图(Acyclic Graph):不包含任何环的图。常见的无环图有树(Tree)。

5. 图的类型

  • 完全图(Complete Graph):每一对不同的顶点都有一条边相连。
  • 平面图(Planar Graph):可以在平面上绘制而不交叉的图。

6. 图的连通分支

  • 连通分支:在非连通图中,每个连通子图称为一个连通分支。

7. 图的权重

  • 权重:边的值或成本,通常用于加权图,表示连接两个顶点的代价或距离。

8. 拓扑排序

  • 对于有向无环图(DAG),可以对顶点进行线性排序,使得每条边的起点在终点之前。

9. 连通性指标

  • 聚类系数(Clustering Coefficient):衡量图中顶点聚集程度的指标。
  • 直径(Diameter):图中最长的最短路径的长度。

10. 图的同构性

  • 同构图(Isomorphic Graphs):两个图的结构相同,即存在一一对应的顶点关系,使得对应的边也相连。
图的基本操作
  • 添加顶点:
    在图中添加新的顶点。
  • 添加边:
    在两个顶点之间添加边。
  • 删除顶点:
    从图中删除一个顶点及其相关边。
  • 删除边:
    从图中删除两个顶点之间的边。
  • 查找顶点
    检查图中是否存在某个顶点
  • 查找边
    检查两个顶点之间是否存在边
  • 遍历图
    使用深度优先搜索(DFS)或广度优先搜索(BFS)遍历图
  • 获取邻接顶点
    获取与指定顶点相连的所有顶点。
  • 计算图的度
    计算一个顶点的度(与之相连的边的数量)

S2 典型图数据结构示例

邻接矩阵(Adjacency Matrix)
# 示例:邻接矩阵
V = 4  # 顶点数量
adj_matrix = [[0] * V for _ in range(V)]# 添加边
adj_matrix[0][1] = 1  # 从顶点0到顶点1的边
adj_matrix[1][0] = 1  # 从顶点1到顶点0的边(无向图)
邻接表(Adjacency List)
# 示例:邻接表
adj_list = {0: [1],1: [0, 2],2: [1],3: []
}
边列表(Edge List)
# 示例:边列表
edge_list = [(0, 1),(1, 2),(2, 1

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com