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

算法训练营第三十天 | 动态规划 (三)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、01背包问题理论基础(一)
    • 动态规划五部曲
      • 确定dp数组以及下标的含义
      • 确定递推公式
      • 初始化dp数组
      • 确定遍历顺序
  • 二、01背包问题理论基础(二)
    • 动态规划五部曲
      • 确定dp数组以及下标的含义
      • 确定递推公式
      • 初始化dp数组
      • 确定遍历顺序
      • 代码
  • 三、Leetcode 416. 分割等和子集
    • 动态规划五部曲
      • 确定dp数组以及下标的含义
      • 确定递推公式
      • 初始化dp数组
      • 确定遍历顺序
    • 代码


一、01背包问题理论基础(一)

有n件物品和一个最多能背重量为 w 的背包。第 i 件物品的重量是 weight[i] ,得到的价值是 value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

动态规划五部曲

确定dp数组以及下标的含义

这里我们使用二维数组 dp[i][j]。其中 i 代表物品,j 代表背包。

dp 数组表示的含义是,当背包重量为 j 时,我们从 0i 个物品中进行取舍,能获得的最大价值。

本题中 dp 数组的定义十分关键!

确定递推公式

当我们背包重量为 i 的时候,我们一共有两种情况。

  • 背包重量小于物品 i 的重量时,我们无法放入物品,所以我们直接继承上一个状态 dp[i-1][j] ,也就是当背包重量为 j 时,我们从 0i-1 个物品中进行取舍,能获得的最大价值。
  • 当背包重量大于物品 i 的重量时,我们有两种选择,考虑是否选择将物品 i 放入背包内。
  1. 不将物品 i 放入背包内,此时我们也是继承上一个状态 dp[i-1][j]
  2. 将物品 i 放入背包内,此时的状态应为:当前背包容量减去物品 i 的重量在 0i-1 个物品中任意取的最大值再加上物品 i 的价值。,即 dp[i][j] = dp[i - 1][j - weight[i]] + value[i]

我们的目的是获得最大的价值,所以当背包重量大于物品 i 的重量时,我们对两种情况取最大值 max(dp[i - 1][j - weight[i]] + value[i], dp[i-1][j])

最后得出递推公式:

if weight[i-1] > j:dp[i][j] = dp[i-1][j]
else:dp[i][j] = max[dp[i - 1][j - weight[i]] + value[i], dp[i-1][j]]

初始化dp数组

将二维数组理解成为一个表格,行代表物品,列代表背包重量。

我们当前要计算的表格是通过左上方的表格递推出来的,所以我们要对第一列和第一行进行初始化。

第一行代表的是,当背包重量为 j 时,对第一个物品进行取舍,我们能得到的最大价值。
这时我们只有一个物品可以考虑,所以向右遍历,当物品的重量大于等于背包重量时,表示这个物品可以放进背包内,这时右面的表格就初始化为第一个物品的价值。左面的表格就初始化为 0

第一列代表的是,当背包重量为 0 时,对前 i 个物品进行取舍能获得的最大价值。背包重量是 0,当然什么物品也放不进去,所以第一列全部初始化为 0

其余位置都是通过递推公式计算得出,所以初始值无所谓,全部初始化为 0

确定遍历顺序

很显然,我们需要两层 for 循环,那么到底是先遍历物品还是先遍历背包呢?

本题中先遍历背包和先遍历物品都可以!

  • 先遍历物品的方式更符合动态规划的自底向上的求解思路。先考虑只有一个物品时,对于不同背包容量的最大价值,然后逐步增加物品数量,计算在当前物品加入的情况下,不同背包容量的最大价值。这种方式可以清晰地看到状态是如何逐步转移和构建的
  • 先遍历背包的方式则是先固定背包容量,然后看在这个容量下,不同物品组合能达到的最大价值。虽然代码执行顺序不同,但最终也能正确计算出所有状态的最大价值。

代码:

