当前位置: 首页 > news >正文

【递归,搜索与回溯算法 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(一)

 

 


 找出所有子集的异或总和再求和


    题目解析    



    算法原理    


    解法    


    决策树     


这种决策使得每一次递归都是有效的递归,每一个节点都是最终的结果,所以这棵决策树是不用剪枝的,也没有递归出口的; 


      注意     


决策树执行添加元素的操作前,要先从子集末尾元素在 nums 的位置后面是否还有元素,如果有元素则可以添加,反之,则不可以添加;


    全局变量    


开始时,子集是空集,所以异或的结果为 0 ,path 初始值刚好是0,所以不用处理子集为空的情况; 


    函数结构     


在递归到决策树的某一层时,要知道从 nums 的哪个元素开始向后枚举,因此设计 dfs(nums,pos) 



    编写代码    


虽然没有写 return 来回溯,但是在每次向下递归新一层的 dfs 时,这层 dfs 执行完,就会自动返回上一层的 dfs;


 全排列Ⅱ


    题目解析    



    算法原理    


这道题其实就是全排列Ⅰ的plus 版本,只是多了重复的数,大体框架和全排列Ⅰ相同,只是剪枝操作需要更细致一点,全排列Ⅰ的解法可以先看下面这篇博客的第一题:

 【递归,搜索与回溯算法】穷举 vs 暴搜 vs 深搜 vs 回溯 vs 剪枝算法入门专题详解

两道题唯一的出入的就是剪枝操作,所以我们下面只讲全排列Ⅱ该如何剪枝;


    1. 两种剪枝     


  • 1. 在同一个节点(如图中的黑色节点)的所有分支中,相同的元素只能选择一次:


  •  2. 同一个数只能使用一次,可以设置一个 check[] 数组来标记一下用过的数为 true


    1.1 根据两种剪枝完善决策树    




    2. 两种思考方式    


 本质相同,都是针对是否需要剪枝的情况作出相应的处理 ;



    3. 只关心不合法的分支(被剪枝的分支)    


红色剪枝条件 check[ i ] == true,表示同一个数只能使用一次


粉色剪枝条件 nums[ i ] == nums [ i -1 ],表示同一个节点的所有分支中,相同数只能使用一次


    3.1 问题一:如果 nums 中重复元素不是连在一起的,那么这个判断条件无法使用    


   3.1.1 问题解析    


如果我们要全排列的数组是 [ 1 , 2 , 1 , 3 , 1 ],那么无法判断同一个节点,其中一条分支要递归的数,是否在前面分支中已经出现过了


   3.1.2 解决办法    


我们可以在正式递归之前,先对 nums 数组先进行排序,方便后续的剪枝操作;在大多数情况下,排序数组的时间复杂度O(N*logN),对于递归O(2^N)来说可以忽略不记;


    3.2 问题二:无法筛查掉红色剪枝的分支,和合法分支相邻的情况   


   3.2.1 问题解析    


nums[ i ] == nums [ i -1 ] 这个对不合法分支的判断条件范围还是太广了,无法筛查掉红色剪枝的分支,和合法分支(不应该被剪枝的分支)相邻的情况;

因为这些分支所代表的数是相同的,所以 nums[ i ] 所在的分支会被识别为不合法分支,而被执行粉色剪枝;

但是实际上,被红色剪枝的 nums[ i -1 ] 所在分支,本身就是不合法分支;

只有当 nums[i-1]和 nums[i] 两条分支都是合法的时候,才需要判断 nums[ i ] 是否等于 nums[ i - 1 ]


   3.2.2 解决办法    


我们要把下面这两种情况区分开:


 那么怎么区分开呢?其实非常简单;就是判断两个数是否在决策树的同一层;


   (1) 对于不同层: 


两个数不是同一层,哪怕 nums[ i ] == nums [ i - 1 ],nums[ i -1 ] 所在分支肯定也会被执行红色剪枝 ,因此 nums[i] 所在分支就是合法分支;


   (2) 对于同一层:  


