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

【动态规划篇】欣赏概率论与镜像法融合下,别出心裁探索解答括号序列问题

          本篇鸡汤:没有人能替你承受痛苦,也没有人能拿走你的坚强. 

欢迎拜访羑悻的小杀马特.-CSDN博客

本篇主题:带你解答洛谷的括号序列问题(绝对巧解)

制作日期:2025.01.10

隶属专栏:C/C++题海汇总

目录

本篇简介:

一·题目介绍:

二·思路叙述:

2.1判断独立性:

2.2空隙法及填充gap表:

2.3填充dp表: 

2.3.1dp状态方程规定:

2.3.2dp的状态转移方程推导及填充:

2.4·镜像法:

2.5细节处理:

三·代码汇总:

四.个人小结:


本篇简介:

本篇主体还是动态规划,之前篇介绍了对它的讲解概念,因此本篇就不做多解释,下面就是利用动态规划,结合概率论推导独立性公式,两步走,并采用镜像法优化一下,最后动态规划得到答案后,采用独立性求积方法得出答案。

一·题目介绍:

 

洛谷链接: [蓝桥杯 2021 省 AB] 括号序列 - 洛谷

测试用例: 

输入:((() 

输出:5 

二·思路叙述:

当我们看到了括号填充类似问题,是不是想到了leetcode的有道括号生成问题,看着好像:

链接:LCR 085. 括号生成 - 力扣(LeetCode) 

下面我们展示下leetcode的代码:


//思路:对于返回的字符串组合,可以考虑是否是决策树的叶子然后用决策树+dfs:即根据n也就是判断递归条件(剪枝)左右支为'('')'它们的选择,
//然后画出决策树分析递归条件,完成dfs设计class Solution {
public://全局变量的设计:int left=0;int right=0;string path;vector<string> ret;vector<string> generateParenthesis(int n) {dfs(n);return ret;}void dfs(int &n){//递归出口:if(path.size()==2*n){ret.emplace_back(path);return;}//判断进入递归的条件(剪枝逆向):if(left<n){path+='(';left++;dfs(n);path.pop_back();left--;//回溯}if(right<left){path+=')';right++;dfs(n);path.pop_back();right--;//回溯}}
};

但是我们仔细一下看,本题并不是自己生成所有种类的正确情况,而是让我们自己在它给例子去填充让它有效。

看到这里,根据我们上一篇的经验就很容易想到动态规划去解答,因此leetcode上面深度优先遍历的方法就寄掉了。

因此下面我们就用动态规划思想去解答;但是它也是不好想到;甚至我们去看题解,是不是都看不懂比如:

  

这里可以看出要么就是三层for嵌套循环填dp,以及很多人会发现题解甚至都看不懂,即便看懂还要琢磨很久才会明白(当然这里博主也是);因此博主在这出一篇文章来解释一下,让大家可以更加明白这道题是如何解答的。

那么下面我们就以题目给的例子来畅谈:

2.1判断独立性:

首先,我们的任务就是要么填充右括号来干掉左括号,要么填充左括号来干掉右括号;反正就是要得到这样以最小的添加括号让它合法的添加方法数;那么下面我们说一下结论:

这里可以知道添加右括号使它合法(也就是利用右括号干掉左括号)的方法数和添加左括号方法数是独立的---->而题目要求是添加左括号和右括号是都行的,因此最后就可以转化成添加左括号方案数与右括号方案数之积(两者是独立的) 。

证明: 

这里为什么可以得到上面说的结论,直接就把问题简单化,单一化了:

这里需要用到的概率论的公式:

说白了就是A B两个事件如果互不干扰,互不影响,那么此时两种同时发生的概率就是两者单独发生概率之积, 而本题呢?

我们给它的目的简化一下,使得它更贴近这,题目其实就是要求让我们要么补充左括号,要么补充右括号,对应把相反括号干掉,也就是所说的使得左右括号都合法;而我们补充右括号使得左括号合法并没有影响其他右括号的合法性(因为我们没有补充左括号)-->所以左右括号的合法性是独立的。

因此我们可以拆开来分别求它们单独的合法性种类然后求个积就是题目要的使得例子左右括号都合法的种类数。

 这里注意下:题目所说最少填充括号的意思就是比如对于((()我们不能无缘无故让添加一对括号让它合法:((()()()()))类似这样。

因此我们可以得到一个公式:

 ret=(re_left*re_right)%1e9+7   这里题目要求结果太大要取模 

 解释一下:也就是我们使左括号合法的种类*使右括号合法的种类。

那么也就是我们怎么求左括号和发的种类:这里我们引入一下空隙法(后面我们得知独立性后就基于判断左括号合法性来讲解)。

2.2空隙法及填充gap表:

这里我们以左括号为例,就是我们每当多一个左括号就相当于多了一个可以填充右括号的空隙;但是当我们遍历到右括号,空隙个数可以理解成没变;但遍历到当前(0~当前空隙)能填充右括号个数要少一个(保证非负性,大于0才减少)

然后就是我们搞一个空隙数组记录的就是前i个空隙中最多可以放多少个括号:gap[i](这里为了方便我们一一对应,因此下标从1开始,对应的是前多少个空隙)

下面我们举个例子吧:

比如:((() :这里有三个空隙,具体变化gap数组的值(随着遍历):1-->2-->3-->2(这注意是吧第三个空隙的最大容量减1)。

再比如:

因为多少个左括号就意味着可以补充多少右括号;但是空隙最大容量也就是补充括号的个数是随着与之反作用的括号相关的

因此下面重点:我们总结一下空隙规则(这里我们都以补充右括号使左括号合法来谈):

①空隙的个数也就是左括号的个数;

②当遇到右括号的话空隙所容纳的括号数就减少(前提是大于0)。

下面就根据上述所讲填充空隙表gap:

l:记录的左括号个数也就是空隙个数

void init_gap() {//填充gap数组,也就是判断多少个空隙以及前多少个空隙的
//最大容量for (int i = 0; i < N; i++) {if (s[i] == '(') {l++;gap[l] = gap[l - 1] + 1;}else  gap[l] > 0 ? gap[l]-- : 1;//这里注意当干右括号的时候//因为是求得最少补充的左括号数,故不能出现负}
}

但是这里我们就可以得到公式也就是判断填右括号使得左括号合法的规定:

我们gap数组存的都是遍历到当前空隙开始从0~i补充右括号最大个数;因此我们当填充dp表的时候遍历填写括号个数的要加一个判断:

填充括号个数<=gap[遍历到当前的空隙]  即 i<=gap[j]。

 那又要问了为什么动态规划不是填充dp表为啥搞个空隙表;因为后面我们会填充dp就是根据多少个空隙(遍历到哪里),最多可以填充多少个括号来填充的故肯定是有用的。

2.3填充dp表: 

2.3.1dp状态方程规定:

那么首先我们肯定要先定义dp表的状态:

因为它是遍历到哪里,然后又要在这段区间填充括号(多少个)使它变得合法,因此最好搞一个二维dp表。

那么我们结合上面搞的空隙表,规定状态:

dp[i][j]代表遍历到第j个空隙处,可以在0~i个空隙内可以填充i个括号的种类数(这里我们遍历只按照左括号走)

2.3.2dp的状态转移方程推导及填充:

这里由于让下标与实际意义对应及可能会出现状态方程自己初始化需要前边的值,我们选择多开,并手动初始化。 

首先呢对于大多数人直接用脑子按照这个逻辑去想状态方程是啥样,肯定是困难的,因此我们搞一个简单的例子带大家总结一下状态转移方程:

首先我们根据这个例子自己按照dp状态规定填好dp表;但是为什么第一行都填0呢 ?

这就是我们状态方程自己循环填充要用到的,需要我们提前进行初始化:

也就是把0个括号插入到0-l个空隙插入的方案:这里我们可以理解成把0个即插入“空气”这种插法,故只有一种情况(虽然有些勉强);其次就是我们只能根据找规律,细心的话如果我们第一行不填写,可以发现如果都填写1的话可以得到一个公式:

dp[i][j]=dp[i][j-1]+dp[i-1][j-1]+dp[i-2][j-1]+...+dp[0][j-1]

其实就是我们那个填写dp表的一个“1”形状dp值之和;我们可以根据这个公式来往上递推成“/”形状的dp值这样就无需再来一层for循环(就像上面说的o(N^3)一样复杂度的三层for了)只需取前面填充的两个dp值就好了。

如:

 

因此公式化简(也就是我们填充dp表要用的公式):

dp[i][j]=dp[i - 1][j] + dp[i][j - 1] 

当然了后面我们写的时候要对1e9+7取模(题目说明,就不用说了吧,还有就是long long的奇妙之处了) 

那dp填表的过程这个公式就ok吗?

当然还会有条件限制,这里我们在填充空隙表gap数组的时候就说了:

加上这个条件后填充dp就ok了。

这个条件就解释了为什么最后填充三个括号为0以及这么多位置填写0的原因了。

最后我们要的是在0~j个空隙能填充的最大括号数的方案数(遍历到对应空隙,此空隙里面放的gap数组值)即:

dp[gap[l]][l];

这样我们就得到了上面所说的re_left值了(记住也是long long) 。

后面我们在去求re_right难道也是写一个类似的两个函数去完成吗?

当然不用了,直接给他镜像一下,就等同于判断左括号的合法性了;这也就是本篇标题提到的镜像法的巧妙了。

2.4·镜像法:

这里虽然名字起的多好高级,其实并不难理解,之所以这么操作就是为了让我们不用再多写函数就可以完成对右括号像左括号一样类似的检验;所以为什么起这个名字呢,下面看张图片:

这样就可以看出了我们要检查右括号的合法性(补充左括号);其实就是把它镜像一下然后再检验一次左括号的合法性就行了。  

其实也不难操作:就是遍历一下原串,把左括号改成右括号,右括号改成左括号;然后再利用迭代器逆置一下就好

最后我们根据独立性返回两者之积就好了(但是注意范围long long ,其次就是取模)。 

2.5细节处理:

也就是分享一下博主在写这道题遇到的困难,即一些细节问题没注意到而导致的:

比如:

①博主写的代码这里大都用的全局变量(好处就是可以让函数不用传参,坏处就是如果再次使用就要重新初始化)

 l=0;//再次填充gap是需要对它初始化0memset(dp,0,sizeof(dp));//再次用填充dp表也要对它初始化0

 ②就是结果要是long long类型否则即不能通过(比如和dp值有关都要是long long,最后答案等);否则就这样:

这就是re_left和re_right没有long long的结果;果真映射那句话:“不加long long 见祖宗” 。

 ③其次就是那些细节问题,比如填充gap表注意:

填充dp表要注意:

这样细节都处理好就大差不大了。

三·代码汇总:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define MAX 1000000007
#define C 5000
ll dp[C+1][C + 1] = { 0 };//表示把i个括号插入到前j个空隙的方案数
int gap[C + 1] = { 0 };//下标是第几个空隙,值是空隙的最大左括号容量
string s; 
int N; 
int l=0;//记录左括号数量
void init_gap() {//填充gap数组,也就是判断多少个空隙以及前多少个空隙的
//最大容量for (int i = 0; i < N; i++) {if (s[i] == '(') {l++;gap[l] = gap[l - 1] + 1;}else  gap[l] > 0 ? gap[l]-- : 1;//这里注意当干右括号的时候//因为是求得最少补充的左括号数,故不能出现负}
}
ll get_ans() {for (int i = 0; i <= l; i++) dp[0][i] = 1;for (int i = 1; i <= l; i++) {for (int j = 1; j <= l; j++) dp[i][j] = gap[j] >= i ?  (dp[i - 1][j] + dp[i][j - 1]) % MAX:0;//填充的括号数量不能超过前多少个空隙所能容下的最大     }return dp[gap[l]][l];//输出的是把最大空隙数所能容的括号数填入的最多方式数
}
void mapping_r_to_l(){//补充左括号干掉右括号转化成补充右括号干掉左:
//镜像一下子,使得写的干左括号的函数还可以用reverse(s.begin(), s.end());for (int i = 0; i < N; i++)s[i] =(s[i] == '(' ?  ')' : '(');
}
int main() {cin >> s;N = s.size();init_gap();ll re_left = get_ans();mapping_r_to_l();l=0;//全局劣势init_gap();memset(dp,0,sizeof(dp));//全局劣势ll re_right = get_ans();cout << (re_left * re_right) % MAX << endl;//利用独立性return 0;} 

最后也是满分AC了:

四.个人小结:

这里对于动态规划的题型做法就不总结了,因为上篇总结过啦,具体可看:【动态规划篇】步步带你深入解答成功AC最优包含问题(通俗易懂版)-CSDN博客

此外就是对于不熟悉的题目,我们要对看看题解,看看大佬们是用什么奇妙的方法解答的,当然可能会看不懂,但是我们不要放弃,一天看不懂就多看几天,只要愿意学习别人的解法,总是会可以悟懂的(这里说一下博主写这篇文章其实也是学习了大佬的写法,当然也是看了好几天),所以我们自己不熟练就要多多学习必然的解法做好总结,尽最大可能去吸收它。这里博主建议如果看题解看不懂,尽量找写的比较详细的博客去学习(博主自荐一下:可以参考向博主这样写的文章去看,去学习,如有不足,指出来博主会尽力修改)

还是那句话,只要愿意学肯定能学会的,关键还是在于你的抉择。

对此,我之所以能写出这篇文章还要感谢一位博主写的它的文章,通过阅读,揣摩那位博主的文章;加上自己的理解才可创作出这篇文章(相当于对那位博主的文章的深刻解释以及加上了自己的理解吧)  

借鉴的博主文章链接:第十二届蓝桥杯B组省赛括号序列题解_蓝桥杯判断括号合法-CSDN博客

 当然还是先建议把博主的文章读懂再去读这位博主的文章,毕竟个人认为自己的文章对它解释了很多地方,更方便读者阅读。

感谢大家阅读!!! 

相关文章:

【动态规划篇】欣赏概率论与镜像法融合下,别出心裁探索解答括号序列问题

本篇鸡汤&#xff1a;没有人能替你承受痛苦&#xff0c;也没有人能拿走你的坚强. 欢迎拜访&#xff1a;羑悻的小杀马特.-CSDN博客 本篇主题&#xff1a;带你解答洛谷的括号序列问题&#xff08;绝对巧解&#xff09; 制作日期&#xff1a;2025.01.10 隶属专栏&#xff1a;C/C题…...

Windows Docker 安装

使用别人写好的软件/工具最大的障碍是什么——必然是配环境。配环境带来的折磨会极大地消解你对软件、编程本身的兴趣。虚拟机可以解决配环境的一部分问题&#xff0c;但它庞大笨重&#xff0c;且为了某个应用的环境配置好像也不值得模拟一个全新的操作系统。 Docker 的出现让…...

Spring 设计模式:经典设计模式

Spring 设计模式&#xff1a;经典设计模式 引言 Spring 框架广泛使用了经典设计模式。 这些模式在 Spring 内部发挥着重要作用。 通过理解这些设计模式在 Spring 中的应用&#xff0c;开发者可以更深入地掌握 Spring 框架的设计哲学和实现细节。 经典设计模式 控制反转&am…...

vscode支持ssh远程开发

文章目录 一、生成ssh使用的公钥/密钥对二、使用vscode通过ssh连接服务器1.安装插件2.配置文件3.连接服务器4.新建文件夹&#xff0c;存放不同的任务 三、使用scp命令与服务器互传文件、文件夹1.检查Windows 系统是否支持scp命令2.在Windows系统本地的电脑向服务器传输文件、文…...

ssh2-sftp-client和ssh2配合使用js脚本快速部署项目到服务器

有时候因为服务器不能实现github或者gitlab的自动部署服务&#xff0c;所以就需要使用脚本来实现自动部署&#xff0c;可以省时省力&#xff0c;一劳永逸。这里就使用ssh2-sftp-client和ssh2来实现&#xff0c;即便是需要sudo权限&#xff0c;也是可以的。 1.先将本地打包后的…...

CODESYS MODBUS TCP通信(禾川Q1 PLC作为MODBUS TCP从站)

禾川Q1 PLC MODBUS TCP 通信(PLC作为MODBUS TCP通信主站) 禾川Q1 PLC MODBUS TCP通信(CODESYS平台完整配置+代码)-CSDN博客文章浏览阅读28次。MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(MODBUSTCP通信)_将matlab仿真导入plc-CSDN博客文章浏览阅读722次。本文详细介绍了如…...

2025年第三届“华数杯”国际大学生数学建模竞赛A题题目

问题A&#xff1a;他能游得更快吗&#xff1f; 背景介绍 在2024年巴黎奥运会上&#xff0c;中国游泳运动员潘展乐凭借出色的表现成为全球瞩目的焦点。年仅19岁的他在男子100米自由泳比赛中以46秒40 的成绩夺冠&#xff0c;并创造了自己保持的世界纪录。在男子4100米混合泳接力…...

一、智能体强化学习——强化学习基础

1.1 强化学习与深度学习的基本概念 1.1.1 强化学习的核心思想 什么是强化学习&#xff1f; 强化学习&#xff08;Reinforcement Learning, RL&#xff09;&#xff1a;指在与环境&#xff08;Environment&#xff09;的反复交互中&#xff0c;智能体&#xff08;Agent&#x…...

USB学习——基本概念

文章目录 USB&#xff08;Universal Serial Bus&#xff09;概述USB系统的描述USB总线传输方式USB的拓扑结构 USB的连接模型USB控制器及分类USB描述符USB 端点USB枚举过程USB 四种传输类型USB 事务批量传输(Bulk)中断传输(Interrupt)等时传输(Isochronous)控制传输(Control)端点…...

vue3 初体验

git代码git clone https://github.com/kailong321200875/vue-element-plus-admin.git 后端自己写python&#xff0c;Django架构 1.报错&#xff1a;跨域&#xff0c;代理的方式解决 server: {port:4000, ##前端启动端口proxy: {// 选项写法/api: {target: http://127.0.0.1…...

CAPL语法基础

CAPL语法基础 目录 CAPL语法基础1. 引言2. 数据类型、变量与常量2.1 数据类型2.2 变量2.3 常量2.4 案例1&#xff1a;使用变量和常量计算圆的面积 3. 运算符与表达式3.1 算术运算符3.2 关系运算符3.3 逻辑运算符3.4 位运算符3.5 案例2&#xff1a;使用运算符实现简单的逻辑判断…...

代码的形状:重构的方向

大概2周前写了一篇《代码的形状:从外到内的探索与实践》 涵树&#xff1a;代码的形状:从外到内的探索与实践 觉得这个话题还可以继续&#xff0c;它是一个从无形到有形的过程&#xff0c;而这个过程感觉就是王阳明先生说的“心即理”的探寻过程。 我讨论代码的形状&#xff…...

144.《在 macOS 上安装 Redis》

文章目录 在 macOS 上安装 Redis先决条件安装在前台启动和停止 Redis使用 launchd 启动和停止 Redis连接到 Redis后续步骤Next steps redis 官方安装教程是英文&#xff0c;本文只是将英文文档翻译成中文&#xff0c;方便大家阅读 redis官方安装教程&#xff1a;download redis…...

使用mysql报Communications link failure异常解决

背景 线上使用polarDB&#xff0c;基于mysql(5.7)&#xff0c;架构为springbootmybatisplusdurid连接池&#xff0c;部分业务场景涉及大表更新和查询操作&#xff0c;在查询慢sql且超过一定时间时就会报出"Communications link failure"异常&#xff0c;主要体现在界…...

搭建一个fastapi的项目,调用ollama服务

1. 项目结构 my_project/ │ ├── app/ │ ├── main.py # FastAPI应用的入口 │ ├── services/ # 包含服务逻辑 │ │ └── ollama_service.py │ ├── models/ # 定义数据模型 │ │ └── response.py │ ├─…...

【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录 &#x1f380;&#x1f380;&#x1f380; .NET开源 ORM 框架 SqlSugar 系列 &#x1f380;&#x1f380;&#x1f380; 文章目录 系列文章目录前言 &#x1f343;一、实体对象更新1.1 单条与批量1.2 不更新某列1.3 只更新某列1.4 NULL列不更新1.5 无主键/指定列…...

Elasticsearch—索引库操作(增删查改)

Elasticsearch中Index就相当于MySQL中的数据库表 Mapping映射就类似表的结构。 因此我们想要向Elasticsearch中存储数据,必须先创建Index和Mapping 1. Mapping映射属性 Mapping是对索引库中文档的约束&#xff0c;常见的Mapping属性包括&#xff1a; type&#xff1a;字段数据类…...

C#进阶-在Ubuntu上部署ASP.NET Core Web API应用

随着云计算和容器化技术的普及&#xff0c;Linux 服务器已成为部署 Web 应用程序的主流平台之一。ASP.NET Core 作为一个跨平台、高性能的框架&#xff0c;非常适合在 Linux 环境中运行。本篇博客将详细介绍如何在 Linux 服务器上部署 ASP.NET Core Web API 应用&#xff0c;包…...

执行这个composer require topthink/think-mongo 报错

安装tp5 mongodb扩展 执行这个composer require topthink/think-mongo 报错 解决方法&#xff1a; 1 把composer.json里的"overtrue/wechat": "4.2.11",注释掉再执行 2 composer require topthink/think-mongo1.* 安装mongo的1版本...

大语言模型训练数据集格式

1. SFT&#xff08;有监督微调&#xff09;的数据集格式 对于大语言模型的训练中&#xff0c;SFT&#xff08;Supervised Fine-Tuning&#xff09;的数据集格式可以采用以下方式&#xff1a; 输入数据&#xff1a;输入数据是一个文本序列&#xff0c;通常是一个句子或者一个段…...

stringRedisTemplate.execute执行lua脚本

stringRedisTemplate.execute执行lua脚本 1. 引入必要依赖 确保项目中已经引入了Spring Data Redis相关依赖&#xff0c;例如在 Maven 项目中&#xff0c;一般会有如下依赖&#xff08;版本号根据实际情况调整&#xff09;&#xff1a; <dependency><groupId>or…...

鸿蒙UI(ArkUI-方舟UI框架)

参考&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-layout-development-overview-V13 ArkUI简介 ArkUI&#xff08;方舟UI框架&#xff09;为应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff…...

Linux-蓝牙协议

SPP (Serial Port Profile): 串口协议&#xff08;SPP&#xff09;是一个蓝牙配置文件&#xff0c;允许设备通过蓝牙模拟传统的串行端口通信。它通常用于无线串口连接&#xff0c;允许设备如计算机和外设&#xff08;例如打印机或条形码扫描器&#xff09;之间进行数据传输。A…...

CES Asia 2025:科技盛宴即将开启,续写辉煌篇章

随着2025年国际消费类电子产品展览会&#xff08;CES&#xff09;在美国拉斯维加斯盛大开幕并展现出诸多令人瞩目的发展趋势&#xff0c;亚洲科技界也对即将到来的CES Asia 2025充满期待&#xff0c;一场科技盛宴即将在亚洲大陆续写辉煌。 在刚刚拉开帷幕的CES 2025上&#xff…...

tutorial3.c

这个教程程序展示了如何使用 libxlsxwriter 库向 Excel 文件中写入不同类型的数据&#xff0c;包括字符串、数字和日期。以下是程序的主要步骤和功能&#xff1a; 定义数据结构&#xff1a; 定义了一个 expense 结构体&#xff0c;包含三个成员&#xff1a;item&#xff08;项…...

C# 获取当前运行路径的6种实用方法

C# 获取当前运行路径的多种方法 在C#中&#xff0c;获取当前运行路径&#xff08;即程序的工作目录&#xff09;是常见的需求&#xff0c;尤其在处理文件读写、日志记录和配置文件时。不同的场景可能需要使用不同的方法来获取路径。本文将介绍几种常用的获取当前运行路径的方法…...

龙蜥Linux系统部署docker21.1.3版本

龙蜥系统配置docker环境 更新yum源 更新软件源中的包。 yum update安装底层工具 yum install -y yum-utils device-mapper-persistent-data lvm2添加阿里云仓库 # 添加阿里云的docker镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/c…...

.NET中的框架和运行环境

在.NET生态系统中&#xff0c;框架和运行环境是两个不同的概念&#xff0c;它们各自扮演着重要的角色。 下面我将分别介绍.NET中的框架和运行环境&#xff0c;并解释它们之间的区别。 .NET 框架&#xff08;Frameworks&#xff09; 框架提供了一套预定义的类库、工具和服务&…...

STM32的存储结构

STM32F103 芯片是基于 ARM Cortex-M3 内核的微控制器&#xff0c;它集成了多种类型的存储器&#xff0c;每种存储器都有其特定的作用和存储对象。以下是关于 STM32F103 中 Flash、ROM 和 SRAM 的详细介绍&#xff1a; 1. Flash Memory (闪存) 作用&#xff1a;Flash 是非易失性…...

微信小程序

一、小程序文件结构 1.目录结构 pages文件夹&#xff1a;存放【页面文件夹】&#xff0c;一个【页面文件夹】就是一个页面&#xff0c;存放着小程序页面文件。即pages中的每一个文件夹都存放着一个小程序页面的文件&#xff08;js、wxml、json、wxss&#xff09; 页面文件夹…...

《CPython Internals》阅读笔记:p76-p95

《CPython Internals》学习第 5 天&#xff0c;p76-p95 总结&#xff0c;总计 20 页。 一、技术总结 无。 二、英语总结(生词&#xff1a;1) 1.check vi/vt. to exam sth to ensure it is correct, true, or in good condition.示例&#xff1a; (1)After I’d finished …...

HOW - Form 表单 label 和 wrapper 对齐场景

一、背景 在日常使用 表单 时&#xff0c;我们一般有如下布局&#xff1a; 可以通过 Form 表单提供的配置直接设置&#xff1a; <Formform{form}labelCol{{ span: 4 }}wrapperCol{{ span: 20 }}onFinish{handleSubmit}><Form.Itemlabel"输入框"name"…...

Js的回调函数

一、什么是回调函数&#xff08;Callback&#xff09;&#xff1f; 回调函数&#xff08;Callback Function&#xff09;是指一个函数被作为参数传递给另一个函数&#xff0c;并在特定事件发生或操作完成时执行。 可以通俗地理解为一种“委托”机制。 在JavaScript中&#xff0…...

FairGuard游戏安全2024年度报告

导 读&#xff1a;2024年&#xff0c;国内游戏市场实际销售收入3257.83亿元&#xff0c;同比增长7.53%&#xff0c;游戏用户规模6.74亿人&#xff0c;同比增长0.94%&#xff0c;市场收入与用户规模双双实现突破&#xff0c;迎来了历史新高点。但游戏黑灰产规模也在迅速扩大&…...

ant-design-vue 1.X 通过id获取a-input组件失败

1.ant-design-vue 1.X 问题描述 当我在a-form组件中&#xff0c;以v-decorator指令绑定表单组件时&#xff0c;无法根据我设置的verify-code-input获取元素 <a-input type"text" id"verify-code-input" class"paIpt":placeholder"$t(…...

JS爬虫实战演练

在这个小红书私信通里面进行一个js的爬虫 文字发送 async function sendChatMessage(content) {const url https://pro.xiaohongshu.com/api/edith/ads/pro/chat/chatline/msg;const params new URLSearchParams({porch_user_id: 677e116404ee000000000001});const messageD…...

JVM vs JDK vs JRE

JVM是Java虚拟机的缩写&#xff0c; 用于实现Java的一次编译&#xff0c;处处运行。 Java代码写成.class后&#xff0c;由本地的虚拟机运行。 JDK&#xff08;Java Development Kit&#xff09;是一个功能齐全的 Java 开发工具包&#xff0c;供开发者使用。 JDK包含了JRE。…...

OpenCV相机标定与3D重建(47)从两幅图像中的一组匹配点恢复相机的姿态(旋转和平移)函数recoverPose()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 从两幅不同相机拍摄的图像中对应的点恢复相对相机旋转和平移&#xff0c;使用手性检查。返回通过该检查的内点数量。 cv::recoverPose 是 OpenCV…...

代码随想录算法训练营day27

代码随想录算法训练营 —day27 文章目录 代码随想录算法训练营前言一、贪心算法理论基础二、455.分发饼干三、376. 摆动序列53. 最大子数组和总结 前言 今天是算法营的第27天&#xff0c;希望自己能够坚持下来&#xff01; 今日任务&#xff1a; ● 贪心算法理论基础 ● 455.…...

基于华为ENSP的OSPF状态机、工作过程、配置保姆级别详解(2)

本篇技术博文摘要 &#x1f31f; 基于华为enspOSPF状态机、OSPF工作过程、.OSPF基本配置等保姆级别具体详解步骤&#xff1b;精典图示举例说明、注意点及常见报错问题所对应的解决方法 引言 &#x1f4d8; 在这个快速发展的技术时代&#xff0c;与时俱进是每个IT人的必修课。我…...

【数据结构】链表

目录 ​编辑 1.2链表 1.2.1 链表的特性 1.2.2 单向链表 遍历无头单向链表 遍历有头单向链表 链表尾插法练习 1.2.3 单向链表的函数操作 单向链表的特点&#xff1a; 1.2链表 链表又称单链表、链式存储结构&#xff0c;用于存储逻辑关系为“一对一”的数据。 和顺序表…...

RabbitMQ解决消息积压的方法

目录 减少发送mq的消息体内容 增加消费者数量 批量消费消息 临时队列转移 监控和预警机制 分阶段实施 最后还有一个方法就是开启队列的懒加载 这篇文章总结一下自己知道的解决消息积压得方法。 减少发送mq的消息体内容 像我们没有必要知道一个的中间状态&#xff0c;只需…...

机器学习是?

机器学习&#xff08;Machine Learning&#xff09;是一门多领域交叉学科&#xff0c;涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科; 是人工智能&#xff08;AI&#xff09;的一个分支&#xff0c;也是AI的核心领域&#xff0c;它专注于开发算法和模型&#…...

jupyter出现“.ipynb appears to have died. It will restart automatically.”解决方法

原因 解决方法&#xff1a;更新jupyter的版本 1.打开anaconda prompt 2、更新jupyter版本 在anaconda prompt输入以下指令 conda update jupyter如图&#xff1a;...

计算机毕业设计PyHive+Hadoop深圳共享单车预测系统 共享单车数据分析可视化大屏 共享单车爬虫 共享单车数据仓库 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

c++开源协程库libgo介绍及使用,srs协程,boost协程 Boost::fiber

https://www.cnblogs.com/qwsdcv/p/9115364.html Boost - 从Coroutine2 到Fiber - 开学五年级了 - 博客园 协程就是由程序员控制跑在线程里的“微线程”。它可以由程序员调度&#xff0c;切换协程时代价小(切换根据实现不同&#xff0c;消耗的CPU周期从几十到几百不等)&#x…...

微服务实现高并发 秒杀系统,前后端实现

一、前端实现 前端项目初始化 首先&#xff0c;我们需要创建一个新的 Vue 3 项目。你可以使用 Vue CLI 来快速搭建项目。 安装 Vue CLI&#xff08;如果尚未安装&#xff09; bash npm install -g vue/cli 创建 Vue 项目 bash vue create seckill-frontend cd seckill-f…...

Eureka缓存机制

一、Eureka的CAP特性 Eureka是一个AP系统&#xff0c;它优先保证可用性&#xff08;A&#xff09;和分区容错性&#xff08;P&#xff09;&#xff0c;而不保证强一致性&#xff08;C&#xff09;。这种设计使得Eureka在分布式系统中能够应对各种故障和分区情况&#xff0c;保…...

PHP语言的学习路线

PHP语言的学习路线 PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛使用的开源服务器端脚本语言&#xff0c;尤其适用于Web开发。由于其易学易用、功能强大&#xff0c;PHP成为了许多动态网站和Web应用程序开发的首选语言。随着Web3.0和云计算的兴起&#xff0c…...

python学opencv|读取图像(二十八)使用cv2.warpAffine()函数平移图像

【1】引言 前序已经对图像操作进行了广泛的学习&#xff0c;包括读取、放大缩小&#xff0c;改变BGR通道值等&#xff0c;相关链接包括且不限于&#xff1a; python学opencv|读取图像-CSDN博客 python学opencv|读取图像&#xff08;三&#xff09;放大和缩小图像_python(1)使…...