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

【C/C++算法】蓝桥杯之递归算法(如何编写想出递归写法)

绪论:冲击蓝桥杯一起加油!!
在这里插入图片描述
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry”

绪论​:
————————
早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。


递归

1. 什么是递归

简单来说:就是函数自己调用自己

2. 为什么会用到递归

常见的递归有:二叉树的遍历、快排、归并
在这里插入图片描述

其中递归的本质:

  1. 解决主问题,衍生相同的子问题
  2. 在处理子问题的时候,又出现了相同的子问题
  3. 所以本质就是不断自己调用自己,通过缩小问题最终解决最小子问题

3. 如何理解递归(非常重要!)

对于理解递归,可以从下面三个方向理解:

  1. 递归展开的细节图
  2. 二叉树中的题目
  3. 宏观看待递归的过程
    1. 不要在意递归的展开图
    2. 把递归的函数当成一个黑盒(具体里面如何操作关心,给他数据,返回结果)
    3. 相信这个黑盒一定能完成这个任务

(这个后面慢慢的到来,请继续往后看)

4. 如何写好一个递归?

  1. 先找到相同的子问题
    1. 根据子问题:决定了函数头的设计
    2. 本质也就是分析题目,然后得出解决子问题可能需要用到的参数(一般来说可以先粗力度的得到一个函数头,然后再在编写代码中不断弥补)
      在这里插入图片描述
  2. 只关心某个子问题是如何解决的
    1. 把他看成一个黑盒,并相信他能够替你完成任务
    2. 也就决定了函数体的书写,我们仅仅去想某个子问题的解决方法
    3. 因为这样再次调用该函数的时候,虽然条件参数可能不同,但子问题的解决方法是一致的
      在这里插入图片描述
  3. 最后再注意一下递归函数的出口即可
    1. 也就是防止无限递归的情况

总结:解决简单递归的三步:

非常重要,不过通过大量练习相信你就能很好的理解(可能初次看会迷糊~)

  1. 通过题目写出dfs的函数头
  2. 根据子问题写出函数内部逻辑
  3. 注意一下递归出口

深度优先遍历 vs 宽度优先遍历 vs 暴搜

  1. 深度优先遍历(搜索)dfs(depth):

    1. 通俗的来说就是:一条路走到黑
      在这里插入图片描述
  2. 宽度优先遍历(搜索)bfs(Breadth):

    1. 本质也就是:一层一层的遍历树
      在这里插入图片描述
  3. 搜索(暴搜)

    1. 本质就是暴力枚举一遍所有的情况,或者说就是将树中的所有节点都进行一次遍历
  4. 搜索问题的拓展:

拿全排列问题举例:
全排列是将一组数中的所有情况排出来(如下图)
在这里插入图片描述
那么可以使用树状图(决策树)的方式解决具体如下图
在这里插入图片描述
此时画出来后,我们需要的答案最终就能通过递归搜索的方式获取到:
在这里插入图片描述
所以说我们不能对于dfs、bfs来说局限于二叉树,而是当我们能画出类似的决策树的形式画出来那么就能使用dfs/bfs

回溯与剪枝(非常重要!)

  1. 回溯的本质:其实就是深搜中当我们尝试某种情况时,发现这种情况行不通,退回到上一级的操作就是回溯
    (如下图红线)
    在这里插入图片描述
  2. 剪枝来说:在我们回溯过程后可能遇到两种可以走的情况,而其中一种情况已经走过了知道行不通,那么这条路就代表被剪枝了
    (具体如下图)
    在这里插入图片描述

下面将通过5道题目带你理解递归,其中注意理解递归的三步(函数头,函数体,递归出口)


具体训练:

1. 汉诺塔

题目:

在这里插入图片描述

分析题目并提出,解决方法:

在这里插入图片描述
在这里插入图片描述
在过程中不允许大盘子摞在小盘子上面!

题解核心逻辑:

汉诺塔问题,可以用递归解决
如何来解决汉诺塔问题?
在这里插入图片描述

  1. 在N >= 2 时,我们要考虑先将最大的盘子放到 C柱上