n, bagweight = map(int, input().split())weight = list(map(int, input().split()))
value = list(map(int, input().split()))dp = [[0] * (bagweight + 1) for _ in range(n)]for j in range(weight[0], bagweight + 1):dp[0][j] = value[0]for i in range(1, n):for j in range(bagweight + 1):if j < weight[i]:dp[i][j] = dp[i - 1][j]else:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])print(dp[n - 1][bagweight])

二、01背包问题理论基础(二)

对于递归问题,有的时候我们当前状态只是通过前面几个状态进行推导,如果定义一个很长的数组,那么大部分的空间是被浪费的,滚动数组就是在空间上进行优化的一种方法。

举一个例子,斐波那契数列问题。我们的状态转移方程是 dp[i]=dp[i-1]+dp[i-2 。那么当前状态是由前两个状态推导而来,当我们推导 dp[3] 的时候,dp[0] 就已经用不到了,所以我们完全可以将推导得到的 dp[3] 放在 dp[0] 的位置,这样我们只开辟了三块空间就能完成整个计算,大大节省了空间,这就是滚动数组的思想。

对于 01 背包问题,我们当前层的状态都是由上一层的状态推导而来,所以也可以使用滚动数组来进行优化。

动态规划五部曲

确定dp数组以及下标的含义

dp[j] 表示背包重量为 weightp[j] 时,可以获得的最大价值。

确定递推公式

二维dp数组的递推公式为: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
一维dp数组,其实就上一层 dp[i-1] 这一层 拷贝的 dp[i]来。
所以在 上面递推公式的基础上,去掉i这个维度就好。

递推公式为:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);

以下为分析:

dp[j] 为 容量为j的背包所背的最大价值。

dp[j] 可以通过 dp[j] - weight[i]] 推导出来,dp[j] - weight[i]] 表示容量为 j - weight[i] 的背包所背的最大价值。

dp[j - weight[i]] + value[i] 表示 容量为 [j - 物品i重量] 的背包 加上 物品 i 的价值。(也就是容量为 j 的背包,放入物品 i 了之后的价值即:dp[j]

此时 dp[j] 有两个选择,一个是取自己 dp[j] 相当于 二维dp数组中的 dp[i-1][j] ,即不放物品 i,一个是取 dp[j - weight[i]] + value[i] ,即放物品 i ,指定是取最大的,毕竟是求最大价值。

初始化dp数组

dp数组初始化的时候,都初始为 0 即可。

确定遍历顺序

我们在二维dp数组的时候,遍历顺序没有要求,但是对于一维数组,这里有严格的顺序。
我们的滚动数组的思想是当前层是由上一层拷贝而来,而每一层代表的是物品,所以我们要先便遍历物品,再遍历背包重量。

在遍历背包重量的时候,一定要倒序遍历。

因为在某一层,当前数值是由他左面推导而来,如果我们正序遍历的话,新的值会覆盖掉原来的值,这样也就导致了某一个物品被多次使用。

代码

n, bagweight = map(int, input().split())
weight = list(map(int, input().split()))
value = list(map(int, input().split()))dp = [0] * (bagweight + 1)  # 创建一个动态规划数组dp,初始值为0dp[0] = 0  # 初始化dp[0] = 0,背包容量为0,价值最大为0for i in range(n):  # 应该先遍历物品,如果遍历背包容量放在上一层,那么每个dp[j]就只会放入一个物品for j in range(bagweight, weight[i]-1, -1):  # 倒序遍历背包容量是为了保证物品i只被放入一次dp[j] = max(dp[j], dp[j - weight[i]] + value[i])print(dp[bagweight])

三、Leetcode 416. 分割等和子集

给你一个 只包含正整数的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
示例:

输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5][11]

引用:

原文链接:https://programmercarl.com/0416.%E5%88%86%E5%89%B2%E7%AD%89%E5%92%8C%E5%AD%90%E9%9B%86.html
题目链接:https://leetcode.cn/problems/partition-equal-subset-sum/description/
视频讲解:https://www.bilibili.com/video/BV1rt4y1N7jE/

