数据结构与算法-初识树和图

对于很多人来说,字典和数组是非常熟悉也经常用的数据结构。链表也还算比较常用。

他们的特点如下:

1. 字典和数组都是线性结构

2. 字典和数组,链表都是按照位置来存储数据的,例如字段是通过哈希计算下标,数组是使用下标,链表则是一个一个的链接在一起

3. 字典和数组,链表都是 实现的几乎都是一对一的结构,既数据之间的关系的关系是一一对应。

 

我们可以看出,上述的数据结构几乎是一对一的,而实际中常常存在一对多或者是多对多的情况。

例如:

组织结构

流程框图

我们可以看到,这些结构都是存在一对多的情况,注意其中不存在多对一的情况。

他们的结构就像是树一样,从一个根伸展出多个枝干,而每个枝干还可以伸展出更多的枝干,最终在枝干上可以生出很多的叶子

其对应的结构为

数是由节点组成,就是数组是由元素组成,数目n>=0。当节点的数目为0时,表示的是一个空树。如果节点数目不为0那么我们可以看到:

  • 树有一个唯一的根节点,也就是所有分支的出发点,节点之间的上下级关系称为父节点和子节点、。
  • 树的节点是由有限个节点组成,而每个子节点又是由其他节点集合组成,可以称之为子树。
  • 没有子节点而处于末端的节点,我们称之为叶子节点,就像是树干上的树叶一样。

树将最大的层次成为树的深度,即有几级节点。

 

树是一对多的情况,那么多对多又是什么样子呢。试想我们生活中的例子,最直接的就是地图导航,条条大路通罗马,我们道路四通八达,可以达到同一个目的的方法多之又多。

6n-graf.svg.pngKonigsberg_bridges.pngå¾è®ºç®æ³ æå¾æä»£ç  ä¸å­æ»ç» ååè¾è´æ¬_第1å¼ å¾ç

 

有很多问题我们可以把它们之间的关系抽象为点和线的方式。点则是表示一个事物,线则是表示两个点之间的关系

这是一个与树不同的结构,他允许多个节点连接同一个结构,复杂的关系构成了一个图形,我们称之为“图“。而我们曾听说的图论就是以“图”为研究对象的一个数学分支。图论里的绝大部分问题都是源于实际,从实际问题中抽象出点与线的集合进行分析。例如最短计算,特定路径查找,图的分割等等。

在图中根据不同的特征分为一下几种:

1. 如果节点直接的关系是有方向的,则称之为有向图

2. 如果任何两个节点都是直接或间接可以到达的,则称之为连通图。第二个明显不是连通图

è¿éå¾ç¤ºæå¾

连通图还有有向图和无向图的单独定义。在有向图中,由于节点之间的关系是有方向的,当任意两个节点是互相连通的(a->b,b->a),则称之为强连通图。

在此基础上,如果一个图不是强连通图,但是其包含的最大连通子图具有强连通图的性质,则称该子图为强连通分量。

下面的两个图中都可以找到这样的子图。

                    

关于图的几种基本概念都比较简单扼要的说了一下。概念可能说的不是很确切,但是这样理解起来很方便,具体的就日后慢慢说。

 

总结

关于树和图的结构,还是那句话:数据结构是为了解决实际生活中遇到的问题才被创造出来的,所以只有了解它的基础原理,才能够明白可以在哪里用?怎么用?。用树作比方,树可以用做排序,可以用来哈夫曼编码,可以用来数据库的索引方法,可以用来词频统计,这些我们是不是从来都没接触过呢。

而图的作用也十分巨大,我们互联网的路由器交错相连,运输路线和导航路线的控制,电路板的设计,这些的等等都可以抽象为图,从而使用图算法解决某些存在问题。

 

 

一部分图像引用:

https://www.applysquare.com/topic-cn/54mufHeAc/

http://blog.sina.com.cn/s/blog_12bcdd96c0102xuzr.html

https://www.it610.com/article/2553476.htm

https://www.cnblogs.com/mcomco/p/10304383.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值