问题就转移成了:

  1. 先把最大盘子上面的所有先放在B柱上,然后在移动 最大的盘子 到C柱
    在这里插入图片描述
  2. 第三步就是将所有B柱上的盘子在移动到C柱上
    在这里插入图片描述
  3. 再次理解:当N = 3时,看最上面的两个盘子,它的本质其实就是N = 2的情况,只不过这次是移动到B柱
    在这里插入图片描述
  4. 这里注意理解的是:操作1和操作3的本质是一样的,只不过借助的柱子不一样!
  5. 那么 N = … 他们的本质都是一样了,他们都是:
    1. 执行步骤1,将最大盘子上面的小盘子全部转移到B
    2. 执行步骤2,将最大盘子全部转移到C
    3. 执行步骤3,再将B上的转移到C即可完成
    4. 所以为什么可以用递归:解决大问题的时候,出现了相同的子问题,解决子问题的时候又出现了相同的子问题
      在这里插入图片描述

如何写代码:

  1. 挖掘重复子问题(函数头)
    1. 也就是上面的 步骤 1、 2、3所需要的
    2. 该题本质是:将 x 柱上的一堆盘子,借助 y 柱子,转移到 z 柱子上
    3. 那么函数头也就如下图
      在这里插入图片描述
  2. 只关心某一个子问题在做什么(函数体)
    1. 宏观的分析三个步骤的具体:
      在这里插入图片描述
  3. 函数出口
    1. 不难发现就是 N = 1 的时候是不同的,直接将A柱的盘子直接放到C柱上
    2. 那么当N=1时,将A柱的盘子直接放到C柱上,然后就可以退出了
      在这里插入图片描述
      具体步骤代码如下:
class Solution {
public:
//1. 挖掘重复子问题(得出函数头)
//将n个盘子移动到 借助柱子移动到目标柱子void h(vector<int>& A, vector<int>& B, vector<int>& C,int n){//出口:if(n == 1){// 将 A 上的移动到 C上C.push_back(A.back());A.pop_back();return ;}//2. 分析子问题:(得到函数体所需要的操作,并且相信他能完成)
//先将 A 柱上的 n-1 个移动到 B盘h(A,C,B,n-1);
//将 A 中的最后一个盘子移动到 C上C.push_back(A.back());A.pop_back();
//在将B上的盘子借助A全部移动到C上h(B,A,C,n-1);} void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {h(A,B,C,A.size());}
};

2. 合并两个有序链表

题目:

在这里插入图片描述

分析题目并提出,解决方法:

题目很好理解:就是拼接两个链表,过程中不允许创建空间

分析本题查看是否有重复子问题:
在这里插入图片描述
在这里插入图片描述

  1. 重复子问题(函数头的设计)

    1. 合并两个有序链表
    2. 那么也就仅需要两个 链表
      在这里插入图片描述
  2. 只关心某个子问题(函数体的设计)
    在这里插入图片描述

    1. 比大小(两个链表进行比较)得到较小的结点
    2. 将较小的结点看做合并后的链表头结点(通过修改该结点的next指针完成)
      在这里插入图片描述
    3. 最终返回 较小的结点
  3. 递归出口

    1. 那个指针先为空返回另外一个指针

总结:递归 = 重复子问题 + 宏观看待递归问题

题解核心逻辑:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:
//分析函数的目的:合并两个链表:所以函数头就是 两个链表即可ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
//编写出口:判断那个链表先为空,返回另外一个if(list1 == nullptr) return list2;if(list2 == nullptr) return list1;//编写子问题的具体操作:完成函数体//1. 找到较小的if(list1->val <= list2->val){list1->next =  mergeTwoLists(list1->next,list2);return list1; }else{list2->next =  mergeTwoLists(list1,list2->next);return list2; }}
};

小总结:

递归 VS 深搜

递归的展开图,其实就是对一棵树做一次深度优先遍历(dfs)
而在递归的过程中需要一个 进行保存,历史数据
在这里插入图片描述

循环(迭代) vs 递归

