数据结构-树

一、树

1.1 树是一种n(n>=0)个节点的有序集合,在任意非空树中,有且仅有一个根节点。通常,凡是分等级的方案都可以用具有严格层次关系的树结构来描述。

1.2 节点的度:一个节点的子树的个数记为该节点的度。内部节点是度不为0的节点;
1.3 树的高度:一棵树的最大层数记为树的高度。
1.4 有序(无序)树:若树中节点的各个子树看成是从左到右的具有次序的,即不能交换,则该树为有序树,否则称为无序树。

二、二叉树
2.1 二叉树与树之间最主要的区别是:二叉树中节点的子树要区分左子树和右子树,即使在节点只有一棵子树的情况下,也要明确指出该子树是左子树还是右子树,此外,二叉树的度为2

2.2 二叉树性质
(1)二叉树第i层上最多有 2 i − 1 2^{i-1} 2i1个节点;
(2)高度为k的二叉树最多有 2 k − 1 2^k-1 2k1个节点(k>=1);
(3)对于任何一颗二叉树,若其终端节点(叶子节点)数为 n 0 n_0 n0,度为2的节点为 n 2 n_2 n2,则 n 0 n_0 n0= n 2 n_2 n2+1;
(4)具有n个节点的完全二叉树的深度为 l o g 2 n log_2n log2n下取整加1。

2.3 若深度为k的二叉树有 2 k − 1 2^k-1 2k1个节点,则称其为满二叉树

2.4 深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中编号从1至n的节点一一对应时,称之为完全二叉树

2.5 假设有编号为i的节点:

  • 若i = 1,该节点为根节点,无双亲;若i > 1,该节点的双亲节点为 i 2 \frac{i}{2} 2i下取整;
  • 若2i <= n,该节点的左孩子编号为2i,否则无左孩子;
  • 若2i + 1 <= n,则该节点为右孩子编号为2i+1,否则无右孩子。

2.6 二叉树的三种遍历方法:中序,前序和后序遍历,在递归过程中总是遵循着访问根节点的次数。对含有n个节点的二叉树,遍历的时间复杂度都为O(n),遍历的时候都是将节点入栈,栈的最大长度恰好为树的深度,所以最坏的情况下,n节点的二叉树的深度为n,遍历算法的空间复杂度也为O(n)

三、线索二叉树
3.1 二叉树的遍历实质上是对一个非线性结构进行线性化的过程,它使得每个节点(除第一个节点和最后一个节点)在这些线性序列中有且仅有一个直接前驱和直接后继。直接前驱和直接后继并不是其父节点和孩子节点,而是前序,中序和后序遍历后序列中表现出来的直接前驱和直接后继。

3.2 若有n节点的二叉树采用二叉链表做存储结构,则链表中必然有n+1个空指针域,可以利用这些空指针域来存放节点的前驱和后继信息。为此,还需要在节点中增加标志ltag和rlag,用来区分孩子指针的指向。

ltaglchilddatarchildrtag

l t a g = { 0 lchild域指示节点的左孩子 1 , lchild域指示节点的直接前驱 , r t a g = { 0 rchild域指示节点的右孩子 1 , lchild域指示节点的直接后继 ltag= \begin{cases} 0 & \text {lchild域指示节点的左孩子} \\ 1, & \text{lchild域指示节点的直接前驱} \end{cases} , rtag= \begin{cases} 0 & \text {rchild域指示节点的右孩子} \\ 1, & \text{lchild域指示节点的直接后继} \end{cases} ltag={01,lchild域指示节点的左孩子lchild域指示节点的直接前驱,rtag={01,rchild域指示节点的右孩子lchild域指示节点的直接后继

3.3 若二叉树的二叉链表采用以上所示的节点结构,则相应的链表称为线索链表,其中指向节点前驱和节点后继的指针,称之为线索,加上线索的二叉树称为线索二叉树。对二叉树以某种次序遍历使其成为线索二叉树的过程称之为线索化。

3.4 采用这种方式得到的线索二叉树,其线索并不完整,有些节点的前驱和后继需要后续计算才能得到。

四、最优二叉树
4.1 又称为哈夫曼树,它是一类带权路径长度最短的树。

  • 路径上的分支数目称之为路径长度,即某条路径是由几个分子路径组成的;
  • 树的路径长度是从树根到每一个叶子节点之间的路径长度之和,节点的带权路径长度为该节点到根节点之间路径长度与该节点的权值的乘积。
  • 树的带权路径长度为所有叶子节点带权路径长度之和

4.2 哈弗曼算法

  1. 根据给定的n个权值{ w 1 , w 2 , . . . , w n w_1,w_2,...,w_n w1,w2,...,wn},构成n棵二叉树的集合F={ T 1 , T 2 , . . . , T n T_1,T_2,...,T_n T1,T2,...,Tn},其中,每棵树 T i T_i Ti中只有一个带权值为 w i w_i wi的根节点,其左右子树均为空。
  2. 在F中选择两棵权值最小的树作为左,右子树构造一棵新的树,置新构造二叉树的根节点的权值为左,右子树根节点的权值之和。
  3. 在F中删除这两棵树,同时将新得到的二叉树加入到F中。
  4. 重复2,3直到F中只有一棵树。

4.3 具有n个叶子节点的权值为 w 1 , w 2 , . . . , w n w_1,w_2,...,w_n w1,w2,...,wn}的最优二叉树并不唯一,因为选择两个子树时并没有指定哪棵作为右子树或左子树。

4.4 当给定n个权值后,构造出的最优二叉树的节点树的节点数目m就确定了,即m = 2n-1,因此可以采用一个一维的结构数组来存储二叉树;

4.5 前缀码:任意编码都不能是另一个编码的前缀,不定长编码。

五、树和森林
5.1 常用的树存储有双亲表示法,孩子表示法和孩子兄弟表示法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.2 树的遍历分为两种:先序遍历和中序遍历;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
,发送类别,概率,以及物体在相机坐标系下的xyz.zip目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秘境之眼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值