如果递归时发现check[i-1]==false,则说明 nums[i-1] 和 nums[i] 所在位置为决策树同一层,如果是同一层,并且这两个数还相等,此时递归 nums[i] 的分支就是不合法的分支;


   (3) 改进条件     


我们在准备对 nums [ i ] 进行递归时,先判断 check[i] == false如果 check[ i -1 ] == false ,那么就可以判断 nums[i-1] 和 nums[i] 在同一层;

对同一层进行进一步判断,如果 nums[i-1] == nums[i],说明 nums[i] 所在分支不合法;


   3.3 问题三:i = 0时,访问 nums[ i -1 ] 会越界    


只关心不合法分支的最终判断条件: i != 0 && check[ i ] == false && num[i]==nums[i-1]


   3.4 总结不合法分支    



    4. 只关心合法的分支(不被剪枝的分支)    


     4.1 先判断该节点是否已经被使用(是否会被执行红色剪枝)    


如果我们的思考链路是只关心分支合法,那么第一步就是检查该分支是否被红色剪枝:

所以第一步就是判断 check [ i ] == false

合法分支是一条 不被执行红色剪枝 && 不被执行粉色剪枝 的分支,所以在判断该分支不被执行红色剪枝后,我们就需判断该分支是否被执行粉色剪枝;


     4.2 节点未被使用的情况下,是否被执行粉色剪枝    


    4.2.1 节点在决策树的深度相同,但是代表的数不同     


我们先来分析下面这条分支,在检查完 check[ i ] == false 而不被执行红色剪枝之后之后,我们来判断是否被粉色剪枝:

显然,nums[ i ] != nums[ i -1 ],因此肯定不会执行粉色剪枝(nums 已经提取排好序了);

此时的判断条件为 check[ i ] ==false && ( nums [ i ] ! = nums [ i-1] .......) 


    4.2.2 节点代表的数相同,但是该节点前一条分支已经被使用     


如果 nums[ i ] == nums [ i - 1 ],但是 nums[ i - 1 ] 已经被使用过了,此时 check [ i - 1 ] == true,那么此时的分支也是合法的;所以此时的判断条件:


   4.2.3 当 i = 0 的情况    

如果只是考虑当前分支是否合法,那么 i 是可以等于 0 的;

 i = 0 表示的是数组第一个元素,只要确保 check[ 0 ] ==false,就一定是可以大胆枚举的;因为这是对 nums 的第一个元素进行枚举的分支,这条分支必定是合法分支(一定是从考虑合法分支的角度出发);


此时的判断条件:


    5. 两种思考方式判断条件的区别     

如果考虑当前分支不合法,就需要根据前一条分支的具体情况,来对当前分支的合法与否作出判断,如果当前分支的 i=0,则会出现数组越界;


    6. 处理细节问题    



    7. 编写代码    


    7.1 只关心不合法分支     

 


    7.2 只关心合法分支     



电话号码的字母组合


    题目解析    



    算法原理    


    解法一 : 暴力枚举   


定义两层  for 循环,对字符映射的数字的所有组合进行暴力枚举 ;但是如果一个字符映射的数字过多,使用暴力枚举是不好操作的;


    解法二 :深度优先遍历   


    决策树     


 对决策树进行一次深度优先遍历,在叶子节点收集结果即可; 


    解决数字和字符串的映射关系    


我们可以使用字符串数组,让字符串数组前两个位置空着,让下标为2的数组元素存 "abc" 这个字符串,往后依此类推 ;

我们在遍历原始字符串的时候,拿到字符'2'之后,减去字符' 0 '对应的 Ascii 码值,就可以对应字符串数组的下标元素;


    全局变量    



    设计函数    



    编写代码    



括号生成


    题目解析    



    算法原理    