解决的问题是判断集合里能否出现总和为 sum / 2 的子集,这相当于有一个只能装重量为 sum / 2 的背包,商品就是集合里的数字,要判断这些数字能否把背包装满。
对于这些数字商品而言,它们只有一个维度,即重量等于价值。当这些数字能装满承载重量为 sum / 2 的背包时,背包的价值也为 sum / 2
所以此问题可转化为装满承载重量为 sum / 2 的背包时,其最大价值是多少,若最大价值是 sum / 2,就说明背包正好被商品装满,由于商品是数字且重量和价值相同,因此可以直接用 01 背包来解决这个问题。

动态规划五部曲

确定dp数组以及下标的含义

dp[j] 表示背包重量为 weightp[j] 时,可以获得的最大价值。

确定递推公式

背包问题的递推公式为:dp[j] = max(dp[j], dp[j - weight[i]] + value[i])
那么这里重量和价值在同一个维度,所以我们的递推公式改写为
dp[j]=max(dp[j], dp[j-nums[i]]+nums[i])

初始化dp数组

dp数组初始化的时候,都初始为 0 即可。

确定遍历顺序

和我们01背包问题中的一维滚动数组遍历方式一样。

代码

class Solution:def canPartition(self, nums: List[int]) -> bool:total_sum = sum(nums)if total_sum % 2 != 0:return Falsetarget = int(total_sum / 2)dp = [0] * (target+1)for i in range(len(nums)):for j in range(target, nums[i]-1, -1):dp[j] = max(dp[j], dp[j-nums[i]]+nums[i])return dp[target]==target

相关文章:

算法训练营第三十天 | 动态规划 (三)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、01背包问题理论基础&#xff08;一&#xff09;动态规划五部曲确定dp数组以及下标的含义确定递推公式初始化dp数组确定遍历顺序 二、01背包问题理论基础&#…...

Vue开发网站会有“#”原因是前端路由使用了 Hash 模式

前言 网站链接中出现 #&#xff08;井号&#xff09;是因为你的前端路由使用了 Hash 模式&#xff08;hash mode&#xff09;&#xff0c;这是一种前端框架&#xff08;如 Vue.js、React 等&#xff09;中常用的路由策略。 为什么有 # 比如 https://www.zimeinew.com/#/order…...

SpringBootTest报错

Unable to find a SpringBootConfiguration, you need to use ContextConfiguration or … 解决方案&#xff1a;在SpringTest注解中添加属性&#xff08;classes &#xff09;填写启动类 如我的启动类是MainApplication.class javax.websocket.server.ServerContainer no…...

【质量管理】现代TRIZ(萃智)理论概述

一、什么是TRIZ理论 TRIZ理论,即发明问题解决理论(Teoriya Resheniya Izobreatatelskikh Zadatch),是由前苏联发明家根里奇阿奇舒勒(Genrich S. Altshuller)于1946年创立的。它是一门基于知识的、面向人的发明问题解决系统化方法学。TRIZ理论通过研究大量的专利,总结出技…...

前端面经-JS篇(四)--回调地狱、promise异步编程、Proxy 与 Reflect 、模块化

一、回调地狱 回调地狱&#xff08;Callback Hell&#xff09;&#xff0c;也称为回调地狱&#xff0c;是指在 JavaScript 中处理多个嵌套的异步回调函数时&#xff0c;代码结构变得非常难以阅读和维护的现象。 为什么会出现回调地狱&#xff1f; 回调地狱通常出现在需要执行…...

【oql】spark thriftserver内存溢出,使用oql查询导致oom的sql

eclipse memory analyzer (mat)软件内的OQL实现查询内促信息。 帮助信息&#xff1a;软件Help/Help Contents/Querying Heap Objects (OQL) 就是查询SparkExecuteStatementOperation 的statement 字段。 select objects s.statement from org.apache.spark.sql.hive.thriftser…...

算法设计与分析(基础)

问题列表 一、 算法的定义与特征&#xff0c;算法设计的基本步骤二、 算法分析的目的是什么&#xff1f;如何评价算法&#xff0c;如何度量算法的复杂性&#xff1f;三、 递归算法、分治法、贪婪法、动态规划法、回溯法的基本思想方法。四、 同一个问题&#xff0c;如TSP&#…...

爬虫学习——使用HTTP服务代理、redis使用、通过Scrapy实现分布式爬取