它们是能相互转换的,那么什么时候,用哪一个呢?
在这里插入图片描述
通过上面的分析和上图理解到:

  1. 当我们的一个遍历过程需要用到类似栈的东西进行保存数据时,就是比较麻烦的情况了,此时我们使用递归的形式就能很简单方便的写出程序
  2. 而当一些遍历过程比较简单,如上图右边结构,此时遍历仅仅只需要单方向的那么,此时就没必要使用递归,因为一个简单的遍历循环即可完成
    在这里插入图片描述

3. 反转链表

题目:

在这里插入图片描述

分析题目并提出,解决方法:

宏观角度看待问题:

  1. 让当前结点后面的链表先逆序,并且把头结点返回
    在这里插入图片描述
  2. 让当前结点添加到逆置后的链表在这里插入图片描述

第二个视角:将链表看成一颗树:

  1. 不断深度遍历到最后一个结点
  2. 返回最后一个结点
  3. 到达倒数第二层:执行将自己下一个结点的next置为自己,然后自己置为null(这里置为是为了保持所以子操作一致)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

题解核心逻辑:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {//使用递归的方式//宏观的看待问题://翻转链表(所以函数头就只需要一个链表即可,还需要返回新头结点)//子问题(将自己的next的next置为自己,再将自己置为空,并且还需要将最后的头结点返回回来)//出口:(当head为空时退出,表示遍历到了最后结点)//head == nullptr 时为了防止没有结点的情况if(head == nullptr || head->next == nullptr){return head;//返回结点}ListNode* newhaed = reverseList(head->next);head->next->next = head;head->next = nullptr;return newhaed;}
};

4. 两两交换链表中的节点

题目:

在这里插入图片描述

分析题目并提出,解决方法:

递归思想(宏观看待):

  1. 分析题目得到递归思想:将给到的链表中的两两进行交换顺序,那么也就仅需要一个链表参数即可
    在这里插入图片描述
  2. 看待某个子问题:
    1. dfs会返回一个新的链表的结点,使用tmp记录
    2. 将当前head的next的next指向haed,再将head的next指向tmp(完成交换的目的)
      在这里插入图片描述
  3. 退出情况,当head为空是退出
    1. 注意其中是以两个结点看成一起的,所以退出条件是:
    2. 当 head为空 || head->next 为空

题解核心逻辑:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* swapPairs(ListNode* head) {//退出条件:if(head == nullptr || head->next == nullptr){return head;//返回当前结点}//子问题://1. 获取dfs后面的头结点ListNode* tmp = swapPairs(head->next->next);ListNode*  ret = head->next;ret->next = head;head->next = tmp;return ret;}
};

5. Pow(x, n)

题目:

在这里插入图片描述

分析题目并提出,解决方法:

很好理解 就是 求x n等于多少
解法1:暴力循环,让 x 乘 n 次即可(会超时)

解法二:

快速幂

快速幂的实现:

  1. 递归实现
  2. 循环实现

