数据结构 (六)图篇

图:  由顶点的有穷非空集合和顶点之间边的集合组成

图的基本概念:

在图型数据结构中,数据被称为顶点,数据之间的关系被称为
在图中不允许出现没有点,但可以没有边
G(V,E)    V表示顶点的集合, E表示边的集合

图的种类:

无向图:顶点与顶点之间的边没有方向,这种边称为无向边,边用无向序偶对表示(v,v1)
V={A,B,C,D}  E={(A,B),(B,C),(C,D),(D,A),(A,C)}
在无向图中,如果任意两个顶点之间都存在边,这种图称为无向完全图 

有向图:若顶点之间有方向,这种边称为有向边,也叫
边用有序偶对<v,v1>,表示从v到v1的一条弧,v叫作弧尾,v1叫作弧头
注意:若不存在顶点到自身的边,也不存在重复出现的边,这种图叫简单图,数据结构中讨论的都是简单图
在有向图中,如果任意两个顶点之间存在方向相反的两条弧,这种图叫作有向完全图

图中有很少边或弧的图叫作稀疏图,反之叫作稠密图
如果图中的边或弧附有相关的数据,数据叫作,这种图也叫作(带权图)

如果G(V,E)和G1(V1,E1),存在\tiny V1\subseteq V,E1\subseteq E,那么G1是G的子图

顶点与边的关系:

顶点的度:指的是顶点相关联的边或弧的条目数
有向图又分为入度和出度
入度:其它顶点到该顶点的弧的条目数。
出度:从该点出发到其它顶点的弧的条目数
路径:从一个顶点到另一个顶点的顶点序列,路径长度指的是路径上的边或弧的条目数
回路或环:第一个顶点和最后一个顶点相同的路径
简单路径:序列中顶点不重复出现的路径
简单回路或简单环:除了第一个顶点和最后一个顶点之外,其余顶点都不重复出现的路径

连通图相关术语:

在无向图中,在顶点v到v1之间有路径,则称v到v1之间是连通的,如果任意两个顶点都是连通的(两点之间可以有其它点),那么这种图称为连通图
无向图中的极大连通子图(再添加一个顶点或一条边,该子图就不连通了)称为连通分量
1.必须是子图
2.子图必须是连通的
3.连通子图含有极大的顶点数

