顺序存储二叉树 从数据存储来看,数组存储发昂是和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。 问题 (1)上图的二叉树的节点,要求以数组的方式来存放。 array【1,2,3,4,5,6,7】 (2)在遍历数组array时,仍然可以以前、中、后序遍历方式完成节点的遍历。可称为顺序存储二叉树。 概念 顺序存储二叉树的特点如下: (1)顺序二叉树通常只考虑完全二叉树 (2)第n个元素的左子节点为2*n+1 (3)第n个元素的右子节点为2*n+2 (4)第n个元素的父节点为(n-1)/2 n表示二叉树中的第几个元素 if (array == null || array.Length == 0) { Console.WriteLine("数组为空,不能按照二叉树的前序遍历 } } 调用 static void Main(string[] args) { int[] array = { 1, 2, 3, 4,
什么是决策树 1.1 决策树的基本思想 其实用一下图片能更好的理解LR模型和决策树模型算法的根本区别,我们可以思考一下一个决策问题:是否去相亲,一个女孩的母亲要给这个女海介绍对象。 ? 1.2 “树”的成长过程 决策树基于“树”结构进行决策的,这时我们就要面临两个问题 : “树”怎么长。 这颗“树”长到什么时候停。 回归树: CART回归树是假设树为二叉树,通过不断将特征进行分裂。比如当前树结点是基于第j个特征值进行分裂的,设该特征值小于s的样本划分为左子树,大于s的样本划分为右子树。 最终得到一棵回归树。 参考文章:经典算法详解–CART分类决策树、回归树和模型树 4. 参考文章:决策树及决策树生成与剪枝 5.
今天我们来讲一讲记忆化搜索和树这个数据结构。记忆化搜索是对搜索算法的一个优化,涉及到记忆化搜索的题目都或多或少有一点技巧。至于树,它的定义非常简单,也有非常多的应用。 记忆化搜索 记忆化搜索(Memorization)是搜索算法的一个改进。 例如说matrix = [[9,9,4],[6,6,8],[2,1,1]],那么输出就是4。这对应着下面这一张图 ? 因为可以采用的方案是:跳 1 个单位到第 2 块石子, 然后跳 2 个单位到第 3 块石子, 接着 跳 2 个单位到第 4 块石子, 然后跳 3 个单位到第 6 块石子, 跳 4 个单位到第 7 块石子 关于树的定义,我们这里略去不提(毕竟这个不会的话可能先看看《算法与数据结构》更好),直接来看题目。 Problem 4: Leetcode 104 给定一个二叉树,找出其最大深度。
树的四种遍历方式的总结 树的四种遍历方式(前序遍历、中序遍历、后序遍历和层序遍历)是理解和操作二叉树的基础。以下是这四种遍历方式的总结: 1. 4. 层序遍历在二叉树的层次结构分析、图的广度优先搜索等场景中非常有用。 注意事项 递归实现简洁明了,但可能导致栈溢出,特别是在处理深度很大的树时。 inOrderTraversal(root->left); printf("%d ", root->val); inOrderTraversal(root->right); } 4. root->left = createNode(2); root->right = createNode(3); root->left->left = createNode(4)
子虚同学在行遍万里路,读过万卷书之后,创作了一首歌,叫《记忆的行囊》: …… 我把记忆装进我的行囊 走过大理的洱海旁 走过拉萨的八角街 走过成都的宽窄巷 …… 子虚回到办公室,边唱这首歌边想虚拟化平台的设计 那么,有没有办法让每个虚拟机的持久化存储卷跟着虚拟机飘移,让虚拟机记忆的行囊跟随虚拟机走遍天涯海角呢? 子虚问方老师:“记忆,真的能装进行囊吗?” 方老师说:“这是记忆。” 子虚问:“记忆呢?” 方老师笑了,指了指天。 子虚仰望天空,看见了一团团的白云。她顿悟了。 原来,想让云上的虚拟机带着持久化记忆自由迁移,需要把持久化存储盘放到共享的云资源池中,再把云资源池上的LUN挂载到虚拟机上,当VM发生迁移的时候,在新的宿主机上仍然可以挂载LUN。
---- 2-3-4树 定义 2-3-4树是四阶的 B树(Balance Tree),它的结构有以下限制: 所有叶子节点都拥有相同的深度。 节点只能是 2-节点、3-节点、4-节点之一。 对应红黑树 至于为什么说红黑树是 2-3-4树的一种等同呢,这是因为 2-3-4树的每一个结点都对应红黑树的一种结构,所以每一棵 2-3-4树也都对应一棵红黑树,下图是 2-3-4树不同结点与红黑树子树的对应 而上文中的 2-3-4树也可以转换成一棵红黑树: ? 由红黑树的性质5,和 2-3-4树的性质1,为了便于理解红黑树和 2-3-4树的对应关系,我们可以把红黑树从根结点到叶子结点的黑色结点个数定义为高度。 从替代的叶子结点向上递归修复; 替代结点颜色为红色(对应 2-3-4树中 4-结点或 3-结点)时删除子结点直接成功; 替代结点为黑色(对应 2-3-4树中 2-结点)时,意味着替代结点所在的子树会降一层
) { // step 3 recurse(currentNode.children[i]); } // step 4 步骤2(自终止),3(自调用)和4(回调)重复,直到我们遍历树的每个节点。 递归是一个非常困难的话题,需要一个完整的文章来充分解释它。 一个更好的方法是使用add(value),我们将在第4步和第5步中实现。 JavaScript var tree = new Tree('one'); tree. 直到currentNode不再指向任何节点——也就是说树中的每个节点都访问过了——重复4-8步。 ) { // step 3 recurse(currentNode.children[i]); } // step 4
红黑树是一颗懂得卸力的树,我们通过红黑树性质的3、4点得知,2 * 最短路径的节点数 <= 最长路径的节点数(注:以极限的思想,最短路径全黑,最长路径一黑一红交替出现(性质3),2条路径黑节点数相同(性质 4)),这就导致了虽然红黑树允许个别子树可能不平衡但是,由于该机制不会退化的很极端,而且每一次的修改都有可能将之前的不平衡抵消(AVL就不行),最后的结果就是,虽然红黑树不是一颗标准的平衡搜索二叉树,但是它将不平衡限制在了可控范围中 我们会头看红黑树的性质4,知道每条路径的黑节点数是相同的,你如果插入的节点颜色默认为黑色可就有得写了。有同学会说那如果插入节点的父节点为红色,那不是与性质3不能有连续的红节点违背了吗? ; }; ② 检测新节点插入后,红黑树的性质是否造到破坏(重点) 先看每种情况下如何处理,最后有总结帮助记忆 因为新节点的默认颜色是红色,因此:如果其双亲节点的颜色是黑色,没有违反红黑树任何 性质,则不需要调整 Java 库 3. linux内核 4. 其他一些库
内每个数增加X,如果是count,表示统计区间[a,b]能被7整除的个数 输出描述 Output Description 对于每个询问输出一行一个答案 样例输入 Sample Input 3 2 3 4 分类标签 Tags 点此展开 记录好%7的剩余系 暴力统计即可 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4
17}log_2 \frac{9}{17})=0.998 选择以属性“色泽seze”为例,有青绿、乌黑、浅白3种取值方案D_1,D_2,D_3,分别占比为6:6:5,每个子集数据中占比为(3:3):(4: 2):(1:4),那么3个子节点的信息熵分别为: Ent(D_1)=-(\frac{3}{6}log_2\frac{3}{6}+\frac{3}{6}log_2\frac{3}{6})=1.000 Ent (D_2)=-(\frac{4}{6}log_2\frac{4}{6}+\frac{2}{6}log_2\frac{2}{6})=0.918 Ent(D_1)=-(\frac{1}{5}log_2\frac {1}{5}+\frac{4}{5}log_2\frac{4}{5})=0.722 信息增益 根据上面的计算,得到基于色泽属性的信息增益为 $$ \begin{align} Gain(D,seze 用表中的验证集进行评估,{4,5,8}被正确分类,那么不进行划分的正确率是\frac{3}{7}=42.9% 划分后:针对上面的训练集数据,计算出所有特征的信息增益,具体过程如下: ?
本文涉及知识点 二叉树的遍历 队列的运用 二叉树的遍历和队列的相关概念前面已经介绍,忘记了的小伙伴复习后再看效果一定翻倍哟! 二叉树知识复习:[今天给二叉树加个BGM,二叉树唱歌了!] 队列知识复习:[leetcode栈队列]1 栈实现队列 1 Leetcode101 对称二叉树 给定一个二叉树,检查它是否是镜像对称的。 示例1: 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ 01 题目解析 思路 思路阐述 如果为对称二叉树,其连续的左右子节点值是相等的。我们将两节点先入队,然后每次从队列取出两个节点,最后将其左右子节点按照相反的顺序入队。队列空则结束判断。
该校的员工具有等级结构, 即师生关系构成一棵树, 以校长为树根. 员工号是1到N之间的整数. 人事部门把所有员工按活跃度排序. 样例输入 7 1 1 1 1 1 1 1 1 3 2 3 6 4 7 4 4 5 3 5 0 0 样例输出 5 //思路: 记忆化搜索 + 二叉树 //常理来说大学里 一个导师可以有多个学员 但一个学员只能有一个导师(二叉树) // 导师和学员不能同时邀请,那就是除了同时邀请外 还有三种情况,邀导不邀学 //邀学不邀导 和都不邀 (0与1 )的关系 通过DFS枚举各类情况 ,优化记忆数组; #include <string.h> #include <stdio.h> #define M 6002 #define max(a,b) a>b? 代表第i个人作为导师身份时第j个学员为4号学员 int dp[M][2];//记忆数组dp[L][0]代表满足条件下该员工(L)的导师未邀请状态最优活跃度 // dp[L][
决策树学习的目的是为了产生一颗泛化能力强,即处理未见示例能力强的决策树,基本形式如下图所示(判别习惯是否为好瓜的决策树): ? 2 划分选择 决策树学习的关键,是如何选择最优划分属性。 因此,我们可用信息增益来进行决策树的划分属性选择。著名的ID3决策树学习算法就是以信息增益为准则来选择划分属性的。 预剪枝是指在决策树生成过程中,对每个节点在划分前进行估计,若当前的划分不能带来决策树泛化性能提升,则停止划分并将当前节点标记为叶节点;后剪枝是先从训练集生成一颗完整的决策树,然后自底向上的对非叶节点进行考察 一般情形下,后剪枝决策树欠拟合风险较小,泛化性能往往优于预剪枝决策树。但后剪枝训练开销比未剪枝决策树和预剪枝决策树都要大很多。 4 连续与缺失值 到目前为止我们讨论了基于离散属性来生成决策树。 “多变量决策树”(multivariate decision tree)就是能实现这样的“斜划分”甚至更负责划分的决策树。如下图所示, ?
今天扫了收藏夹里一个TED视频,所以也借此总结一下上半辈子学到的点滴技巧吧~ 关于记忆技巧, 我印象最深的是小时候电视里有个老师在讲如何记忆英语单词,比如同样的词根,只要变换一个字母就可以记住一大批单词这样的技巧 第二个印象,是一个女的演讲者提到的记忆技巧, 她的记忆技巧可以归纳为一个词: “标新立异”, 也就是给每一个你要记忆的事物都打上一个不同寻常的标签,突出强烈的反差感, 比如在脑海里描绘一幅“隔壁老王蹲在一个十米的茅坑里 第三个印象是一个TED演讲者, 他的方法是是图像记忆法, 给每一个词语或者生硬的字面都配合上一幅图, 这种记忆法其实很好的阐述了那句英语谚语:"one picture is better than a 第四个印象是某人发明了个记忆宫殿(Memory Palace)这样的记忆技巧或者说术语,总结下来就是上下文关联(Context),将你要记忆的信息放到一个上下文中,这个上下文是任何你熟悉的场景,比如你的房子 关联性,将要记忆的信息通过某种故事线或者物理场景(上下文Context) 串联起来,可以帮助我们批量记忆一组信息,配合强烈反差的故事线更好。
相同的树 - 力扣(LeetCode) /* 解题思路: 首先比较根节点是否相同,然后分别比较左右子树是否相同。
在人工智能领域,尤其是基于大语言模型(LLM)的智能体(Agent)系统中,记忆机制是实现持续、连贯和个性化交互的核心基石。记忆系统模拟了人类的认知结构,通常划分为短期记忆和长期记忆。 第一章:短期记忆——智能体的工作记忆与意识流1.1定义与本质短期记忆是智能体用于处理当前任务或单次会话的临时信息存储区。 检索当新的会话开始时,Agent不会加载整个长期记忆库(那样会瞬间爆满短期记忆)。相反,它会根据当前的用户查询和短期记忆的上下文,去长期记忆库中寻找最相关的信息。 记忆冲突与更新:当新信息与旧记忆矛盾时,如何更新或版本化管理记忆(例如,用户之前喜欢咖啡,现在改喝茶了)。 检索长期记忆:系统将当前查询与短期记忆的上下文结合,作为“检索键”,在长期记忆库中进行向量相似性搜索,找出相关记忆。
对于一棵普通的二叉查找树而言,在进行多次的插入或删除后,容易让树失去平衡,导致树的深度不是O(logN),而接近O(N),这样将大大减少对树的查找效率。 有一种最古老的平衡查找树,即AVL树。 AVL树是带有平衡条件的二叉查找树。平衡条件是每个节点的左子树和右子树的高度最多差1的二叉查找树(空树的高度定义为-1)。 (右-左) 4. 对a的右儿子的右子树进行一次插入。(右-右) 情形1和4,情形2和3分别是关于A节点的镜像对称,故在理论上是两种情况,而编程具体实现还是需要考虑四种。 单旋转--情形1和4: ? 双旋转--情形2和3: 情形2和3就是向上图中的子树Y插入一个节点,由上图可知,无论是左单旋还是右单旋都无法改变子树Y的高度。 Figures 1-4 illustrate the rotation rules. ? ? ? ?
我看了答案还是有些不能完全理解,于是又去b站翻了翻教程基础DP,其中提到记忆化的递归(也称记忆化搜索),相当于结合了dp和递归的优点(这时我又觉得比DP还厉害),然后就准备写写记忆化递归。 ---- 目录 1.记忆化递归的解释与分析 2.记忆化递归的应用 ---- 一、记忆化递归的解释与分析 前面说道它结合了dp和递归的优点,分别是记忆化和逻辑清晰易懂。 记忆化递归则更加”投机取巧“了,它只计算了需要用的值并储存起来,而其它不会用到的值不去计算,最大化地减少了计算。 打个比方,dp就相当于计算了一个方阵上所有的点(无论有没有利用价值),而记忆化递归相当于计算了方阵上有价值的点,因此记忆化递归的运行时间可能比dp还要短。 (注意只是可能,因为斐波那契数列无论是dp还是记忆化递归,都是要把前面的值全部算出来的) ---- 二、记忆化递归的应用 感觉没啥写的,就拿分配宝藏来写shui一写shui吧。题目在这里。
文章目录 Keil中的配置 时钟树详解 ①HSE 高速外部时钟信号 ②锁相环PLL ③系统时钟SYSCLK ④AHB 总线时钟HCLK ⑤APB2 总线时钟HCLK2 ⑥APB1 总线时钟HCLK1 A、RTC 时钟 B、独立看门狗时钟 C、I2S 时钟 D、PHY以太网时钟 E、USB PHY 时钟 F、MCO 时钟输出 CubeMX可视化时钟树 ---- Keil中的配置 时钟配置在system_stm32f4xx.c 和stm32f4xx.h中,如PLL_M、PLL_N、PLL_P、PLL_Q、HSE_VALUE。 HCLK/4 = 45M。 ---- CubeMX可视化时钟树 ? ----
1.讲解相关的整个网络体系结构: Android技能树 — 网络小结(1)之网络体系结构 2.讲解相关网络的重要知识点,比如很多人都听过相关网络方面的名词,但是仅限于听过而已,什么tcp ,udp ,socket Android技能树 — 网络小结(2)之TCP/UDP Android技能树 — 网络小结(3)之HTTP/HTTPS Android技能树 — 网络小结(4)之socket/websocket/webservice Android技能树 — 网络小结(6)之 OkHttp超超超超超超超详细解析 Android技能树 — 网络小结(7)之 Retrofit源码详细解析 正文 1.