本题将递归实现:
例子:当我们要求 316

  • 就是将 316 不断的对半看(具体如下图)
    先求出 38 这样 38 * 38 = 316 同理 38 = 34 * 34 。。。
    在这里插入图片描述
  • 其中暴力解法要求 16 次,而使用这种方法只用求logn次
  • 附:当 n 为奇数时:多乘一个自身即可
    在这里插入图片描述
  1. 相同子问题 -->函数头
    • 求一个 x的n次幂 ==> pow(x,n)
  2. 只关心每个子问题做了什么 – > 函数体
    • 其中需要 判断 n 的奇偶性
    • 通过递归获取自身的值,并且判断奇偶性得出是否要多乘1位
  3. 递归出口
    • 当 n == 0 时返回1(这样上层 n = 1 处等于 1 * x(1 * 1 * x))
      在这里插入图片描述
      特殊情况:
  • n 为负数:
    在这里插入图片描述
  • n 可能是 -231 当变成整数就可能越界,所以得使用long long(整形的范围是 -231 ~ 231 - 1
    在这里插入图片描述

题解核心逻辑:

  • 其中注意 -(long long)n 这里的操作:它是将 n 的类型转换成了long long(并且不能写在-前面,只能挨着n
  • 只有这样当 n = -231 时强转为正数后就不会溢出
class Solution {
public:double myPow(double x, int n) {//递归实现://将 x^n 看成 x^(n/2) * x^(n/2) ...return n >= 0 ? pow(x,n) : 1/pow(x,-(long long)n);}double pow(double x,long long n){if(n == 0) return 1;double tmp= myPow(x,n/2);return n % 2 == 0 ? tmp * tmp : tmp * tmp * x;}
};

相关文章:

【C/C++算法】蓝桥杯之递归算法(如何编写想出递归写法)

绪论&#xff1a;冲击蓝桥杯一起加油&#xff01;&#xff01; 每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; ———————— 早关注不迷路&#xff0c;话不多说安全带系好&#xff0c;发车啦&am…...

coding ability 展开第九幕(位运算——进阶篇)超详细!!!!

文章目录 前言丢失的数字两整数之和只出现一次的数字II消失的两个数字总结 前言 上一篇博客&#xff0c;我们已经把位运算的基础知识&#xff0c;以及基本运算都掌握啦 上次的习题还是让人意犹未尽&#xff0c;今天我们来尝试一下难一点的题目 位运算熟练起来真的让人觉得做题是…...

Python实现NOA星雀优化算法优化随机森林回归模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 在现代数据科学领域&#xff0c;回归分析是解决预测问题的核心工具之一。然而&#xff0c;在面对复…...

蓝桥云客--浓缩咖啡液

4.浓缩咖啡液【算法赛】 - 蓝桥云课 问题描述 蓝桥杯备赛选手小蓝最近刷题刷到犯困&#xff0c;决定靠咖啡续命。他手上有 N 种浓缩咖啡液&#xff0c;浓度分别是 A1​%, A2​%, …, AN​%&#xff0c;每种存货都是无限的。为了提神又不炸脑&#xff0c;小蓝需要按比例混合这…...

异常【C++】

文章目录 异常异常的概念和基本语法异常的三个关键字&#xff1a; 异常抛出和被接收的过程异常的再次抛出再次抛出被非catch&#xff08;...&#xff09;捕捉到的异常再次抛出被catch&#xff08;...&#xff09;捕捉到的异常 异常规范异常安全异常的优缺点优点缺点总结&#x…...

关于图片分类任务的猜想 | 撰写论文 paper

关于图片分类任务的猜想 | 撰写论文 paper 背景Yolo 是一次巨大的飞跃过滤无关的特征Yolo 的问题 背景 在计算视觉领域&#xff0c;有几个关键的演变。 1&#xff09;CNN 卷积的出现&#xff0c;这是一个大的创新&#xff1b; 2&#xff09;从卷积到 AlexNet &#xff0c;是更…...

路由器和交换机

路由器和交换机分别位于OSI模型和TCP/IP模型的不同网络层次&#xff0c;具体对比如下&#xff1a; 1. 路由器&#xff08;Router&#xff09; 所属层级&#xff1a; OSI模型&#xff1a;网络层&#xff08;第3层&#xff09;TCP/IP模型&#xff1a;网络互联层&#xff08;Int…...

jEasyUI 表单验证

jEasyUI 表单验证 引言 jEasyUI 是一款流行的 jQuery UI 扩展库,它提供了丰富的 UI 组件和交互效果,极大地方便了前端开发工作。在 jEasyUI 中,表单验证是一个非常重要的功能,它可以帮助开发者确保用户输入的数据符合预期的格式和规则。本文将详细介绍 jEasyUI 表单验证的…...

PIKE 助力知识库进阶:多模型协作下的精准信息 “捕手”

PIKE&#xff08;通常指的是字节跳动提出的一种技术&#xff09;增强检索知识库是一种结合了先进的信息检索技术和知识库管理的系统。它旨在提高知识检索的准确性、效率和召回率&#xff0c;以更好地满足用户对知识的需求。 特点和工作原理 数据增强 &#xff1a;对知识库中…...

使用Ubuntu18恢复群晖nas硬盘数据外接usb

使用Ubuntu18恢复群晖nas硬盘数据外接usb 1. 接入硬盘2.使用Ubuntu183.查看nas硬盘信息3. 挂载nas3.1 挂载损坏nas硬盘(USB)3.2 挂载当前运行的nas 4. 拷贝数据分批传输 5. 新旧数据对比 Synology NAS 出现故障&#xff0c;DS DiskStation损坏&#xff0c;则可以使用计算机和 U…...

Dify票据识别遇到的分支判断不准确问题

已测试这篇文章中 https://zhuanlan.zhihu.com/p/5465385787 使用多分支条件判断使用不同的大模型识别图片内容 发现了细节问题。在使用时若不注意&#xff0c;分支会出现走向不准的问题。 需要关注部分 下方红框处。1&#xff0c;2后不能跟点。否则会出问。除此之外&#xff0…...

Flutter学习总结之Android渲染对比

一、Android 界面渲染机制&#xff08;基于原生 View 体系&#xff09; 1. 核心渲染流程&#xff08;源码级解析&#xff09; 三阶段渲染流程&#xff08;ViewRootImpl驱动&#xff09;&#xff1a; Measure 阶段&#xff08;measure()&#xff09;&#xff1a; View调用onMea…...

Media streaming mental map

Media streaming is a huge topic with a bunch of scattered technologies, protocols, and formats. You may feel like hearing fragments without seeing the big picture. Let’s build that mental map together — here’s a high-level overview that connects everyt…...

7B斗671B:扩散模型能否颠覆自回归霸权?

模型对决&#xff1a;从7B到671B的意外之战 参数量与性能的反差 DeepSeek V3以6710亿参数稳坐自回归模型的“巨无霸”地位&#xff0c;而70亿参数的Dream 7B却在多项测试中与其不分伯仲。例如&#xff0c;在需要复杂规划的“倒计时任务”中&#xff0c;Dream 7B的解题成功率比…...

WVP-GB28181摄像头管理平台存在弱口令

免责声明&#xff1a;本号提供的网络安全信息仅供参考&#xff0c;不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权&#xff0c;请及时与我联系&#xff0c;我将尽快处理并删除相关内容。 漏洞描述 攻击者可利用漏洞获取当前系统管…...

实验研究:不同物体与落点材质对弹起高度的影响

本研究通过控制变量法&#xff0c;探讨了不同物体&#xff08;乒乓球和笔&#xff09;在不同下落高度和落点材质条件下&#xff0c;其弹起高度的变化。实验结果显示&#xff0c;物体类型、下落高度和落点材质均对弹起高度有显著影响。其中&#xff0c;铁碗作为落点材质时&#…...

开源 PDF.js 文件编辑操作

一、PDF.js PDF.js 是 Mozilla 基金会推出的一个使用 HTML5 构建的 PDF 阅读器&#xff0c;它完全使用 JavaScript 编写。作为 Firefox 浏览器的默认 PDF 查看器&#xff0c;PDF.js 具有强大的兼容性和稳定性。它不仅支持 PDF 文件的查看和渲染&#xff0c;还提供了丰富的交互…...

hydra小记(一):深入理解 Hydra:instantiate() 与 get_class() 的区别

hydra小记&#xff08;一&#xff09;&#xff1a;深入理解 Hydra&#xff1a;instantiate 与 get_class 的区别 深入理解 Hydra&#xff1a;instantiate() 与 get_class() 的区别1. hydra.utils.get_class()2. hydra.utils.instantiate()3. 总结对比 深入理解 Hydra&#xff1…...

在 macOS 上安装和配置 Aria2 的详细步骤

在 macOS 上安装和配置 Aria2 的详细步骤&#xff1a; 1.安装 Aria2 方式一&#xff1a;使用 Homebrew Homebrew 是 macOS 上的包管理器&#xff0c;可以方便地安装和管理软件包。 • 打开终端。 • 输入以下命令安装 Aria2&#xff1a; brew install aria2• 检查安装是否…...

Linux开发工具——make/makefile

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲Linux开发工具——make/makefile&#xff1a; &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&#xff1a;C学习笔记&#xf…...

生信分析服务MR孟德尔随机化单细胞测序转录组数据分析网络药理学

将孟德尔随机化&#xff08;MR&#xff09;、单细胞测序、转录组数据分析和网络药理学结合&#xff0c;是当前生物信息学领域的前沿方法&#xff0c;尤其在疾病机制解析、靶点发现和药物研发中展现出巨大潜力。以下从技术逻辑、应用场景和服务流程三个维度展开说明&#xff1a;…...

Sentinel实战(五)、系统保护规则、限流后统一处理及sentinel持久化配置

Spring Cloud Alibaba-Sentinel实战(五)、系统保护规则、限流后统一处理及sentinel持久化配置 一、系统保护规则一)、系统规则支持的模式二)、新增系统规则界面三)、demo测试二、限流后统一处理实操demo三、sentinel持久化配一、系统保护规则 系统保护规则是从应用级别的…...