一、使用HTTP服务代理 由于网络环境、网站对用户的访问速度的限制等原因&#xff0c;使得爬取过程会出现IP被封禁&#xff0c;故使用代理可提高爬取速度。在Scrapy中提供了一个HttpProxyMiddleware专门用于进行爬虫代理设置。在使用该代理进行爬取操作时&#xff0c;需要先在ba…...

机器学习中的特征存储是什么?我需要一个吗?

本质上,特征存储是一个专用存储库,用于系统地存储和排列特征,主要用于数据科学家训练模型,并帮助已训练模型的应用程序进行预测。它是一个关键的聚合点,人们可以在此构建或修改从各种数据源提取的特征集合。此外,它还支持从这些特征组中创建和增强新的数据集,以满足处于…...

【C语言】C语言中的联合体与枚举类型

前言 在C语言中&#xff0c;联合体&#xff08;union&#xff09;和枚举&#xff08;enum&#xff09;是两种非常实用但又常被忽视的自定义数据类型。它们在内存管理、代码可读性以及程序设计的灵活性方面都有着独特的优势。今天&#xff0c;我们就来深入探讨一下联合体和枚举…...

Golang编程拒绝类型不安全

button-chen/containertypesafe-go: 使用泛型包装标准库的容器 list、ring、heap、sync.Pool 和 sync.Map&#xff0c;实现类型安全 简介 在 Go 中&#xff0c;标准库提供了多种容器类型&#xff0c;如 list、ring、heap、sync.Pool 和 sync.Map。然而&#xff0c;这些容器默认…...

炼锌废渣提取钴工艺流程

炼锌废渣中提取钴的工艺流程通常结合湿法冶金技术&#xff0c;针对废渣中钴与锌、铁、铜等金属的复杂共生特性&#xff0c;通过预处理、浸出、除杂、钴富集及提纯等步骤实现钴的高效回收。以下是典型工艺流程的详细说明&#xff1a; 一、预处理 炼锌废渣&#xff08;如锌浸出…...

Restful接口学习

一、为什么RESTful接口是数据开发的核心枢纽&#xff1f; 在数据驱动的时代&#xff0c;RESTful接口如同数据高速公路上的收费站&#xff0c;承担着数据交换的核心职责。数据工程师每天需要面对&#xff1a; 异构系统间的数据交互&#xff08;Hadoop集群 ↔ 业务系统&#xf…...

仿真每日一练 | ABAQUS应力松弛

应力松弛是弹性材料在应力作用下产生微塑性变形&#xff0c;并且逐渐积累&#xff0c;在保持应变或者位移不变的前提下&#xff0c;表现为应力逐渐下降的现象。今天介绍一个ABAQUS中应力松弛的相关案例&#xff0c;模型如下所示&#xff1a; 图1 模型认识 回顾一下ABAQUS的有限…...

智能电网第4期 | 电力设备全连接组网方案:从有线到无线无缝融合

随着新型电力系统建设的加速推进&#xff0c;电力设备通信网络正面临前所未有的挑战与机遇。在变电站自动化、输电线路监测、配电房智能化等场景中&#xff0c;传统通信方案已难以满足日益增长的连接需求&#xff1a; 环境复杂性&#xff1a;变电站强电磁干扰环境下需保障微秒级…...

Python 面向对象练习