给一个括号子串,必须从头到尾遍历子串的每一个括号字符,如果在遍历的过程中,出现左括号的数量大于右括号的数量,那么这个子串就一定不是有效括号子串 :


    解法:暴搜    


     决策树     


  • 蓝色剪枝表示添加 ( 数量大于 n 剪枝;
  • 紫色剪枝表示添加 ) 数量大于 ( 的数量;

    全局变量     


这些变量可以设置成全局变量,也可以作为参数传给 dfs,区别在于恢复现场时采取的措施不同; 


    设置函数    



    编写代码    



组合


    题目解析    



    算法原理    


    解法 : 暴搜    


    决策树     


根据题目示例可以知道 ,得到的 path ,元素没有顺序可言,path 的区别只在元素的种类,所以可以画出决策树:

  • 1. 两层节点代表的数相同,执行紫色剪枝;
  • 2. 前面的分支已经枚举过这种可能,执行蓝色剪枝, path 只看元素种类,不看元素顺序

     发现规律     

所以我们不需要定义全局变量来剪枝,只需要在向下递归时,从当前节点元素的下一个元素开始递归即可;


    设置函数    



    编写代码    



目标和


    题目解析    



    算法原理    


    解法    


    决策树     


这棵决策树是要深度优先遍历的,每一个节点每次递归只能遍历一条分支,而不是在一个节点递归时,同时记录所有分支;通过递归回溯相结合的方式,遍历整棵决策树;


    编写代码    


    path 是全局变量时候的代码(手动回溯)    



    path 作为参数的代码 (自动回溯)    


 

     报错原因:  

如果我们提前让 path+= nums[i] ,是真正修改了 path 的状态并且记录 ,那么编译器在帮我们恢现场的时候,只会恢复 pos 的值,而因为 path 的值无法恢复到上次递归前的值;


组合总和


    题目解析    



    算法原理    


    解法一:暴搜   


    决策树     


红色剪枝:剪去超过 target 的分支 


紫色剪枝:剪去重复出现的组合 

 


    最终结果     


    发现规律     

从最终的有效递归图,我们可以发现,有效递归都是是从当前节点开始,向后枚举的;

所以我们在进行下一轮递归时,从当前节点开始枚举即可;


     编写代码    



报错原因:没有考虑以 pos 越界的情况作为递归出口,并且忽略了本题是可以选择重复元素的:

恢复现场的操作是去掉最后一个元素,并且remove() 的 API 也用不对;



    解法二    


    决策树     


 这棵决策树是的每一层,是在节点和<= target  时,枚举重复元素相加的个数,直到枚举的节点和大于 target;


     处理细节问题    



   (1) 恢复现场的时机    


这个解法有一个特别容易被忽略的地方,就是回溯现场的时机,如左下角的两次递归回溯: 

第一次回溯,是不能恢复现场的,因为第二次递归,是在第一次递归了0个5的基础上,再多递归1个5;也就是说,对于同一层回溯,只有递归完一个元素能枚举的所有使用次数,才能恢复现场;


并且,恢复现场时,sum 会自动恢复,但是 path 需要我们手动恢复; 


    (2) 在解法一的基础上修改代码     


对于解法二,只是枚举的策略不同,其他的递归,剪枝操作和解法一是相同的;因此,我们只需要删除红色框的代码,在此基础上重新编写即可; 


    (3) 用于枚举的循环的终止条件    


这个循环的小细节是,枚举 nums[pos] 的个数是从0个开始的,当 k* nums[ pos ] > aim,枚举完这个数的所有可能的使用个数: 


    (4) 在哪里恢复现场?    


不要在上面 for 循环恢复现场,出了 for 循环,表示 nums[pos] 的使用个数枚举完毕,此时再恢复现场:


    (5) 恢复现场的循环起点    


注意:恢复现场的循环从 k=1 开始

因为我们在递归枚举时 ,会枚举 nums[pos] 使用0次的情况(上层 for 循环从 k=0 开始循环):


但是 path 真正添加 nums[pos] 时,nums[pos] 的使用次数是不为0的;所以我们恢复现场要从 k=1 开始;


所以我们手动恢复现场,本质上恢复的的是执行 path.remove(size()-1) 操作 k-1 次,sum 则是因为通过参数传递,编译器会自动帮助我们恢复 sum ;


    编写代码     



     小优化     



字母大小写全排列


    题目解析    



    算法原理    


    解法:暴搜    


    决策树     


我们可以在原字符串 s 上操作,当 s 递归到叶子节点时,把叶子节点的 s 添加到 ret 中;也可以定义一个全局变量 path ,遍历到 s 字符串的字母字符时,就把变或不变的字符(每次只能选一个)添加到 path 上,如果遍历到的是数字,直接添加到 path 后即可; 


    全局变量     


    函数设计     



    编写代码    



 

 

相关文章:

【递归,搜索与回溯算法 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(一)

找出所有子集的异或总和再求和 题目解析 算法原理 解法 决策树 这种决策使得每一次递归都是有效的递归&#xff0c;每一个节点都是最终的结果&#xff0c;所以这棵决策树是不用剪枝的&#xff0c;也没有递归出口的&#xff1b; 注意 决策树执行添加元素…...

对 MYSQL 架构的了解

MySQL 是一种广泛使用的关系型数据库管理系统&#xff0c;其架构主要包括以下几个关键部分&#xff1a; 一、连接层 客户端连接管理&#xff1a;MySQL 服务器可以同时处理多个客户端的连接请求。当客户端应用程序&#xff08;如使用 Java、Python 等语言编写的程序&#xff09;…...

深入解析 StarRocks 物化视图:全方位的查询改写机制

小编导读&#xff1a; 本文将重点介绍如何利用物化视图进行查询改写。文章将全面介绍物化视图的基本原理、关键特性、应用案例、使用场景、代码细节以及主流大数据产品的物化视图改写能力对比。 物化视图在 StarRocks 中扮演着至关重要的角色&#xff0c;它是进行数据建模和加速…...

k8s常见问题及debug

ERROR1 ErrImagePull pod pending 外网无法方位集群服务 kubectl 命令失败 Pod Error 进入容器失败 pod重启 Running not ready CrashLoopBackOff PV/PVC helm install...

Winnows基础(2)

Target 了解常见端口及服务&#xff0c;熟练cmd命令&#xff0c;编写简单的 .bat 病毒程序。 Trail 常见服务及端口 80 web 80-89 可能是web 443 ssl心脏滴血漏洞以及一些web漏洞测试 445 smb 1433 mssql 1521 oracle 2082/2083 cpanel主机管理系统登陆&#xff08;国外用的…...

(14)D-FINE网络,爆锤yolo系列

yolo过时了&#xff1f;传统的yolo算法在小目标检测方面总是不行&#xff0c;最新算法DEIM爆锤yolo&#xff0c;已经替yolo解决。 一、创新点 ​ 这个算法名为DEIM&#xff0c;全称是DETR with Improved Matching for Fast Convergence&#xff0c;其主要创新点在于提出了一…...

关于数据流图绘制和使用上的一些个人经验

假设我们需要开发一个项目进度管理系统&#xff0c;在这个项目进度管理系统之中&#xff0c;我们需要开发一个功能&#xff1a;项目成员的列表。我们具有这样的业务需求&#xff1a; 在项目进度管理系统中&#xff0c;我们需要知道参与项目的人员到底有哪些&#xff0c;并且项目…...

Leetcode Hot 100 【二叉树】104. 二叉树的最大深度

104. 二叉树的最大深度 已解答 简单 相关标签 相关企业 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3…...

雅思真题短语梳理(八)

126员工流动率高 high staff turnover 127(多)负担一些工作任务 cover some duties / an increased workload 128不满 feel upset and resentful 129偏向性待遇 preferential treatment 130介入帮忙 step in and help 131切实的好处 tangible benefits 132挽留 staff retention…...

Codeforces Round 993 (Div. 4)个人训练记录

Codeforces Round 993 (Div. 4) 只选择对我有价值的题目记录 E. Insane Problem 题目描述 给定五个整数 k k k&#xff0c; l 1 l_1 l1​&#xff0c; r 1 r_1 r1​&#xff0c; l 2 l_2 l2​ 和 r 2 r_2 r2​&#xff0c;Wave 希望你帮助她计算满足以下所有条件的有序对 …...

java-io流

根据流的方向&#xff1a; 输入流&#xff08;InputStream/Reader&#xff09;&#xff1a;从数据源读取数据到程序中。输出流&#xff08;OutputStream/Writer&#xff09;&#xff1a;将数据从程序写入到目的地。 根据流处理信息的大小&#xff1a; 字节流&#xff08;Byte S…...

数据可视化

数据可视化 数据可视化 数据可视化主要目的&#xff1a;借助于图形化手段&#xff0c;清晰有效地传达与沟通信息。数据可视化可以把冰冷的数字转换成图形&#xff0c;揭示蕴含在数据中的规律和道理。 常用的数据可视化库&#xff1a; D3.js 目前 Web 端评价最高的 Javascri…...

CompletableFuture使用详解

一、 CompletableFuture介绍 平时多线程开发一般就是使用Runnable&#xff0c;Callable&#xff0c;Thread&#xff0c;FutureTask&#xff0c;ThreadPoolExecutor这些内容和并发编程息息相关。相对来对来说成本都不高&#xff0c;多多使用是可以熟悉这些内容。这些内容组合在…...

【长期有效】短链接生成-短链接-短网址-短链接生成接口-短链接转换接口-短网址URL生成-短链接-短网址-短域名-短链接

短链接API接口的作用主要体现在以下几个方面&#xff1a; 一、链接缩短与分享优化 短链接API接口的主要功能是将长链接转换为短链接。这种转换使得链接更加简洁、易读和易分享&#xff0c;尤其在社交媒体、电子邮件、短信等字符受限或按字符计费的场合中&#xff0c;短链接能…...

使用Idea自带的git功能进行分支合并

文章目录 1.背景描述2.分支切换3.分支合并的具体操作4.将在local环境下&#xff0c;从dev合并到qas分支上的代码&#xff0c;推送到远端 1.背景描述 目前在开发的当前项目有四个分支&#xff0c;master(主分支)、pre(预生产分支)、qas(测试分支)、dev(开发分支)&#xff1b; …...

工业摄像机基于电荷耦合器件的相机

工业摄像机系列产品及其识别技术的详细介绍&#xff1a; 一、工业摄像机概述 工业摄像机是利用光学成像技术获取视觉信息&#xff0c;并通过图像处理算法分析这些信息的设备。它通常具有高图像稳定性、高传输能力和高抗干扰能力等特性&#xff0c;适用于各种复杂的工业环境。 …...

【期末大作业】使用Python熟练掌握面向对象

引言 在编程学习过程中&#xff0c;构建项目是一个非常有效的方式&#xff0c;不仅能巩固和应用所学的知识&#xff0c;还能通过实践来解决实际问题。本文将通过几个经典的项目示例来展示如何用面向对象的方式设计和实现一个完整的系统&#xff0c;包括学生成绩管理系统、图书…...

JAVA:代理模式(Proxy Pattern)的技术指南

1、简述 代理模式(Proxy Pattern)是一种结构型设计模式,用于为其他对象提供一种代理,以控制对这个对象的访问。通过代理模式,我们可以在不修改目标对象代码的情况下扩展功能,满足特定的需求。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什…...

【MAC】深入浅出 Homebrew 下 Nginx 的安装与配置指南

硬件&#xff1a;Apple M4 Pro 16寸 系统&#xff1a; macos Sonoma 15.1.1 Nginx 是一款高性能的 Web 服务器和反向代理服务器&#xff0c;广泛应用于全球各地的网站和企业应用中。本文将详细介绍如何在 macOS 环境下使用 Homebrew 安装、启动、管理以及优化配置 Nginx&#x…...

【华为OD-E卷-寻找关键钥匙 100分(python、java、c++、js、c)】

【华为OD-E卷-寻找关键钥匙 100分&#xff08;python、java、c、js、c&#xff09;】 题目 小强正在参加《密室逃生》游戏&#xff0c;当前关卡要求找到符合给定 密码K&#xff08;升序的不重复小写字母组成&#xff09; 的箱子&#xff0c;并给出箱子编号&#xff0c;箱子编…...

SQL MID()

SQL中的MID()函数是一个用于从指定位置开始截取字符串中指定长度的子串的函数。这个函数在数据库查询和数据处理中经常被使用&#xff0c;特别是在需要从较长的文本字段中提取特定信息时。 MID()函数的基本语法是&#xff1a;SELECT MID(column_name, start, length) FROM tab…...

Sui 基金会任命 Christian Thompson 为新任负责人

Sui 基金会是专注于推动 Sui 蓬勃发展的生态增长与采用的机构。近日&#xff0c;基金会宣布任命 Christian Thompson 为新任负责人。在 Sui 主网发布的开创性一年里&#xff0c;Sui 凭借其无与伦比的速度、可扩展性和效率&#xff0c;迅速崛起为领先的 Layer 1 区块链之一&…...

ViEW生命周期

Vue的生命周期是指Vue实例从创建到销毁的整个过程&#xff0c;包括多个阶段和对应的钩子函数。以下是Vue生命周期的详细说明&#xff1a; 1. **创建阶段**&#xff1a; - beforeCreate&#xff1a;在实例初始化之前调用&#xff0c;此时数据观测和事件配置尚未完成&#xff0c;…...

[蓝桥杯 2019 国 B] 排列数

目录 前言 题解 思路 疑问 解答 前言 对于本篇文章是站在别人的基础之上来写的&#xff0c;对于这道题作为2019年国赛B组的最难的一题&#xff0c;他的难度肯定是不小的&#xff0c;这道题我再一开始接触的时候连思路都没有&#xff0c;也是看了两三遍别人发的题解&#x…...

python 中执行from elasticsearch import Elasticsearch,AsyncElasticsearch 报错

在 Python 中执行 from elasticsearch import Elasticsearch, AsyncElasticsearch 时,如果提示 AsyncElasticsearch 不存在,可能是因为以下几个原因: 1. 安装的 elasticsearch 库版本不匹配 AsyncElasticsearch 是在 elasticsearch 库的较新版本中引入的。如果你安装的版本…...

git 删除鉴权缓存及账号信息

在Windows系统下 清除凭证管理器中的Git凭据 按下Win R键&#xff0c;打开“运行”对话框&#xff0c;输入control&#xff0c;然后回车&#xff0c;打开控制面板。在控制面板中找到“用户账户”&#xff0c;然后点击“凭据管理器”。在凭据管理器中&#xff0c;找到“Windows…...

浏览器要求用户确认 Cookies Privacy(隐私相关内容)是基于隐私法规的要求,VUE 实现,html 代码

Cookie Notices and Cookie Consent | Cookiepedia 1. 法律法规要求 许多国家和地区的隐私法律要求网站在存储或处理用户数据&#xff08;包括 Cookies&#xff09;之前必须获得用户的明确同意&#xff1a; GDPR&#xff08;欧盟通用数据保护条例&#xff09; 要求&#xff…...

数据结构:栈和队列的实现

栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO &#xff08; Last In First Out &#xff09;的原则。 压栈&#xff1a;栈…...

2024.12.21辩论赛感受

背景 今天辩论赛的双方论点是&#xff1a; 正方&#xff1a;寒假留在研发中心的收获大 反方&#xff1a;寒假去做其他事情的收获 辩论赛&#xff0c;为了锻炼自己&#xff0c;选择了不想选择以及相对不好辩论的反方。出现的状况有一下几点&#xff1a; 1.发现自己脑子完全跟不…...

JAVA:组合模式(Composite Pattern)的技术指南

1、简述 组合模式(Composite Pattern)是一种结构型设计模式,旨在将对象组合成树形结构以表示“部分-整体”的层次结构。它使客户端对单个对象和组合对象的使用具有一致性。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什么是组合模式 组合模式…...

圣诞快乐(h5 css js(圣诞树))

一&#xff0c;整体设计思路 圣诞树h5&#xff08;简易&#xff09; 1.页面布局与样式&#xff1a; 页面使用了全屏的黑色背景&#xff0c;中央显示圣诞树&#xff0c;树形由三层绿色的三角形组成&#xff0c;每一层的大小逐渐变小。树干是一个棕色的矩形&#xff0c;位于三角…...

移植 OLLVM 到 LLVM18,修复控制流平坦化报错

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 前言 把 OLLVM 移植到 LLVM18 后&#xff0c;发现 -fla&#xff08;控制流平坦化&#xff09;并不能正常使用。 关于移植过程可以参考这篇文章 【移植 OLLVM…...

MFC/C++学习系列之简单记录——序列化机制

MFC/C学习系列之简单记录——序列化机制 前言简述六大机制序列化机制使用反序列化总结 前言 MFC有六大机制&#xff0c;分别是程序启动机制、窗口创建机制、动态创建机制、运行时类信息机制、消息映射机制、序列化机制。 简述六大机制 程序启动机制&#xff1a;全局的应用程序…...

【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析

文章目录 1. 计算机网络有哪些分类2. 计算机网络中协议与标准的区别3. 计算机网络拓扑有哪些结构4. 常用的网络设备有哪些&#xff0c;分属于OSI的哪一层5. IEEE802局域网标准有哪些 【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析 1. 计算机网络有哪些分类 计算…...

Python中的上下文管理器:从资源管理到自定义实现

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 Python中的上下文管理器(Context Manager)为资源管理提供了强大的支持,尤其在处理文件、网络连接、数据库连接等需要精确控制生命周期的…...

STM32 高级 物联网通信之CAN通讯

目录 CAN通讯介绍 物理层 协议层 CAN的帧(报文)种类 1 数据帧(发送单元->接受单元) 2 远程帧(接受单元->发送单元) 3 错误帧(发送方发送数据错误会发送的状态帧) 4 过载帧(接收方放不下会发送到的状态帧) 5 帧间隔(状态) 数据帧介绍 远程帧介绍 C…...

如何求解小于等于x的正整数因子y的个数总和

G ( X , Y ) X 的因子 Y 个数 G(X,Y) X的因子Y个数 G(X,Y)X的因子Y个数 例如 G ( 8 , 2 ) 3 G(8,2)3 G(8,2)3 G ( 12 , 2 ) 2 G(12,2)2 G(12,2)2 F ( X , Y ) ∑ i 1 X G ( i ) F(X, Y) \sum_{i1}^{X} G(i) F(X,Y)i1∑X​G(i) 直接上结论 F ( X , Y ) X Y 1 ⋯ X…...

Epic游戏使用mod

以土豆兄弟为例&#xff1a; 第一步&#xff1a;获取 SteamCMD 下载官方 Steam 控制台客户端 (steamCMD) 1. 下载好后打开&#xff0c;是一个在 cmd 窗口的运行的命令行 2. 输入以下代码登录 login anonymous 第二步&#xff1a; 确认自己要下载的游戏 ID 和 mod ID 然后…...

前端:纯前端快速实现html导出word和pdf

实现html导出word&#xff0c;需要使用两个库。 html-docx-js和file-saver 导出word的js方法 > npm install html-docx-js >npm install file-saver js引入 import FileSaver from “file-saver”; import htmlDocx from “html-docx-js/dist/html-docx”; /**导出…...

Windows装Docker至D盘/其他盘(最新,最准确,直接装)

前言 Docker的默认安装路径为 C:\你的用户名\AppData\Local\Docker\wsl这样安装常常会导致C盘爆满。目前现有博客的安装方法往往不能把docker的container和image也装在非C盘。本博客旨在用最简单的方式&#xff0c;把Docker Deskstop的images和container装在D盘中。 安装前&a…...

2024 年 IA 技术大爆发深度解析

摘要&#xff1a; 本文旨在深入剖析 2024 年 IA 技术大爆发所引发的多方面反响。通过对产业变革、经济影响、就业市场、社会影响、政策与监管以及未来展望等维度的探讨&#xff0c;揭示 IA 技术在这一关键时期对全球各个层面带来的深刻变革与挑战&#xff0c;并提出相应的思考与…...

现代 CSS 布局与响应式设计实战指南

作为一名前端开发者&#xff0c;我经常被问到&#xff1a;"为什么你的页面布局这么流畅&#xff1f;响应式适配这么完美&#xff1f;"今天&#xff0c;我就来分享一下在实际项目中常用的 CSS 布局技巧和响应式设计方案。 现代布局三剑客&#xff1a;Flex、Grid 和 C…...

react 项目打包二级目 使用BrowserRouter 解决页面刷新404 找不到路由

使用BrowserRouter package 配置 &#xff08;这部分代码可以不做配置也能实现&#xff09; {"homepage": "/admin",}vite.config 配置 export default defineConfig({base: /admin])BrowserRouter 添加配置项 <BrowserRouter basename/admin>&l…...

Yolo11改进策略:Block改进|使用FastVit的RepMixerBlock改进Yolo11,重参数重构助力Yolo11涨点(全网首发)

文章目录 摘要FastViT:一种使用结构重新参数化的快速混合视觉变换器1、简介2、相关工作3、体系结构3.1、概述3.2、FastViT3.2.1、重新参数化跳过连接3.2.2、线性训练时间过参数化3.2.3、大核卷积4、实验4.1、图像分类4.2、鲁棒性评价4.3、3D Hand网格估计4.4、语义分割和目标检…...

2.6 网络面试问题

tcp 与 udp的区别 1.tcp 是基于连接的 UDP是基于数据包 2.处理并发的方式不通 a.tcp用epoll进行监听的 b. udp是模拟tcp的连接过程&#xff0c;服务端开放一个IP端口&#xff0c;收到连接后&#xff0c;服务端用另一个IP和端口发包给客户端。 3.tcp根据协议MTU黏包及…...

02-10.python入门基础一Python模块与包(二)

五、Python 包的概念 &#xff08;一&#xff09;包的定义与结构 在 Python 中&#xff0c;“包”&#xff08;Package&#xff09;是一种按照目录来组织模块的方式&#xff0c;它允许开发者将相关的模块集合在一起&#xff0c;形成一个更具逻辑性和结构性的代码单元。 从物…...

[WiFi] WiFi 802.1x介绍及EAP认证流程整理

802.1X Wi-Fi 802.1X 是一种网络访问控制协议&#xff0c;常用于保护无线网络。它提供了一种基于端口的网络访问控制机制&#xff0c;主要用于在用户和网络之间建立安全的连接。以下是 802.1X 的一些关键特点&#xff1a; 认证框架 802.1X 使用 EAP&#xff08;可扩展认证协议…...

前端通过new Blob下载文档流(下载zip或excel)

当后端返回这样的预览&#xff1a; 前端该如何下载呢&#xff1f;首先在axios请求里&#xff0c;加入第三个参数{ responseType: ‘blob’ }。 proxy.$post(url, params, { responseType: blob }).then((res)>{downloadFormat(res) });然后在一个函数里处理返回&#xff0c…...

R 常用的内置软件包及功能介绍

R 中有许多内置包&#xff0c;提供了丰富的功能来帮助用户进行数据分析、统计建模、图形可视化等任务。以下是一些常用的内置包及其功能简介&#xff1a; 1. stats 包 stats 是 R 的一个核心包&#xff0c;几乎每个 R 用户都会使用它。它包含了许多统计分析的函数&#xff0c…...

基于 HC_SR04的超声波测距数码管显示(智能小车超声波避障部分)

超声波测距模块HC-SR04 1、产品特色 ①典型工作用电压&#xff1a;5V ②超小静态工作电流&#xff1a;小于 5mA ③感应角度(R3 电阻越大,增益越高,探测角度越大)&#xff1a; R3 电阻为 392,不大于 15 度 R3 电阻为 472, 不大于 30 度 ④探测距离(R3 电阻可调节增益,即调节探测…...