18 12:06 下午 * @Version 1.0 */ public class Main { static int n; static int m; //记忆化递归 +1][m+1]; rec = new int[n + 1][m + 1]; System.out.println(dp(1,1));; } //记忆化递归一定要有返回值
1.3.1 ID3算法 解释:在根节点处计算信息熵,然后根据属性依次划分并计算其节点的信息熵,用根节点信息熵–属性节点的信息熵=信息增益,根据信息增益进行降序排列,排在前面的就是第一个划分属性,其后依次类推 举例来说,现在一个袋子里有3种颜色的球若干个,伸手进去掏出2个球,颜色不一样的概率,这下明白了吧。Gini(D)越小,数据集D的纯度越高。 划分值分别有三个,因而有三种划分的可能集合,划分后的子集如下: 1.划分点: “本科”,划分后的子集合 : {本科},{硕士,博士} 2.划分点: “硕士”,划分后的子集合 : {硕士},{本科,博士} 3. 1.3.4 三种不同的决策树 ID3:取值多的属性,更容易使数据更纯,其信息增益更大。 训练得到的是一棵庞大且深度浅的树:不合理。 C4.5:采用信息增益率替代信息增益。 3.
今天我们来讲一讲记忆化搜索和树这个数据结构。记忆化搜索是对搜索算法的一个优化,涉及到记忆化搜索的题目都或多或少有一点技巧。至于树,它的定义非常简单,也有非常多的应用。 记忆化搜索 记忆化搜索(Memorization)是搜索算法的一个改进。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 比方说输入的二叉树是[3,9,20,null,null,15,7],那么输出就是3。因为它对应的二叉树长下面这样。 ? 比方说如果输入是root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8,那么输出就是3,对应的3条路径如下。 ? 比方说如果输入[3,9,20,null,null,15,7],那么输出就是 [ [3], [20,9], [15,7] ] 这一题其实就是二叉树的层序遍历,但是稍微加了一点技巧,就是如果第一层是从左到右遍历的
二叉树-删除指定节点 以上一篇为基础来看看树中的删除。 问题 (1)如果删除的节点是叶子节点,则删除该节点。 (2)如果删除的节点是非叶子节点,则删除该子树。 (3)测试,删除5号叶子节点和3号子树。 分析 首先先处理,如果树是空树,如果只有一个节点,则等价于将二叉树置空。 1.因为我们的二叉树是单向的,所以我们是判断当前节点的子节点是否需要删除节点,而不能去判断当前这个结点是不是需要删除节点。 = null; 并且就返回(结束递归删除) 4.如果第2步和第3步都没有删除掉节点,那么就需要向左子树递归删除。 = node3; node3.Left = node5; node3.Right = node4; tree.SetRoot(root
assert(false); } break; } else//其他情况就是之前就出问题了,出现了3或者是 -3 { assert(false);//通过 assert(false) 强制中断,可以避免程序运行出错结果。 } } private:Node* _root = nullptr;};void test(){ AVLTree<int, int>t; //int a[] = { 16, 3, 7, 11, 9, 26, 18, 14, 15 }; int a[] = { 4,2,6,1,3,5,15,7,16,14 }; for (auto e : a) { 这里a/b/c是高度为h的子树,是一种概括抽象表示,他代表了所有右单旋的场景,实际右单旋形态有很多种,具体图2/图3/图4/图5进行了详细描述。
对于一般问题,Agent包括如下功能 对环境的引用 自身变量:Q值,状态值的记忆 策略方法 动作执行方法 学习方法:改进策略,这部分是关键 class Agent(): def __init__ 同时没有记忆功能的Agent只能进行单一episode的学习,无法对其他的episode学习,无法进行batch学习,上限较低,对于复杂问题,为了增强学习的鲁棒性,往往需要输入数据的规模扩充,也就是对Agent 有了记忆能力的要求。 实现方式 抽象基类Agent 为了让代码具有较高的复用性和可读性,提现python的集成和多态特性,将Agent抽象为一个基类,在子类中实现记忆功能。 a:{1:<3} r:{2:<4} is_end:{3:<5} s1:{4:<3}".\ format(self.data[0], self.data
第一次接触红黑树是在关于hashMap,上来就扔五个特性,说满足这五个特点的二分搜索树就是红黑树。 (1)每个节点或者是黑色,或者是红色。 (2)根节点是黑色。 (3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!] (4)如果一个节点是红色的,则它的子节点必须是黑色的。 瞬时懵逼……我扔十个特性,是不是能定义一个红绿灯树呢。所以一直不明白红黑树为什么要这么定义。 直到今天了解了2-3树,才豁然开朗。2-3树是一种神奇的树,它能够保证该树是一个完美树。 2-3树可以演化成红黑树,这便是保证红黑树效率的根本。 先说奇葩的2-3树,首先2-3树满足二分搜索树,但每个节点可能存在1或2个数据,对应的该节点就可能存在2或3个子节点 2-3树 ? 2-3树引入.png 2-3树插入操作: ? 2-3树.png 2-3树演化为红黑树 将三节点拆为两个节点,并将左数据节点设为红色来实现2-3树同等功能 ? 红黑树.png
上篇python连连看与记忆翻牌游戏(2)完成了界面,今天完成最后一篇算法与游戏结合,比较简单,这里简单讲讲。 最终效果: 之前的连接算法中,我们是通过一个矩阵来测试的。 ' '猫_1.png' '猫_1.png' '猫_4.png' '猫_6.png'] ['猫_5.png' '猫_1.png' '猫_5.png' '猫_7.png' '猫_2.png' '猫_3. png' '猫_5.png' '猫_6.png'] ['猫_7.png' '猫_6.png' '猫_3.png' '猫_4.png' '猫_2.png' '猫_1.png' '猫_5.png' '猫_8.png'] ['猫_2.png' '猫_8.png' '猫_2.png' '猫_3.png' '猫_3.png' '猫_8.png' '猫_7.png' '猫_8.png']] 接着将原来的算法作为一个模块
通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。 二、红黑树的性质 1. 每个结点不是红色就是黑色 2. 根节点是黑色的 3. 红黑树是一颗懂得卸力的树,我们通过红黑树性质的3、4点得知,2 * 最短路径的节点数 <= 最长路径的节点数(注:以极限的思想,最短路径全黑,最长路径一黑一红交替出现(性质3),2条路径黑节点数相同(性质 我们会头看红黑树的性质4,知道每条路径的黑节点数是相同的,你如果插入的节点颜色默认为黑色可就有得写了。有同学会说那如果插入节点的父节点为红色,那不是与性质3不能有连续的红节点违背了吗? ; }; ② 检测新节点插入后,红黑树的性质是否造到破坏(重点) 先看每种情况下如何处理,最后有总结帮助记忆 因为新节点的默认颜色是红色,因此:如果其双亲节点的颜色是黑色,没有违反红黑树任何 性质,则不需要调整 Java 库 3. linux内核 4. 其他一些库
y3], ... ] that uniquely defines a skyline. 5 should be merged into one in the final output as such: [...[2 3], [4 5], [12 7], ...] image.png 上述粉色矩形框内的,该矩形由左上角 (row1, col1) = (2, 1) 和右下角 (row2, col2) = (4, 3) 确定。 示例: 给定 matrix = [ [3, 0, 1, 4, 2], [5, 6, 3, 2, 1], [1, 2, 0, 1, 5], [4, 1, 0, 1, 7], [1, 0 , 3, 0, 5] ] sumRegion(2, 1, 4, 3) -> 8 update(3, 2, 2) sumRegion(2, 1, 4, 3) -> 10 注意: 矩阵 matrix 的值只能通过
该校的员工具有等级结构, 即师生关系构成一棵树, 以校长为树根. 员工号是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? L)的导师未邀请状态最优活跃度 // dp[L][1]代表满足条件下该员工(L)的导师邀请状态下最优活跃度 int dfs(int L,int last) { //优化 记忆数组
css3被拆分成如下的小模块,选择器,盒模型,背景和边框,文字特效,2D/3D转换,动画,多列布局和用户界面 2D转换 使用transform:属性来为元素设置2D转换,兼容浏览器加前缀 –webkit scale(2,2); 使用skew()方法,拉伸元素,参数:x轴角度,y轴角度 例如:transform:skew(20deg,20deg); 使用matrix()方法,多变换结合,参数:矩阵,我看不懂 3D
今天扫了收藏夹里一个TED视频,所以也借此总结一下上半辈子学到的点滴技巧吧~ 关于记忆技巧, 我印象最深的是小时候电视里有个老师在讲如何记忆英语单词,比如同样的词根,只要变换一个字母就可以记住一大批单词这样的技巧 第二个印象,是一个女的演讲者提到的记忆技巧, 她的记忆技巧可以归纳为一个词: “标新立异”, 也就是给每一个你要记忆的事物都打上一个不同寻常的标签,突出强烈的反差感, 比如在脑海里描绘一幅“隔壁老王蹲在一个十米的茅坑里 第三个印象是一个TED演讲者, 他的方法是是图像记忆法, 给每一个词语或者生硬的字面都配合上一幅图, 这种记忆法其实很好的阐述了那句英语谚语:"one picture is better than a 第四个印象是某人发明了个记忆宫殿(Memory Palace)这样的记忆技巧或者说术语,总结下来就是上下文关联(Context),将你要记忆的信息放到一个上下文中,这个上下文是任何你熟悉的场景,比如你的房子 关联性,将要记忆的信息通过某种故事线或者物理场景(上下文Context) 串联起来,可以帮助我们批量记忆一组信息,配合强烈反差的故事线更好。
---- 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树说一下红黑树结点的添加和删除: ---- 结点插入 2-3-4树中结点添加需要遵守以下规则: 插入都是向最下面一层插入; 升元:将插入结点由 2-结点升级成 3-结点,或由 3
在人工智能领域,尤其是基于大语言模型(LLM)的智能体(Agent)系统中,记忆机制是实现持续、连贯和个性化交互的核心基石。记忆系统模拟了人类的认知结构,通常划分为短期记忆和长期记忆。 第一章:短期记忆——智能体的工作记忆与意识流1.1定义与本质短期记忆是智能体用于处理当前任务或单次会话的临时信息存储区。 检索当新的会话开始时,Agent不会加载整个长期记忆库(那样会瞬间爆满短期记忆)。相反,它会根据当前的用户查询和短期记忆的上下文,去长期记忆库中寻找最相关的信息。 记忆冲突与更新:当新信息与旧记忆矛盾时,如何更新或版本化管理记忆(例如,用户之前喜欢咖啡,现在改喝茶了)。 检索长期记忆:系统将当前查询与短期记忆的上下文结合,作为“检索键”,在长期记忆库中进行向量相似性搜索,找出相关记忆。
我看了答案还是有些不能完全理解,于是又去b站翻了翻教程基础DP,其中提到记忆化的递归(也称记忆化搜索),相当于结合了dp和递归的优点(这时我又觉得比DP还厉害),然后就准备写写记忆化递归。 ---- 目录 1.记忆化递归的解释与分析 2.记忆化递归的应用 ---- 一、记忆化递归的解释与分析 前面说道它结合了dp和递归的优点,分别是记忆化和逻辑清晰易懂。 2)f[n]=1; //这里f[]是储存数据的数组 else if(f[n]==0) //这里是重点 f[n]=F(n-1)+F(n-2); return f[n]; } 代码解释: 第3行中 打个比方,dp就相当于计算了一个方阵上所有的点(无论有没有利用价值),而记忆化递归相当于计算了方阵上有价值的点,因此记忆化递归的运行时间可能比dp还要短。 (注意只是可能,因为斐波那契数列无论是dp还是记忆化递归,都是要把前面的值全部算出来的) ---- 二、记忆化递归的应用 感觉没啥写的,就拿分配宝藏来写shui一写shui吧。题目在这里。
学习过2-3树之后就知道应怎样去理解红黑树了,如果直接看「算法导论」里的红黑树的性质,是看不出所以然。 此时我们借着2-3树去理解基本的红黑树,当然我会在后几篇文章介绍2-3-4树以及基于2-3-4树的红黑树。 抛开上面二分搜索树满足红黑的性质,我们知道2-3树不是二叉树,我们把它转换成一颗二叉树,2-节点很好转,3-节点转二叉却有两种,如下图: ? 红黑是指被指向节点的链接颜色,对于一颗2-3树,因为3-节点的存在有很多不同的二叉树的表示,所以我们只考虑左倾的情况。 因为2-3树不存在永久的4-节点,4-节点终归要分解的(在2-3-4树中,为了更好地插入和删除,4-节点可存在于叶子节点和非叶子节点)2-3树一样不行,所以在2-3树中没有任何一个节点能同时和两条红链接相连
在解决分类问题的决策树中,叶子节点就表示所有的分类,比如这里的分类就有3种:无聊时阅读的邮件、需及时处理的邮件、无需阅读的邮件。 换句话说就是,我们如何知道这颗决策树的各个节点选取什么特征来划分数据才最合适呢?ok,你可能听过一些算法的名字,比如ID3、C4.5、CART等,它们其实就是用来解决这个问题的。 ID3决策树使用信息熵度量数据子集的纯度,信息熵越大,数据越混乱,纯度越低。 然而,ID3还是有缺陷的,比如会偏向选择特征值比较多的特征来划分数据子集,然而如果训练数据中符合这个特征值的数据只出现过很少,甚至是一次,那么将导致构建出的决策树对这个特征的偏见。 另外,ID3无法处理含有连续型数值的特征以及处理回归问题,这类场景下,决策树需要另一种算法——CART,下一篇文章会具体介绍。 ok,本篇就这么多内容啦~,感谢阅读O(∩_∩)O。
前言 前面的文章我们已经学习了二叉搜索树和平衡二叉搜索树AVL树,今天我们再来了解一种新的平衡树2–3树,2–3树由约翰·霍普克洛夫特于1970年发明,在计算机科学中,2–3树是一种树型数据结构,内部节点 前面的文章提到过的二叉树,每个节点的孩子个数最多的是2个,并且每个节点只有一个值,而2-3树的节点的孩子个数只能是2个或者3个,这是一种多路树的结构,类似的结构还有2-3-4树,B+树等,多路树的存在除了支持树的平衡外 2-3树 VS 二叉搜索树 同样的一组数据,在2-3树和二叉搜索树里面的对比如下: ? 关于2-3-4树 2-3-4树与2-3树类似,只不过当父节点的值是3的时候,节点的孩子个数可以有4个,如下: ? 总结 本篇文章,主要介绍了2-3树相关的知识,2-3树,2-3-4树以及B树都不是二叉树,但与二叉树的大致特点是类似的,它们是一种平衡的多路查找树,节点的孩子个数可以允许多于2个,虽然高度降低了,但编码相对复杂
import sqlite3import jsonfrom typing import List, Dictclass LongTermMemory: """长期记忆实现类""" def self.init_database() def init_database(self): """初始化数据库表结构""" conn = sqlite3. ) if row[3] else None, 'created_at': row[4], 'importance_score': row[5] 用户遇到数据库连接问题时,通常是配置文件路径错误", metadata={"success_rate": 0.85, "confidence": 0.9}, importance=0.8)3. )# 执行搜索query = "智能体记忆系统"results = bm25.rank(query, k=3)for i, result in enumerate(results): print(