iPhone XR:一代神机,止步于此

什么样的 iPhone &#xff0c;才配称为一代神机&#xff1f; 我曾经用过iPhone 4S、iPhone 6S Plus、iPhone 8 Plus&#xff0c;iPhone SE2、iPhone XR、iPhone 13、iPhone 14 Plus、iPhone 15/Pro。 不管硬件再怎么卷&#xff0c;不管囊中是否羞涩&#xff0c;主力机基本没考…...

[C++面试] explicit面试8问 —— 较难,可简单了解即可

Google C规范建议所有单参数构造函数必须加explicit&#xff0c;除非明确需要隐式转换&#xff08;如std::string从const char*构造&#xff09;。 1. 隐式转换的实际危害 隐式转换可能导致资源泄漏或逻辑错误&#xff08;如std::vector<int> v 10;可能被误认为初始化…...

2024-2025 CSS前沿技术全景解析:构建下一代Web界面的核心武器库

前言&#xff1a;CSS的范式革命 当WebAssembly与JavaScript持续争夺开发者注意力时&#xff0c;CSS正在经历一场静默的革命。2024年CSS工作组发布的Level 4/5草案&#xff0c;标志着样式语言正式进入「智能样式」时代。本文将从15个维度深入剖析未来两年最具变革性的CSS新特性…...

