数据结构-树

一、树

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 树的遍历分为两种:先序遍历和中序遍历;

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秘境之眼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值