数据结构 图 以及图的延伸

1.什么是图?

    边集和非空顶点集的组合。

2.连通:

   是点与点之间的概念,是针对无向图的概念。顾名思义, 从a点到b点是可达的——a到b有路径存在,则称a和b是连通的。

3.连通图:

   无向图G中,任意两点之间都是连通的,则称图G为连通图。

4.连通分量:

   标准定义:无向图G中的极大连通子图称为连通分量。

   顾名思义地分析名称是记忆概念极好的一种方法:只要一个子图,尽可能多地(极大)包含了可以连通的各个点(保证了始终是连通图),那么这个子图就是图G的一个连通分量。(连通分量可以是一个也可以是多个)

5.强连通:是有向图中点与点之间的概念。顶点a,b之间,既有a到b的路径,又有b到a的路径,则称这a,b两点是强连通的。

6.强连通图:图G中,任意两点之间是强连通的,则G是强连通图。

7.强连通分量:有向图中的极大强连通子图称为该有向图的强连通分量。(与连通分量类似)

8.生成树:连通图G的所谓生成树是G的一个子图,这个子图是包含原图所有顶点的一棵树。//此条目描述还可完善

9.最小生成树:其实是最小权重的生成树。是所有生成树中权重最小的那一棵树(当然也可以有两棵同样权重的树)。//此条目描述还可完善



上篇博客讨论了几种特殊的二叉树结构之间的关系,接下来继续讨论非线性结构的图,这部分的概念比较多,在继续往下看前,先来看看图中的基本概念。


一、基本概念


1、图和树

   也许你会疑问图和树之间有什么关系吗,来我们看看下面这张有关图的图。

   上图中的图(a)很像树结构,其实它是图,所以树是一种特殊的图。树将节点有规律的组合到了一块,所以从某种意义上说树是一种特殊的图结构,图(a)也将是接下来要讨论的生成树。


2、生成树


    从图中任意一顶点出发遍历图,所经历的边的集合可看做是一个图的生成树,按照深度和广度的不同会得到不同的生成树,得到的生成树也是该图的一个子图。


最小生成树

    由于生成树不唯一,从不同的顶点出发可以得到不同的生成树。对连通网来说,边是带权值的,构造出具有最小权值的生成树就是最小生成树。构造最小生成树有多重算法,下面介绍两种最常用的。

2.1 普利姆算法

    构造过程:以一个顶点集合U={μ}作初态,不断寻找与U中顶点相邻且代价最小的边的另一个顶点,扩充U集合直至U中顶点包括所有的顶点为止。


2.2  克鲁斯卡尔算法

       构造过程:在图E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而进行选择下一条代价最小的边。



3、图的其它概念

    图中有很多概念,其中最让人头疼的是连通分量,连通分量是针对于无向图来说的,另一种是是强连通分量,它针对于有向图来说的,这两种都是指代的极大连通子图。


    对于连通分量来说,它指的是一个图中的极大连通子图,一个无向图可以分成几个极大地连通子图,极大相当于数学中的极大值,尽可能多的在子图中增加相连接的节点,示例如上图。

3.1 图的存储结构

    图的存储结构有两种,分别是邻接矩阵和邻接链表。邻接矩阵中元素分为010代表两个顶点之间没有边,1代表两顶点之间有边。邻接链表存储方式,类似于以前说的二叉树的邻接链表存储方式,一个结点指针域指向邻接结点。

3.2 有向图

    有向图有很重要的两种网,两种网是在工程领域中定义工程项目实施的一个模型,类似于PERT图。 

3.2.2 拓扑排序

         AOV网:分为顶点和有向边,其中顶点表示活动,有向边表示顶点之间的优先关系,重要的是顶点,表示了活动。

    拓扑排序:依次找出只有输出没有输入的顶点,把得到的顶点排成一个线性结构。

3.2.3 关键路径

        AOE网:AOV网相反,有向边是主体,表示了活动,其中边上的权值表示了活动的持续时间,顶点表示了事件。

   关键路径:从源点到汇点,长度最长的路径成为关键路径,要求路径上活动的持续时间最长。


二、结语

    至此,有关非线性结构的图的概念进行了一边回顾,其中很不多概念和以前树的概念相似,而且客观来说树是一种特殊的图,所以树的一些概念同样适用于图,另外在图中有两种特殊的网用在工程领域分别是AOV和AOE,两种网的概念很容易理解。



农场栏杆的修理问题可以从数据结构的角度进行一些延伸思考,特别是在处理维护任务管理和优化资源分配时。我们可以考虑以下几种数据结构和方法: 1. **(Graph)**:将农场划分为一个个区域或节点,栏杆损坏的位置作为边。这有助于理解栏杆之间的连通性和优先级,通过最短路径算法(如Dijkstra或A*)规划修理顺序。 2. **树(Tree)**:如果栏杆有一定的层次结构(比如篱笆从中心向外扩展),可以使用二叉树或层次遍历的数据结构来高效地找出最需要修理的部分。 3. **队列(Queue)**:当维修工人按一定顺序完成任务时,可以使用先进先出(FIFO)队列,保证每个位置都按照一定的规律被修复。 4. **优先级队列(Priority Queue)**:对于紧急或高风险的栏杆破损,可以使用具有优先级的队列,快速处理这些优先级高的任务。 5. **哈希表(Hash Table)**:存储每个栏杆的状态(例如,位置、损坏程度、维修历史等),便于快速查找和更新信息。 6. **散列表(Set/Map)**:用来跟踪已经维修过的栏杆,避免重复劳动。 相关问题-- 1. 如何用数据结构有效地记录栏杆的损坏状态和地理位置? 2. 在大规模农场中,如何利用数据结构动态调整维修工作的优先级? 3. 数据结构如何帮助农场管理员更有效地管理多个维修工人的工作进度?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漫天飞舞的雪花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值