不多bb了,直接上代码吧。 from pprint import pprint class Course:total_course []def __init__(self,name,id):self.name nameself.id idself.is_select FalseCourse.total_course.append(self)def __repr__(self):return (f"{__class__.__name__}("f"学…...

无感字符编码原址转换术——系统内存(Mermaid文本图表版/DeepSeek)

安全便捷无依赖&#xff0c;不学就会无感觉。 笔记模板由python脚本于2025-04-24 20:00:05创建&#xff0c;本篇笔记适合正在研究字符串编码制式的coder翻阅。 学习的细节是欢悦的历程 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 P…...

机器学习--线性回归模型

阅读本文之前&#xff0c;可以读一读下面这篇文章&#xff1a;终于有人把线性回归讲明白了 0、引言 线性回归作为统计学与机器学习的入门算法&#xff0c;以其简洁优雅的数学表达和直观的可解释性&#xff0c;在数据分析领域占据重要地位。这个诞生于19世纪的经典算法&#xf…...

HTML应用指南:利用GET请求获取微博签到位置信息

在当今数字化时代&#xff0c;社交媒体平台已成为人们日常生活中不可或缺的一部分。作为中国最受欢迎的社交平台之一&#xff0c;微博不仅为用户提供了一个分享信息、表达观点的空间&#xff0c;还通过其丰富的功能如签到服务&#xff0c;让用户能够记录自己生活中的点点滴滴。…...

如何检测Python项目哪些依赖库没有使用

要检测Python项目中哪些依赖库未被使用&#xff0c;可以采用以下方法&#xff1a; 1. 使用静态分析工具 vulture&#xff1a;静态分析工具&#xff0c;检测未使用的代码和导入 pip install vulture vulture your_project/pyflakes&#xff1a;检查未使用的导入语句 pip ins…...

数据仓库建设全解析!

目录 一、数据仓库建设的重要性 1. 整合企业数据资源 2. 支持企业决策制定 3. 提升企业竞争力 二、数据仓库建设的前期准备 1. 明确业务需求 2. 评估数据源 3. 制定项目计划 三、数据仓库建设的具体流程 1.需求分析​ 2.架构设计​ 3.数据建模​ 4.ETL 开发​ 5.…...

magic-api连接达梦数据库

引入依赖 然后手写驱动 <dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.1.193</version></dependency> jdbc:dm://127.0.0.1:5236?schemaSALES...

向量检索新选择:FastGPT + OceanBase,快速构建RAG

随着人工智能的快速发展&#xff0c;RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;技术日益受到关注。向量数据库作为 RAG 系统的核心基础设施&#xff0c;堪称 RAG 的“记忆中枢”&#xff0c;其性能直接关系到大模型生成内容的精准度与…...

WHAT - 区分 Git PR 和 MR

文章目录 PR&#xff08;Pull Request&#xff09;MR&#xff08;Merge Request&#xff09;相同点总结 git pr 和 git mr 本质上都是「合并请求」的意思&#xff0c;但它们对应的是不同的平台术语。 PR&#xff08;Pull Request&#xff09; 平台&#xff1a;GitHub、Bitbuc…...

Axure复选框组件的深度定制:实现自定义大小、颜色与全选功能

在产品设计中&#xff0c;复选框作为用户与界面交互的重要元素&#xff0c;其灵活性直接影响到用户体验。本文将介绍如何利用Axure RP工具&#xff0c;通过高级技巧实现复选框组件的自定义大小、颜色调整&#xff0c;以及全选功能的集成&#xff0c;为产品原型设计增添更多可能…...

Datawhale AI春训营——用AI帮助老人点餐

详细内容见官网链接&#xff1a;用AI帮助老人点餐-活动详情 | Datawhale...

两段文本比对,高亮出差异部分

用法一:computed <div class"card" v-if"showFlag"><div class"info">*红色背景为已删除内容&#xff0c;绿色背景为新增内容</div><el-form-item label"与上季度比对&#xff1a;"><div class"comp…...

uniapp 仿小红书轮播图效果

通过对小红书的轮播图分析&#xff0c;可得出以下总结&#xff1a; 1.单张图片时容器根据图片像素定高 2.多图时轮播图容器高度以首图为锚点 3.比首图长则固高左右留白 4.比首图短则固宽上下留白 代码如下&#xff1a; <template><view> <!--轮播--><s…...

审计效率升级!快速匹配Excel报表项目对应的Word附注序号

财务审计报告一般包括&#xff1a;封面、报告正文、财务报表&#xff08;Excel工作簿&#xff09;以及对应的财务报表附注&#xff08;Word文档&#xff09;、事务所营业执照以及注册会计师证件。 在审计报告出具阶段&#xff0c;为各报表项目填充对应的Word附注序号&#xff…...

Python 中 `r` 前缀:字符串处理的“防转义利器”

# Python 中 r 前缀&#xff1a;字符串处理的“防转义利器” 在 Python 编程过程中&#xff0c;处理字符串时经常会遇到反斜杠 \ 带来的转义问题&#xff0c;而 r 前缀的出现有效解决了这一困扰。它不仅能处理反斜杠的转义&#xff0c;还在多种场景下发挥着重要作用。接下来&a…...

1️⃣6️⃣three.js_光源

16、光源 3D虚拟工厂在线体验 在 Three.js 中&#xff0c;环境光&#xff08;AmbientLight&#xff09;、点光源&#xff08;PointLight&#xff09;、平行光&#xff08;DirectionalLight&#xff09;、 聚光灯&#xff08;SpotLight&#xff09;、半球光&#xff08;Hemisph…...

AD16如何执行DRC检测

AD16如何执行DRC检测 DRC检测主要用来查看走线是否出现通断&#xff0c;以及是否出现短路。 1)、点击“Tools”---“Design Rule Check…” 2)、全部勾选 3)、勾选“Electrical”中的“Batch”选项&#xff0c;参与DRC检测 4)、勾选“Routing”中的“Batch”选项&#xff0c;…...

PostgreSQL性能优化实用技巧‌

PostgreSQL的性能优化需从‌索引设计、查询调优、参数配置、硬件资源‌等多维度入手。以下为实战中验证有效的优化策略&#xff0c;适用于高并发、大数据量等场 一、索引优化&#xff1a;精准加速查询‌ ‌1.选择正确的索引类型‌ ‌BRIN索引‌&#xff1a;对按时间或数值顺…...

Vue3 ref与props

ref 属性 与 props 一、核心概念对比 特性ref (标签属性)props作用对象DOM 元素/组件实例组件间数据传递数据流向父组件访问子组件/DOM父组件 → 子组件响应性直接操作对象单向数据流&#xff08;只读&#xff09;使用场景获取 DOM/调用子组件方法组件参数传递Vue3 变化不再自…...

SpringBoot | 构建客户树及其关联关系的设计思路和实践Demo

关注&#xff1a;CodingTechWork 引言 在企业级应用中&#xff0c;客户关系管理&#xff08;CRM&#xff09;是核心功能之一。客户树是一种用于表示客户之间层级关系的结构&#xff0c;例如企业客户与子公司、经销商与下级经销商等。本文将详细介绍如何设计客户树及其关联关系…...

SpringCloud——负载均衡

一.负载均衡 1.问题提出 上一篇文章写了服务注册和服务发现的相关内容。这里再提出一个新问题&#xff0c;如果我给一个服务开了多个端口&#xff0c;这几个端口都可以访问服务。 例如&#xff0c;在上一篇文章的基础上&#xff0c;我又新开了9091和9092端口&#xff0c;现在…...

Springboot3+ JDK21 升级踩坑指南

目录 GetMapping和 RequestBody 一起使用时&#xff0c;会把请求方式由GET变为POST 变更默认的httpClient feign 超时配置失效 GetMapping和 RequestBody 一起使用时&#xff0c;会把请求方式由GET变为POST 变更默认的httpClient 添加依赖 <dependency><groupId&g…...

Qt UDP组播实现与调试指南

在Qt中使用UDP组播(Multicast)可以实现高效的一对多网络通信。以下是关键步骤和示例代码: 一、UDP组播核心机制 组播地址:使用D类地址(224.0.0.0 - 239.255.255.255)TTL设置:控制数据包传播范围(默认1,同一网段)网络接口:指定发送/接收的物理接口二、发送端实现 /…...

idea连接远程服务器kafka

一、idea插件安装 首先idea插件市场搜索“kafka”进行插件安装 二、kafka链接配置 1、检查服务器kafka配置 配置链接前需要保证远程服务器的kafka配置里边有配置好服务器IP&#xff0c;以及开放好kafka端口9092&#xff08;如果有修改 过端口的开放对应端口就好&#xff09; …...

第十节:性能优化高频题-虚拟DOM与Diff算法优化

优化策略&#xff1a;同层比较、静态节点标记、最长递增子序列算法 Key的作用&#xff1a;精确识别节点身份 虚拟DOM与Diff算法深度优化策略解析 一、核心优化策略 同层比较机制 Diff算法仅对比同一层级的虚拟节点&#xff0c;避免跨层级遍历带来的性能损耗。 • 实现原理&am…...

vmware workstation的下载地址页面

Fusion and Workstation | VMware...

kubernetes》》k8s》》Dashboard

安装Dashboard 因为我的Kubernetes 版本是 v1.28.2 对应的 Dashboard V2.7.0 wget -O https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml # 因为默认是集群内访问的&#xff0c;需要追加 NodePort访问类型 vim recommended.yaml …...

软考:数值转换知识点详解

文章目录 1. 进制转换1.1 二进制&#xff08;Binary&#xff09;、八进制&#xff08;Octal&#xff09;、十进制&#xff08;Decimal&#xff09;、十六进制&#xff08;Hexadecimal&#xff09;之间的转换1.2 手动转换和计算方法1.3 使用编程语言进行进制转换 2. 数据类型转换…...

第15章:MCP服务端项目开发实战:性能优化

第15章:MCP服务端项目开发实战:性能优化 在构建和部署 MCP(Memory, Context, Planning)驱动的 AI Agent 系统时,性能和可扩展性是关键的考量因素。随着用户量、数据量和交互复杂度的增加,系统需要能够高效地处理请求,并能够平滑地扩展以应对更高的负载。本章将探讨 MCP…...

Windows申请苹果开发者测试证书Uniapp使用

注意事项 苹果设备,最好是iPhone XS以上,要不然下载不了Apple DeveloperopenSSL 要是V1版本的来生成证书,要不然HBuilder报错按步骤来,生成证书,生成标识符,添加测试设备,生成描述性文件注册苹果开发者账号 (如果有苹果账号直接登录) 苹果开发者官网 开通付费 点击右上…...

服务器数据恢复—NAS存储中raid5上层lv分区数据恢复案例

NAS数据恢复环境&#xff1a; QNAP TS-532X NAS设备中有两块1T的SSD固态硬盘和3块5T的机械硬盘。三块机械硬盘组建了一组RAID5阵列&#xff0c;两块固态硬盘组建RAID1阵列。划分了一个存储池&#xff0c;并通过精简LVM划分了7个lv。 NAS故障&#xff1a; 硬盘故障导致无法正常…...

uniapp跨平台开发---switchTab:fail page `/undefined` is not found

问题描述 在项目中新增了一个底部tab导航栏,点击底部tabBar,跳转失败,控制台打印错误信息switchTab:fail page /undefined is not found 排查思路 错误信息提示,switchTab跳转的页面路径变成了/undefined,排查新增的pages.json文件,发现pages,以及tabBar中的list均已经加入该导…...

详细讲解 QMutex 线程锁和 QMutexLocker 自动锁的区别

详细讲解 QMutex 线程锁和 QMutexLocker 自动锁的区别 下面我们详细拆解 Qt 中用于线程同步的两个核心类&#xff1a;QMutex 和 QMutexLocker。 &#x1f9f1; 一、什么是 QMutex&#xff1f; QMutex 是 Qt 中的互斥锁&#xff08;mutex&#xff09;类&#xff0c;用于防止多个…...

如何获取静态IP地址?完整教程

静态IP地址&#xff0c;因其固定不变的特性&#xff0c;在远程访问、服务器搭建、电商多开、游戏搬砖等场景中显得尤为重要。以下是获取静态IP地址的完整教程&#xff0c;涵盖家庭网络、企业网络和公网静态IP的配置方法&#xff1a; 一、什么是静态IP&#xff1f; 内网IP&…...

JavaScript 里创建对象

咱们来用有趣的方式探索一下 JavaScript 里创建对象的各种“魔法咒语”&#xff01; 想象一下&#xff0c;你是一位魔法工匠&#xff0c;想要在你的代码世界里创造各种奇妙的“魔法物品”&#xff08;也就是对象&#xff09;。你有好几种不同的配方和工具&#xff1a; 1. 随手…...