flutter row里面怎么统一高度

在 Flutter 中&#xff0c;Row 是一个水平布局的组件&#xff0c;默认情况下&#xff0c;它的子组件的高度是根据每个子组件的内容自动调整的。如果你希望 Row 中的所有子组件具有统一的高度&#xff0c;可以通过以下几种方式实现。 1. 使用 SizedBox 或 Container 设置固定高度…...

pinia-plugin-persist、vuex

pinia-plugin-persist 作用&#xff1a;为 Pinia 状态管理库实现状态持久化&#xff0c;自动将指定的 Pinia store 状态保存到本地存储&#xff08;如 localStorage 或 sessionStorage&#xff09;&#xff0c;并在应用启动时从本地存储恢复状态。效果&#xff1a;确保应用状态…...

Spring Boot整合MyBatis-Plus实现CRUD操作教程

本文将演示如何在Spring Boot项目中整合MyBatis-Plus框架&#xff0c;快速实现数据库的增删改查操作。相较于原生MyBatis&#xff0c;MyBatis-Plus提供了更简洁的API和自动化功能。 环境准备 JDK 1.8MySQL 5.7Spring Boot 2.7.xMyBatis-Plus 3.5.x 实现步骤 1. 创建项目并添加…...

Vue 3 的响应式原理

Vue 3 的响应式原理可以比喻为“智能监控系统”&#xff1a;当数据变化时&#xff0c;它能自动追踪依赖关系并触发更新。以下是通俗解释和核心机制&#xff1a; 一、核心原理&#xff1a;Proxy 代理 Vue 3 的响应式系统基于 JavaScript 的 Proxy 对象实现&#xff08;Vue 2 使…...

使用Scrapy官方开发的爬虫部署、运行、管理工具:Scrapyd