有向图强连通分量 :在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点 强连通 (strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个 强连通图 。有向图的极大强连通子图,称为强连通分量

图的存储结构:

图的存储主要是两个方面:顶点,边

邻接矩阵:利用一个矩阵表示各顶点之间的邻接关系

一个一维数组(顶点)和一个二维数组(边、弧)组成
二维数组 i,i 的位置都是0,如果是无向图,根据 i,i (左上到右下的对角线为轴)数组对称

优点:
1.非常容易判定两点之间是否有边
2.非常容易计算任意顶的入度和出度
3.非常容易统计邻接点
缺点:如果存储稀疏图,会浪费存储空间

邻接表:由顶点表(顺序存储),边表(链式存储)组成


              顶点表                                         边表
            存储顶点,下一个邻接点地址/下标      顶点下标 | 下一个邻接点地址
           A                ->                                       [ 1] ->  [ 3] ->  NULL
           B                                                            [ 2] ->NULL
           C                                                            [ 4] ->  [ 3] ->NULL
           D                                                            [ ] ->
           E                                                             [ ] ->

优点:
1.节省存储空间
2.非常容易计算出度
缺点:不方便计算入度

十字链表:由于邻接表不能同时兼顾入度和出度,因此修改邻接表的边表结构,使它既存储入度也存储出度,这种表叫作十字链表

邻接多重表:由于遍历表时需要一些删除边的操作,而邻接表在删除边时非常麻烦,因此设计出邻接多重表

边集数组:由两个一维数组构成,一个存储顶点的信息,另一个(结构体的数组,成员begin,end,weight)存储边的信息,(它的每个数据元素都由一条边的起点到终点的下标和权组成)

这种存储结构更侧重于边的相关操作(路径、路径长度、最短路径),而统计顶点的度,需要扫描整个数组,效率不高

图的总结:

1.根据图论中树的公式:顶点数 - 1 = 边数

2.无向图:
    无向完全图: 最多n*(n-1)/2条边,
    顶点表结点: n个顶点就有n个表结点
    边表节点: n*(n-1)个
    表结点:    n + n*(n-1)=n^2个

3.  n个顶点的连通图至少有n-1条边(树);

4.  n个顶点的简单图(完全图)至少有n*(n-1)/2条边。

5.邻接矩阵与邻接表的比较

  • 存储表示: 邻接矩阵:唯一,邻接表:不唯一
  • 空间复杂度:O(n^2) ,适用稠密图; O(n+e),稀疏图
  • 求顶点的度: 按有向图和无向图的计算方法进行;有向图中,邻接矩阵比邻接表更方便
  • 判断图中的边:判断矩阵中元素中的值是否为0;需要搜索链表,最坏的情况O(n)
  • 求边的数目:检测整个邻接矩阵,需要O(n^2);统计邻接表中结点个数总和需要O(n+e)

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
12篇学通csharp网络编程——第四篇 TCP应用编程 12篇学通csharp网络编程——第三篇 HTTP应用编程(下) 12篇学通csharp网络编程——第二篇 HTTP应用编程(上) 12篇学通csharp网络编程——第一篇 基础之进程线程 Lucene(1)lucene,你也会(7篇)——第一篇 快速入门 MongoDB(8)8天学通MongoDB——第八天 驱动实践 8天学通MongoDB——第七天 运维技术 8天学通MongoDB——第六天 分片技术 8天学通MongoDB——第五天 主从复制 8天学通MongoDB——第四天 索引操作 8天学通MongoDB——第三天 细说高级操作 8天学通MongoDB——第二天 细说增删查改 8天学通MongoDB——第一天 基础入门 UML系列(4)团队沟通利器之UML——类 团队沟通利器之UML—— 序列 团队沟通利器之UML——用例 团队沟通利器之UML——活动 wcf系列(5)wcf系列学习5天速成——第五天 服务托管 wcf系列学习5天速成——第四天 wcf之分布式架构 wcf系列学习5天速成——第三天 事务的使用 wcf系列5天速成——第二天 binding的使用(2) wcf系列5天速成——第一天 binding的使用(1) wpf系列(8)8天入门wpf—— 第八天 最后的补充 8天入门wpf—— 第七天 画刷 8天入门wpf—— 第六天 细说控件 8天入门wpf—— 第五天 数据绑定 8天入门wpf—— 第四天 模板 8天入门wpf—— 第三天 样式 8天入门wpf—— 第二天 xaml详解 8天入门wpf—— 第一天 基础概念介绍 并行开发(8)8天玩转并行开发——第八天 用VS性能向导解剖你的程序 8天玩转并行开发——第七天 简要分析任务与线程池 8天玩转并行开发——第六天 异步编程模型 8天玩转并行开发——第五天 同步机制(下) 8天玩转并行开发——第四天 同步机制(上) 8天玩转并行开发——第三天 plinq的使用 8天玩转并行开发——第二天 Task的使用 8天玩转并行开发——第一天 Parallel的使用 多线程系列(5)5天不再惧怕多线程——第五天 线程池 5天不再惧怕多线程——第四天 信号量 5天不再惧怕多线程——第三天 互斥体 5天不再惧怕多线程——第二天 锁机制 5天不再惧怕多线程——第一天 尝试Thread 经典算法专题(21)经典算法题每日演练——第二十一题 十字链表 经典算法题每日演练——第二十题 三元组 经典算法题每日演练——第十九题 双端队列 经典算法题每日演练——第十八题 外排序 经典算法题每日演练——第十七题 Dijkstra算法 经典算法题每日演练——第十六题 Kruskal算法 经典算法题每日演练——第十五题 并查集 经典算法题每日演练——第十四题 Prim算法 经典算法题每日演练——第十三题 赫夫曼树 经典算法题每日演练——第十二题 线段树 经典算法题每日演练——第十一题 Bitmap算法 经典算法题每日演练——第十题 树状数组 经典算法题每日演练——第九题 优先队列 经典算法题每日演练——第八题 AC自动机 经典算法题每日演练——第七题 KMP算法 经典算法题每日演练——第六题 协同推荐SlopeOne 算法 经典算法题每日演练——第五题 字符串相似度 经典算法题每日演练——第四题 最长公共子序列 经典算法题每日演练——第三题 猴子吃桃 经典算法题每日演练——第二题 五家共井 经典算法题每日演练——第一题 百钱买百鸡 开发利器系列(1)介绍一个小工具 Linqer 那点所谓的分布式(2)那点所谓的分布式——memcache 那点所谓的分布式——redis 树结构专题(5)6天通吃树结构—— 第五天 Trie树 6天通吃树结构—— 第四天 伸展树 6天通吃树结构—— 第三天 Treap树 6天通吃树结构—— 第二天 平衡二叉树 6天通吃树结构—— 第一天 二叉查找树 算法速成系列(15)算法系列15天速成——第十五天 【下】(大结局) 算法系列15天速成——第十四天 【上】 算法系列15天速成——第十三天 树操作【下】 算法系列15天速成——第十二天 树操作【中】 算法系列15天速成——第十一天 树操作(上) 算法系列15天速成——第十天 栈 算法系列15天速成——第九天 队列 算法系列15天速成——第八天 线性表【下】 算法系列15天速成——第七天 线性表【上】 算法系列15天速成——第六天 五大经典查找【下】 算法系列15天速成——第五天 五大经典查找【中】 算法系列15天速成——第四天 五大经典查找【上】 算法系列15天速成——第三天 七大经典排序【下】 算法系列15天速成——第二天 七大经典排序【中】 算法系列15天速成——第一天 七大经典排序【上】 算法洗脑系列(8)算法洗脑系列(8篇)——第八篇 概率思想 算法洗脑系列(8篇)——第七篇 动态规划 算法洗脑系列(8篇)——第六篇 回溯思想 算法洗脑系列(8篇)——第五篇 分治思想 算法洗脑系列(8篇)——第四篇 枚举思想 算法洗脑系列(8篇)——第三篇 贪心思想 算法洗脑系列(8篇)——第二篇 递归思想 算法洗脑系列(8篇)——第一篇 递推思想 天籁数学(3)天籁数学——数列篇(3) 天籁数学——数列篇(2) 天籁数学——数列篇(1) 像(1)玩玩像——第一篇:片灰度化 小爬虫系列(4)玩玩小爬虫——抓取时的几个小细节 玩玩小爬虫——抓取动态页面 玩玩小爬虫——试搭小架构 玩玩小爬虫——入门

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值