【算法学习】递归、搜索与回溯算法(一)
算法学习:
https://blog.csdn.net/2301_80220607/category_12922080.html?spm=1001.2014.3001.5482
前言:
这个专题与前面的相比是比较有难度的,但是在平时刷题时出现的概率还是非常高的,下面还是按照之前的逻辑来理清一下这几道题
目录
1. 递归
1.1 汉诺塔问题
1.2 Pow(w,n)
2. 二叉树中的深搜
2.1 计算布尔二叉树的值
3. 回溯
3.1 全排列
3.2 子集
4. 总结
1. 递归
1.1 汉诺塔问题
面试题 08.06. 汉诺塔问题
在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。
请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。
你需要原地修改栈。
示例 1:
输入:A = [2, 1, 0], B = [], C = [] 输出:C = [2, 1, 0]
示例 2:
输入:A = [1, 0], B = [], C = [] 输出:C = [1, 0]
提示:
- A 中盘子的数目不大于 14 个。
算法原理:
1.首先,何为汉诺塔问题?
简单来讲,汉诺塔问题是这样的!
给定三根柱子,记为 A,B,℃ ,其中 A 柱子上有几个盘子,从上到下编号为0到n-1,目上面的盘子一定比下面的盘子小。问:将 A 柱上的盘子经由 B 柱移动到 ℃ 柱最少需要多少次?
移动时应注意:① 一次只能移动一个盘子
②大的盘子不能压在小盘子上
解释:
看上面的例子,当有一个盘子时直接将A柱子上的放入C上即可,当有两个盘子时,就需要借助B柱才能完成,当有三个盘子时,我们发现我们需要三步走才能完成,首先先借助C柱将A柱上3个盘子移到B柱上,然后再把A柱上剩余的那个最大的盘子移到C柱上,此时A柱上就空了,然后我们再借助A柱把B柱上的盘子移到C柱子上;
再往后,不管有多少个盘子,都是这三步这样的思路,无非就是处理次数的不同,这样来讲的话其实汉诺塔问题就符合我们上面所说的递归的条件
代码实现:
class Solution {
public:void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {//目标:将A柱上所有盘子按顺序放入C柱上dfs(A,B,C,A.size());}void dfs(vector<int>& A,vector<int>& B,vector<int>& C,int n){if(n==1){C.push_back(A.back());A.pop_back();return;}//第一步,借助C柱将A柱上N-1个盘子放在B柱上dfs(A,C,B,n-1);//第二步,将A柱上剩余的那个最大盘先放到C柱上C.push_back(A.back());A.pop_back();//第三步,借助A柱将B柱上N-1个盘子全放到C柱上dfs(B,A,C,n-1);}
};
我们可以观察到我们的代码简单的有点不可思议,要相信函数递归解决重复问题的能力,只要符合子问题与父问题一致的条件,递归可以自动重复函数体中的内容,直到解决问题
1.2 Pow(w,n)
50. Pow(x, n)
实现 pow(x, n) ,即计算 x
的整数 n
次幂函数(即,xn
)。
示例 1:
输入:x = 2.00000, n = 10 输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3 输出:9.26100
示例 3:
输入:x = 2.00000, n = -2 输出:0.25000 解释:2-2 = 1/22 = 1/4 = 0.25
提示:
-100.0 < x < 100.0
-231 <= n <= 231-1
n
是一个整数- 要么
x
不为零,要么n > 0
。 -104 <= xn <= 104
算法原理:
解释:
看上面的这个示例,我们要求一个数的n次幂,按照一般的循环方式在这道题是会超时的,所以我们采取的是有点类似把幂二分的方法,比如3的16次方实际上就是两个3的8次方相乘,具体流程如上图所示,这种方法叫做快速幂
上边的思路我们观察一下其实就可以发现我们是可以用递归来解决这道问题的,因为每一步我们要解决的都是相同的子问题,下面我们直接看一下我们的解题代码,代码中有几个需要注意的细节点
代码实现:
class Solution {
public:double myPow(double x, int n) {return n<0?1.0/pow(x,-(long long)n):pow(x,n);}double pow(double x,long long n){if(n==0) return 1.0;double tmp=pow(x,n/2);return n%2==0?tmp*tmp:tmp*tmp*x;}
};
2. 二叉树中的深搜
2.1 计算布尔二叉树的值
2331. 计算布尔二叉树的值
给你一棵 完整二叉树 的根,这棵树有以下特征:
- 叶子节点 要么值为
0
要么值为1
,其中0
表示False
,1
表示True
。 - 非叶子节点 要么值为
2
要么值为3
,其中2
表示逻辑或OR
,3
表示逻辑与AND
。
计算 一个节点的值方式如下:
- 如果节点是个叶子节点,那么节点的 值 为它本身,即
True
或者False
。 - 否则,计算 两个孩子的节点值,然后将该节点的运算符对两个孩子值进行 运算 。
返回根节点 root
的布尔运算值。
完整二叉树 是每个节点有 0
个或者 2
个孩子的二叉树。
叶子节点 是没有孩子的节点。
示例 1:
输入:root = [2,1,3,null,null,0,1] 输出:true 解释:上图展示了计算过程。 AND 与运算节点的值为 False AND True = False 。 OR 运算节点的值为 True OR False = True 。 根节点的值为 True ,所以我们返回 true 。
示例 2:
输入:root = [0] 输出:false 解释:根节点是叶子节点,且值为 false,所以我们返回 false 。
提示:
- 树中节点数目在
[1, 1000]
之间。 0 <= Node.val <= 3
- 每个节点的孩子数为
0
或2
。 - 叶子节点的值为
0
或1
。 - 非叶子节点的值为
2
或3
。
算法原理:
我们先来看一下示例一:
我们通过这个示例来看一下这道题想让我们做什么:
首先我们通过图就能看到叶子节点上的值是布尔值,非叶子节点上的是二进制运算符,我们要做的就是从下往上把叶子节点上的值进行计算,直到计算到根节点为值,每一个非叶子节点计算后,它所保存的值就变为计算结果,可以理解成计算之后它变为了新的叶子节点
代码实现:
class Solution {
public:bool evaluateTree(TreeNode* root) {return dfs(root);}bool dfs(TreeNode* root){if(root->val==0||root->val==1) return root->val;bool left=dfs(root->left);bool right=dfs(root->right);return root->val==2?left|right:left&right;}
};
其实要想学好递归有很重要的一步,就是要相信,相信计算机能够帮助我们完成所有的其它步骤,我们要解决的只是我们这层的问题,所以看这段代码,我们要判断当前节点的运算情况,我们需要得到的是左子树和右子树的计算结果,然后我们这一层要做的就是把左右子树的计算结果运算一下就行
3. 回溯
3.1 全排列
LCR 083. 全排列
给定一个不含重复数字的整数数组 nums
,返回其 所有可能的全排列 。可以 按任意顺序 返回答案。
示例 1:
输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
输入:nums = [0,1] 输出:[[0,1],[1,0]]
示例 3:
输入:nums = [1] 输出:[[1]]
提示:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
nums
中的所有整数 互不相同
这题我们结合代码来看吧
代码实现:
class Solution {vector<vector<int>> ret;vector<int> prev;bool check[7];
public:vector<vector<int>> permute(vector<int>& nums) {dfs(nums);return ret;}void dfs(vector<int>& nums){if(prev.size()==nums.size()){ret.push_back(prev);return;}for(int i=0;i<nums.size();i++){if(check[i]==false){prev.push_back(nums[i]);check[i]=true;dfs(nums);prev.pop_back();check[i]=false;}}}
};
先来看一下决策树:
然后来看一下上面的代码都有什么作用:
解释:
1.全局变量:
首先我们先看一下我们全局变量的定义,对于回溯类的题,我们一般都需要定义全局变量,方便我们解题,因为回溯类的题型往往是需要我们记住的路径的,从而让我们能够返回上一步,所以我们定义了一个path,还定义了一个返回值ret,最后往往还需要一个布尔类型的数组check,在路径不能重复的题上,比如本题,一个路径上同一个元素只能出现一个,所以我们就需要把有重复元素的路径剪掉(剪枝),借助check数组,我们就可以把使用过的元素进行标记,从而从另一方面实现剪枝的效果
2.dfs函数:
dfs函数体中我们只需要确保我们这一步完成工作就行
3.2 子集
LCR 079. 子集
给定一个整数数组 nums
,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
示例 1:
输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0] 输出:[[],[0]]
提示:
1 <= nums.length <= 10
-10 <= nums[i] <= 10
nums
中的所有元素 互不相同
本题与上一题都属于回溯算法的应用
解释:
在这里我们dfs函数的处理中,我们只需要考虑两种情况,那就是当一个元素到来时,我们是选还是不选
代码实现:
class Solution {vector<vector<int>> ret;vector<int> path;
public:vector<vector<int>> subsets(vector<int>& nums) {dfs(nums,0);return ret;}void dfs(vector<int>& nums,int pos){if(pos==nums.size()){ret.push_back(path);return;}//因为我们要找的是数组的子集,所以对于数组中的元素,我们可以选,也可以不选,//最后可以拼接成一个含有若干元素的子集//选path.push_back(nums[pos]);dfs(nums,pos+1);path.pop_back(); //回溯//不选dfs(nums,pos+1);}
};
4. 总结
本篇主要以几个经典例题为主,这几个题在这类题型中难度并不算太高,各位可以自己尝试做一下,下一篇我们还将讲解更多关于这章的内容
本篇笔记:
感谢各位大佬观看,创作不易,还望各位大佬点赞支持!!!
相关文章:
【算法学习】递归、搜索与回溯算法(一)
算法学习: https://blog.csdn.net/2301_80220607/category_12922080.html?spm1001.2014.3001.5482 前言: 这个专题与前面的相比是比较有难度的,但是在平时刷题时出现的概率还是非常高的,下面还是按照之前的逻辑来理清一下这几道…...
发行基础:上传版本注意事项
1、steam的规则是上传,提审,随时可更新。 2、基本流程:根据app id以及depot id,上传本地游戏文件到服务器,把分支版本设置为默认,发布。 试玩版与正式版的app id与depot id是相互独立的。 3、理论上开发者…...
智算中心建设方案和前景分析
智算中心建设方案和前景分析 一、智算中心的概念与重要性 1.1 定义与内涵 智算中心,即智能计算中心,是基于最新人工智能理论,采用领先的人工智能计算架构,专门为人工智能应用提供所需的算力服务、数据服务和算法服务的新型基础…...
亚马逊卖家复刻案例:用社群分层策略实现海外用户月均消费3.2次
近年来,随着跨境电商市场的快速发展,全球消费模式经历深刻变革。尤其是在美国、欧洲等成熟市场,中小卖家面对高度市场集中和运营成本上升的双重压力,纷纷寻求以更精细化的用户运营来提高客户复购率,增加单用户价值。20…...
小刚说C语言刷题—1038编程求解数学中的分段函数
1.题目描述 编程求解数学中的分段函数。 …………x1 (当 x>0 )。 yf(x)…0 (当 x0 )。 ………x−1 (当 x<0 )。 上面描述的意思是: 当x>0 时 yx1 ; 当 x0 时 y0 ; 当 x<0 时 yx−1 。 输入 输入一行,只有一个整数x(−30000≤x≤30…...
kotlin 03flow-stateFlow和sharedFlow企业中使用
一 stateFlow和sharedFlow企业中使用 在企业级 Kotlin 项目中,StateFlow 和 SharedFlow 是 状态管理 与 事件分发 的核心工具,尤其在 MVVM 架构中扮演着极为关键的角色。 ✅ 企业中如何使用 StateFlow 和 SharedFlow 场景工具示例UI 状态同步ÿ…...
【机器学习|学习笔记】决策树Decision Tree(DT)的起源、原理、发展、改进和应用(附代码)
【机器学习|学习笔记】决策树Decision Tree(DT)的起源、原理、发展、改进和应用(附代码) 【机器学习|学习笔记】决策树Decision Tree(DT)的起源、原理、发展、改进和应用(附代码) 文…...
Kotlin-空值和空类型
变量除了能引用一个具体的值之外,还有一种特殊的值,那就是 null, 它代表空值, 也就是不引用任何对象 在Kotlin中, 对空值的处理是非常严格的,正常情况下,我们的变量是不能直接赋值为 null 的,否则无法编译通过, 这直接在编译阶段就避免了空指针问题 Kotlin中所有的类型默认都是…...
Java 企业级开发设计模式全解析
Java 企业级开发设计模式全解析 在 Java 企业级开发的复杂领域中,设计模式如同精湛的工匠工具,能够帮助开发者构建高效、可维护、灵活且健壮的软件系统。它们是无数开发者在长期实践中总结出的解决常见问题的最佳方案,掌握这些模式对于提升开…...
高并发内存池
文章目录 前言一、项目介绍二、内存池介绍1.池化技术2.内存池3.malloc视角下内存的管理 三、定长内存池3.1 设计思路3.2 数据结构 四、高并发内存池整体框架设计4.1 thread cachethreadcache哈希桶映射对齐规则threadcache TLS无锁访问 4.2 central cachecentral cache结构设计…...
常用对称加密算法的Python实现及详解
文章目录 **常用对称加密算法的Python实现及详解****1. 对称加密概述****1.1 对称加密的基本原理****1.2 对称加密的分类****1.3 对称加密的应用** **2. DES(Data Encryption Standard)****2.1 算法原理****2.2 Python实现****2.3 安全性分析** **3. 3DE…...
ByteArrayInputStream 类详解
ByteArrayInputStream 类详解 ByteArrayInputStream 是 Java 中用于从字节数组读取数据的输入流,位于 java.io 包。它允许将内存中的字节数组当作输入流来读取,是处理内存数据的常用工具。 1. 核心特性 内存数据源:从字节数组(b…...
MySQL C API高效编程:C语言实现数据库操作的深入解析
知识点【MySQL C API】 1、头文件及MYSQL * 句柄 //头文件 #include <mysql/mysql.h>1、MYSQL MYSQL是一个结构体,封装了与数据库连接相关的所有状态,配置和数据。 2、MYSQL *的本质 类似于 FILE*,代表一个与数据库连接的通道&…...
字符串,数组,指针之间的关系
在C语言中,字符串、指针和数组之间有着紧密且复杂的关系,它们在内存存储、操作方式等方面相互关联,以下为你详细介绍: 字符串 定义:字符串是由字符组成的序列,以空字符(\0)作为结束…...
2025流感疫苗指南+卫健委诊疗方案|高危人群防护+并发症处理 慢性肾脏病饮食指南2025卫健委版|低盐低磷食谱+中医调理+PDF 网盘下载 pdf下载
2025 年卫健委发布的《成人肥胖食养指南(2024 年版)》为减肥提供了科学的饮食指导。 📢提示:文章排版原因,资源链接地址放在文章结尾👇👇,往下翻就行 📢提示࿱…...
学习路线(机器人软件架构)
机器人软件系统架构从入门到专家学习路线 一、基础阶段(6-12个月)基础知识储备机器人基础概念:编程技能必备语言:工具链: 入门框架推荐资源: 中级阶段(1-2年)系统架构基础ROS进阶架构…...
Stellaris 群星 [DLC 解锁] CT 表 [Steam] [Windows SteamOS macOS]
Stellaris 群星 [DLC 解锁] & CT 表 [Steam] [Windows & SteamOS & macOS] DLC 版本 至最新全部 DLC 后续可能无法及时更新文章,具体最新版本见下载文件说明; DLC 解锁列表(仅供参考) 《群星》 - Symbols of Domina…...
题目 3321: 蓝桥杯2025年第十六届省赛真题-画展布置
题目 3321: 蓝桥杯2025年第十六届省赛真题-画展布置 时间限制: 2s 内存限制: 192MB 提交: 673 解决: 130 题目描述 画展策展人小蓝和助理小桥为即将举办的画展准备了 N 幅画作,其艺术价 值分别为 A1, A2, . . . , AN。他们需要从这 N 幅画中挑选 M 幅,并…...
Excel 查询之 iNDEX与MATCH组合
在Excel日常工作中,数据查询是最常见的操作之一。虽然VLOOKUP函数广为人知,但它有一个明显的局限性——要求查询值必须位于返回值的左侧。今天我要介绍一个更灵活、更强大的组合:INDEX和MATCH函数。 为什么选择INDEXMATCH? VLOO…...
【Leetcode 每日一题 - 补卡】1128. 等价多米诺骨牌对的数量
问题背景 给你一组多米诺骨牌 d o m i n o e s dominoes dominoes。 形式上, d o m i n o e s [ i ] [ a , b ] dominoes[i] [a, b] dominoes[i][a,b] 与 d o m i n o e s [ j ] [ c , d ] dominoes[j] [c, d] dominoes[j][c,d] 等价 当且仅当 ( a c a c …...
【Elasticsearch入门到落地】12、索引库删除判断以及文档增删改查
接上篇《11、RestClient初始化索引库》 上一篇我们完成了使用RestHighLevelClient创建索引库的代码实现,本篇将讲解如何判断索引库是否存在并删除它,以及如何对索引库中的文档进行增删改查操作。 一、索引库判断与删除 在操作索引库时,有时…...
36、C#中的⽅法声明参数关键字params,ref,out的意义及⽤法
在C#中,params、ref 和 out 是方法声明中用于修饰参数的关键字,它们各自有不同的用途和语义。以下是它们的详细说明和用法: 1、 params 关键字 意义 params 允许方法接受可变数量的参数,这些参数会被编译为一个数组。适用于参数…...
DEX平台引领风尚 XBIT让数字资产回归简单与透明
近日,全球加密货币市场持续升温,Dex 交易平台成为众多投资者关注焦点,其中XBIT去中心化交易所平台凭借独特优势脱颖而出。 图片来源:币界网 在当今加密货币领域,交易平台的安全性与便捷性至关重要。XBIT去中心化交易所…...
基于Python+MongoDB猫眼电影 Top100 数据爬取与存储
前言:从猫眼电影排行榜页面(TOP100榜 - 猫眼电影 - 一网打尽好电影 )爬取 Top100 电影的电影名称、图片地址、主演、上映时间和评分等关键信息,并将这些信息存储到本地 MongoDB 数据库中,🔗 相关链接Xpath&…...
Linux文件复制命令精要指南:cp与scp详解
大家好,欢迎来到程序视点!我是你们的老朋友.小二! Linux文件复制命令精要指南:cp与scp详解 一、cp命令(本地文件复制) 核心功能 复制文件/目录到目标路径,支持重命名及批量操作。 关键参数 …...
Qt实现网页内嵌
文章目录 一、环境准备 二、代码实现 三、测试 一、环境准备 首先,确保你的Qt安装包含了QtWebEngine模块。我的Qt是5.12.9并且使用MSVC来编译项目。在项目文件中需要添加以下配置,其中在Qt中配置MSVC,建议去看看这位大佬的博客:…...
Kotlin中 StateFlow 或 SharedFlow 或 LiveData的区别
在Android开发中,处理数据流是常见的需求,特别是在UI更新和数据共享方面。Kotlin提供了几种不同的工具来帮助开发者实现这一需求,包括StateFlow、SharedFlow和LiveData。每种工具都有其特点和使用场景,下面我们将逐一比较它们的区…...
jupyter notebook运行简单程序
一. 使用 cmd 创建虚拟环境 1.创建虚拟环境 (1)创建新的虚拟环境(本项目名设置为zhineng),并设置python版本 conda create -n zhineng python3.6 (2)查看python版本 python --version &am…...
查看Ubuntu版本
1. 使用 lsb_release 命令(推荐) lsb_release -a输出示例: ubuntuVM-0-6-ubuntu:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: 22.04 Codename: jamm…...
《算法导论(第4版)》阅读笔记:p7-p8
《算法导论(第4版)》学习第 5 天,p7-p8 总结,总计 2 页。 一、技术总结 1.算法解决什么问题? DNA测序问题(Dynamic Programming, 动态规划),寻找路径问题,加密问题,利益最大化问题(linear programming, …...
AI笔记-1
Halide Perovskites (HPs) 卤化物钙钛矿 卤化物钙钛矿(HPs)已被 公认为 光伏和发光器件 中最有前途的材料之一 在本观点中,我们将探讨钙钛矿的定义,主要聚焦于由 较重卤素(Cl、Br和I)组成的钙钛矿亚群&…...
【C++重载操作符与转换】成员访问操作符
目录 一、点操作符(.) 1.1 基本概念 1.2 点操作符不能被重载 二、箭头操作符(->) 2.1 基本概念 2.2 箭头操作符的重载 2.3 箭头操作符重载的特殊规则 三、成员指针操作符(.*)和指向成员指针的箭…...
java单元测试代码
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import java.util.List;public class UserServiceTest {Testpublic void testSearchUserByTags() {// 模拟标签列表List<String> tagNameList List.of("tag1", "…...
Vue中的过滤器参数:灵活处理文本格式化
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
【神经网络与深度学习】深度学习中的生成模型简介
深度学习中的生成模型 openai 的一个古早介绍 引言 深度学习中的生成模型能够学习数据分布并生成新数据,在人工智能的多个领域中都有重要应用。不同类型的生成模型在原理和结构上各有特点,适用于不同的任务,如图像生成、文本生成和时间序列…...
Docker(三):DockerFile
一、DockerFile介绍 1、DockerFile 介绍 DockerFile 是一种能够被Docker 程序解释的文件(一般为了方便理解称之为“剧本”)。 DockerFile 由一条一条的指令组成,并且有自己的书写格式和支持的命令。当我们需要在容器 镜像中指定自己额外的需…...
使用OpenCV 和 Dlib 实现疲劳检测
文章目录 引言1.相关技术介绍2. 系统原理2.1 眼睛纵横比(EAR)算法2.2 系统工作流程 3.代码解析3.1 关键函数说明3.2 主循环逻辑 4.实际应用效果5.参数调优建议6.总结 引言 疲劳驾驶是交通事故的主要原因之一。本文将介绍如何使用Python和计算机视觉技术构建一个实时疲劳驾驶检…...
Python格式化字符串的四种方法
Python格式化字符串的四种方法 1.使用 % 运算符 %s 是一个字符串的占位符,而 “World” 是替换它的值 print("Hello, %s!" % "World") # 输出:Hello, World!你可以使用多个占位符 注意:多个变量占位,变量要…...
蓝桥杯 18. 积木
积木 原题目链接 题目描述 小明用积木搭了一个城堡。为了方便,小明使用的是大小相同的正方体积木,并将其搭建在一个 n 行 m 列的方格图上。每个积木占据方格图中的一个小格子。 小明的城堡是立体的,可以将积木垒在其他积木上。当某个格子…...
解决因字段过长使MYSQL数据解析超时导致线上CPU告警问题
1.首先发生CPU告警 占有率到98.8% 2.DBA找到最终的原因是这条SQL导致 select * from trade_order_sku_071 where order_id in ( P760205793431071471 ) and user_id in ( 67d9158c000000000e0134ff );” 3.观察系统指标,发现CPU和网络同时飙升,同时网络…...
Python中的客户端和服务端交互的基本内容
目录 网络协议 网络的通信方式 需要安装的组件和需要导入的包模块 安装的组件 导入包模块 如何创建客户端 如何创建服务端 网络协议 IPV4:是互联网协议的第四版,也是目前广泛使用的网络协议。它使用32位地址格式,理论上可以提供约43亿…...
Compose 中使用 WebView
在 Jetpack Compose 中,我们可以使用 AndroidView 组件来集成传统的 Android WebView。以下是几种实现方式: 基础 WebView 实现 Composable fun WebViewScreen(url: String) {AndroidView(factory { context ->WebView(context).apply {// 设置布局…...
PyCharm 安装教程
## 简介 PyCharm 是由 JetBrains 公司开发的一款优秀的 Python 集成开发环境(IDE),提供了代码分析、图形化调试器、集成测试器和版本控制系统等功能。PyCharm 有两个版本: - **专业版(Professional)**&am…...
基于MATLAB的图像色彩识别项目,彩色图像矩阵识别
一、项目背景 在本次IP Lab项目中,我们模拟了游戏“Lego’s Life of George”的玩法。游戏要求玩家在屏幕短暂展示图像后,凭借记忆重建乐高结构。我们面临的任务是处理一系列存在各种缺陷的图像,像噪声干扰、旋转以及投影问题等,…...
springboot应用大批量导出excel产生oom处理措施实践(适用于poieasyexcel)
一、背景: 在某些信息管理场景中,存在大批量导出需求,例如一次性导出10~100w行excel数据,如果不做特殊的处理,很容易导致Out Of Memory,特别是堆内存溢出。 oom复现 例如修改IDEA运行配置,VM…...
OpenCV 第6课 图像处理之几何变换(透视)
1、透视变换 2、数学公式 3、透视变换矩阵的生成 4、图像变换函数 5、例程 1、透视变换 OpenCV中的透视变换是一种几何变换,用于将图像从一个平面映射到另一个平面。它通过4个对应点之间的映射关系来变换图像,使得变换后的图像看起来像从不同角度观看。透视变换常用于图像…...
SpringMVC 框架核心知识点详解与实战
文章目录 引言一、响应数据和结果视图1.1 开发环境搭建1.2 返回值类型1.3 转发与重定向1.4 响应 json 数据1.5 静态资源处理 二、SpringMVC 实现文件上传2.1 准备工作2.2 传统方式文件上传 三、SpringMVC 的异常处理3.1 异常处理思路3.2 实现异常处理 四、SpringMVC 框架中的拦…...
Web前端开发:Grid 布局(网格布局)
一、Grid 是什么? Grid(网格布局) 是 CSS 中一种二维布局系统,可以同时控制行和列的排列方式。相比传统的浮动布局和 Flexbox(一维布局),Grid 更适合构建复杂的网页结构(比如仪表盘、…...
时间同步服务
时间同步:多主机协作工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协议,日志,集群等,利用NTP(Network Time Protocol )协议使网络中的各个计算机 时间达到同步。目前NTP协议…...
全球化电商平台Azure云架构设计
业务需求: 支撑全球三大区域(北美/欧洲/亚洲)用户访问,延迟<100ms处理每秒50,000订单的峰值流量混合云架构整合本地ERP系统全年可用性99.99%满足GDPR和PCI DSS合规要求 建议在实施时使用Azure Landing Zone框架进行部署&…...