一般情况下&#xff0c;爬虫会使用云服务器来运行&#xff0c;这样可以保证爬虫24h不间断运行。但是如何把爬虫放到云服务器上面去呢&#xff1f;有人说用FTP&#xff0c;有人说用Git&#xff0c;有人说用Docker。但是它们都有很多问题。 FTP&#xff1a;使用FTP来上传…...

基于51单片机和8X8点阵屏、独立按键的单人弹球小游戏

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、8X8点阵屏2、独立按键3、定时器04、定时器1 四、主函数总结 系列文章目录 前言 用的是普中A2开发板&#xff0c;用到板上的独立按键、8X8点阵屏。 【单片机】STC89C52RC 【频率】12T11.0592MHz 效果查看/操作…...

群体智能避障革命:RVO算法在Unity中的深度实践与优化

引言&#xff1a;游戏群体移动的挑战与进化 在《全面战争》中万人战场恢弘列阵&#xff0c;在《刺客信条》闹市里人群自然涌动&#xff0c;这些令人惊叹的场景背后&#xff0c;都离不开一个关键技术——群体动态避障。传统路径规划算法&#xff08;如A*&#xff09;虽能解决单…...

Java 实现选择排序:[通俗易懂的排序算法系列之一]

引言 大家好&#xff01;从今天开始&#xff0c;我计划写一个关于常见排序算法的系列文章&#xff0c;旨在用通俗易懂的方式&#xff0c;结合 Java 代码实现&#xff0c;帮助大家理解和掌握这些基础但非常重要的数据结构与算法知识。 排序是计算机科学中最基本的操作之一&…...

动画过渡设置

使用Animator的Trigger参数 步骤 1&#xff1a;打开 Animator 窗口 确保你的 Sprite 对象已添加 Animator 组件。 在 Unity 编辑器顶部菜单栏&#xff0c;选择 Window > Animation > Animator&#xff0c;打开 Animator 窗口。 步骤 2&#xff1a;创建 Trigger 参数 在…...

【项目管理-高项】学习方法 整体概览

相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 1.背景 &#x1f4dd; 软考高项,全称 信息系统项目管理师 ,是软考高级资格项目之一。 本考试考三门科目&#xff1a;综合知识&#xff08;上午&#xff09;、案例分析&#xff08;下午…...

HarmonyOS应用开发者高级-编程题-001

题目一&#xff1a;跨设备分布式数据同步 需求描述 开发一个分布式待办事项应用&#xff0c;要求&#xff1a; 手机与平板登录同一华为账号时&#xff0c;自动同步任务列表任一设备修改任务状态&#xff08;完成/删除&#xff09;&#xff0c;另一设备实时更新任务数据在设备…...

HarmonyOS-ArkUI Ability进阶系列-UIAbility与各类Context

UIAbility及相关类关系 一个模块编译的时候会出一个HAP包&#xff0c; 每一个HAP包在运行时都对应一个AbilityStage。 AbilityStage持有一个AbilityStageContext一个APP&#xff0c; 有时候会有很多个HAP包&#xff0c; 至少一个。 一个APP运行时&#xff0c;对应的是我们的App…...

接口并行执行且流式顺序输出的解决方案

接口并行执行且流式顺序输出的解决方案: import asyncio from aiotas_agi2all_llms_utils.output_answer_from_ask_question_results import (reasoning_model_ask_question, ) import os from aiotas_agi2all_llms_utils.logging_utils import create_logger import uuid fr…...

浅谈AI - DeepSpeed - 单卡慎用!

前言 曾在游戏世界挥洒创意&#xff0c;也曾在前端和后端的浪潮间穿梭&#xff0c;如今&#xff0c;而立的我仰望AI的璀璨星空&#xff0c;心潮澎湃&#xff0c;步履不停&#xff01;愿你我皆乘风破浪&#xff0c;逐梦星辰&#xff01; 简介 Deepspeed 的 ZeRO&#xff08;Ze…...

Java Web从入门到精通:全面探索与实战(一)

目录 引言&#xff1a;开启 Java Web 之旅​ 一、Java Web 基础概念大揭秘​ 1.1 什么是 Java Web​ 1.2 Java Web 的优势剖析​ 1.3 Java Web 相关核心概念详解 二、搭建 Java Web 开发环境&#xff1a;步步为营 2.1 所需软件大盘点​ 2.2 软件安装与配置全流程​ 三…...

5G从专家到小白

文章目录 第五代移动通信技术&#xff08;5G&#xff09;简介应用场景 数据传输率带宽频段频段 VS 带宽中低频&#xff08;6 GHz以下&#xff09;&#xff1a;覆盖范围广、穿透力强高频&#xff08;24 GHz以上&#xff09;&#xff1a;满足在热点区域提升容量的需求毫米波热点区…...

leetcode111 二叉树的最小深度

相对于 104.二叉树的最大深度 &#xff0c;本题还也可以使用层序遍历的方式来解决&#xff0c;思路是一样的。 最小深度的定义&#xff1a;从根节点到最近叶子节点的最短路径上的节点数量。 特别注意&#xff1a; 如果一个子树不存在&#xff0c;就不能用它来计算深度&#x…...

算法设计学习10

实验目的及要求&#xff1a; 本查找实验旨在使学生深入了解不同查找算法的原理、性能特征和适用场景&#xff0c;培养其在实际问题中选择和应用查找算法的能力。通过实验&#xff0c;学生将具体实现多种查找算法&#xff0c;并通过性能测试验证其在不同数据集上的表现&#xff…...

数字统计题解

题目理解 题目要求计算所有不大于 N 的非负整数中数字 D 出现的总次数。例如&#xff0c;当 D1 且 N12 时&#xff0c;数字1出现在1、10、11&#xff08;两次&#xff09;、12中&#xff0c;共5次。 输入输出分析 输入格式&#xff1a; 两个正整数 D 和 N&#xff0c;其中1≤…...

eclipse导入工程提示Project has no explicit encoding set

eclipse导入工程提示Project has no explicit encoding set-CSDN博客...

【网络安全论文】筑牢局域网安全防线:策略、技术与实战分析

【网络安全论文】筑牢局域网安全防线:策略、技术与实战分析 简述一、引言1.1 研究背景1.2 研究目的与意义1.3 国内外研究现状1.4 研究方法与创新点二、局域网网络安全基础理论2.1 局域网概述2.1.1 局域网的定义与特点2.1.2 局域网的常见拓扑结构2.2 网络安全基本概念2.2.1 网络…...

JVM虚拟机篇(五):深入理解Java类加载器与类加载机制

深入理解Java类加载器与类加载机制 深入理解Java类加载器与类加载机制一、引言二、类加载器2.1 类加载器的定义2.2 类加载器的分类2.2.1 启动类加载器&#xff08;Bootstrap ClassLoader&#xff09;2.2.2 扩展类加载器&#xff08;Extension ClassLoader&#xff09;2.2.3 应用…...

纯个人整理,蓝桥杯使用的算法模板day4(图论 最小生成树问题),手打个人理解注释,超全面,且均已验证成功(附带详细手写“模拟流程图”,全网首个

目录 最小生成树Prim代码模拟流程图 kruskal代码 代码对应实现案例 最小生成树 最小生成树&#xff1a;在无向图中求一棵树&#xff08;n-1条边&#xff0c;无环&#xff0c;连通所有点&#xff09;&#xff0c;而且这棵树的边权和最小 &#xff08;ps&#xff1a;可能结果不止…...

学习笔记,DbContext context 对象是保存了所有用户对象吗

DbContext 并不会将所有用户对象保存在内存中&#xff1a; DbContext 是 Entity Framework Core (EF Core) 的数据库上下文&#xff0c;它是一个数据库访问的抽象层它实际上是与数据库的一个连接会话&#xff0c;而不是数据的内存缓存当您通过 _context.Users 查询数据时&…...

Kafka 和 Flink的讲解

一、Kafka&#xff1a;分布式消息队列 1. 核心概念 ​​角色​​&#xff1a;Kafka 是一个分布式、高吞吐量的​​消息队列​​&#xff08;Pub-Sub 模型&#xff09;&#xff0c;用于实时传输数据流。​​关键术语​​&#xff1a; ​​Producer​​&#xff08;生产者&…...