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

算法导论(动态规划)——简单多状态

算法思路(17.16)

  1. 状态表示
    在处理线性动态规划问题时,我们可以通过“经验 + 题目要求”来定义状态表示。通常有两种选择:

    • 以某个位置为结尾的情况;
    • 以某个位置为起点的情况。

    本题中,我们选择更常用的方式,以某个位置为结尾,并结合题目要求,定义状态表示如下:

    dp[i] 表示选择到位置 i 时的最长预约时长。

    但是在处理位置 ii 时,我们会面临“选择”或“不选择”的两种决策,因此需要将状态细分为:

    • f[i] 表示选择到 i 位置时,nums[i] 必选,此时的最长预约时长。f[i] 表示选择到 i 位置时,nums[i] 必选,此时的最长预约时长。
    • g[i] 表示选择到 i 位置时,nums[i] 不选,此时的最长预约时长。g[i] 表示选择到 i 位置时,nums[i] 不选,此时的最长预约时长。
  2. 状态转移方程
    由于状态表示涉及两个部分,我们分别分析这两个状态的转移关系:

    • 对于 f[i]:

      • 如果选择 nums[i] 必选,我们只需考虑位置 i−1 在不选择时的最长预约时长,因此:
      f[i]=g[i−1]+nums[i]
    • 对于 g[i]:

      • 如果 nums[i] 不选,则 i−1 位置可以选择或不选择,因此:
      g[i]=max⁡(f[i−1],g[i−1])
  3. 初始化
    本题的初始化相对简单,无需添加辅助节点。只需进行以下初始化即可:

    f[0]=nums[0],g[0]=0
  4. 填表顺序
    根据状态转移方程,填表顺序为“从左往右”,同时填充两个状态表。

  5. 返回值
    根据状态表示,最终返回的结果为:

    max⁡(f[n−1],g[n−1])

    这代表在处理到最后一个位置时的最长预约时长。

C++:

class Solution {
public:int massage(vector<int>& nums) {// 1. 创建⼀个 dp 表 // 2. 初始化 // 3. 填表 // 4. 返回值 int n = nums.size();if(n == 0) return 0; // 处理边界条件 vector<int> f(n);auto g = f;f[0] = nums[0];for(int i = 1; i < n; i++){f[i] = g[i - 1] + nums[i];g[i] = max(f[i - 1], g[i - 1]);}return max(f[n - 1], g[n - 1]);}
};

Java:

class Solution 
{public int massage(int[] nums) {// 1. 创建 dp 表 // 2. 初始化 // 3. 填表 // 4. 返回值 int n = nums.length;if(n == 0) return 0; // 处理边界条件 int[] f = new int[n];int[] g = new int[n];f[0] = nums[0];for(int i = 1; i < n; i++){f[i] = g[i - 1] + nums[i];g[i] = Math.max(f[i - 1], g[i - 1]);}return Math.max(g[n - 1], f[n - 1]);}
}

算法思路(213)

本问题是“按摩师”问题的变种,具体而言,它涉及一个“环形”模式,而不是单排模式。由于首尾房屋相连,这使得问题的处理方式有所不同。但我们可以将“环形”问题转化为两个单排问题的求解:

  1. 偷第一个房屋:在这种情况下,最高金额为 x。此时由于偷了第一个房屋,不能再偷最后一个房屋,因此只需在区间 [0,n−2] 内进行偷窃。

  2. 不偷第一个房屋:在这种情况下,最高金额为 y。此时可以偷最后一个房屋,因此只需在区间 [1,n−1] 内进行偷窃。

  3. 最终结果:通过计算上述两种情况的最大值,我们可以得到环形问题的最终结果。也就是说,问题已有效转化为求解两个单排问题的最大值:

    结果=max⁡(x,y)

C++:

class Solution 
{
public:int rob(vector<int>& nums){int n = nums.size();// 两种情况下的最⼤值 return max(nums[0] + rob1(nums, 2, n - 2), rob1(nums, 1, n - 1));}int rob1(vector<int>& nums, int left, int right){if(left > right) return 0;// 1. 创建 dp 表 // 2. 初始化 // 3. 填表 // 4. 返回结果 int n = nums.size();vector<int> f(n);auto g = f;f[left] = nums[left]; // 初始化 for(int i = left + 1; i <= right; i++){f[i] = g[i - 1] + nums[i];g[i] = max(f[i - 1], g[i - 1]);}return max(f[right], g[right]);}
};

Java:

class Solution 
{public int rob(int[] nums) {int n = nums.length;return Math.max(nums[0] + rob1(nums, 2, n - 2), rob1(nums, 1, n - 1));}public int rob1(int[] nums, int left, int right){if(left > right) return 0;// 1. 创建 dp 表 // 2. 初始化 // 3. 填表 // 4. 返回 int n = nums.length;int[] f= new int[n];int[] g= new int[n];f[left] = nums[left];for(int i = left + 1; i <= right; i++){f[i] = g[i - 1] + nums[i];g[i] = Math.max(g[i - 1], f[i - 1]);}return Math.max(f[right], g[right]);}
}

算法思路(740)

本题实质上是“按摩师”问题的变种。注意到题目描述,当选择某个数字 x 时,x−1 和 x+1 的数值不能被选择。这与“按摩师”问题中的逻辑相似:选择位置 i 的金额后,不能选择位置 i−1 和 i+1 的金额。

因此,我们可以通过以下步骤解决这个问题:

  1. 创建哈希数组

    • 根据题目中的数据范围,创建一个大小为 10001 的哈希数组 hash。
    • 遍历数组 nums,将数组中每个元素 x 的值累加到哈希数组的对应位置 hash[x] 上。有了这个哈希数组,我们能将相同金额的数值进行聚合。
  2. 应用按摩师策略

C++:

class Solution {
public:int deleteAndEarn(vector<int>& nums) {const int N = 10001;// 1. 预处理 int arr[N] = { 0 };for(auto x : nums) arr[x] += x;// 2. 在 arr 数组上,做⼀次 “打家劫舍” 问题 // 创建 dp 表 vector<int> f(N);auto g = f;// 填表 for(int i = 1; i < N; i++){f[i] = g[i - 1] + arr[i];g[i] = max(f[i - 1], g[i - 1]);}// 返回结果 return max(f[N - 1], g[N - 1]);}
};

Java:

class Solution 
{public int deleteAndEarn(int[] nums) {int n = 10001;// 1. 预处理 int[] arr = new int[n];for(int x : nums) arr[x] += x;// 2. dp// 创建 dp 表 int[] f = new int[n];int[] g = new int[n];// 初始化 f[0] = arr[0];// 填表 for(int i = 1; i < n; i++){f[i] = g[i - 1] + arr[i];g[i] = Math.max(f[i - 1], g[i - 1]);}// 返回值 return Math.max(f[n - 1], g[n - 1]);}
}

算法思路(091)

  1. 状态表示
    在处理线性动态规划问题时,我们可以通过“经验 + 题目要求”来定义状态表。通常有两种选择:

    • 以某个位置为结尾;
    • 以某个位置为起点。

    本题中,我们选择以某个位置为结尾的方法,并结合题目要求,定义状态表示为:

    • dp[i][0]:表示到达位置 ii 时,如果最后一个位置刷上“红色”,所需的最小花费;
    • dp[i][1]:表示到达位置 ii 时,如果最后一个位置刷上“蓝色”,所需的最小花费;
    • dp[i][2]:表示到达位置 ii 时,如果最后一个位置刷上“绿色”,所需的最小花费。
  2. 状态转移方程
    由于状态表示定义了三个状态,我们需要针对每个状态推导其转移方程:

    • 对于 dp[i][0](最后一个位置刷红色):

      dp[i][0]=min⁡(dp[i−1][1],dp[i−1][2])+costs[i−1][0]

      这里,我们需要获取位置 i−1i−1 刷蓝色或绿色情况下的最小花费,然后加上当前位置的红色刷费。

    • 对于 dp[i][1](最后一个位置刷蓝色):

      dp[i][1]=min⁡(dp[i−1][0],dp[i−1][2])+costs[i−1][1]
    • 对于 dp[i][2](最后一个位置刷绿色):

      dp[i][2]=min⁡(dp[i−1][0],dp[i−1][1])+costs[i−1][2]
  3. 初始化
    设定一个辅助节点来帮助我们初始化工作。当我们添加一个辅助节点时,需确保两个关键点:

    • 辅助节点内的值:应保证能正确初始化后续状态表;
    • 下标映射关系:在本题中,我们添加的辅助节点默认设置为 0。
  4. 填表顺序
    根据状态转移方程,应按顺序“从左往右”填充这三个状态表。

  5. 返回值
    最终,我们需要返回在所有颜色情况下的最小花费:

    min⁡(dp[n][0],dp[n][1],dp[n][2])

    这里 nn 表示房屋的数量,确保能够在最后一个位置中选择刷上任一颜色的最小花费。

C++:

class Solution {
public:int minCost(vector<vector<int>>& costs) {// dp[i][j] 第i个房⼦刷成第j种颜⾊最⼩花费 int n = costs.size();vector<vector<int>> dp(n + 1, vector<int>(3));for (int i = 1; i <= n; i++) {dp[i][0] = min(dp[i - 1][1], dp[i - 1][2]) + costs[i - 1][0];dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]) + costs[i - 1][1];dp[i][2] = min(dp[i - 1][1], dp[i - 1][0]) + costs[i - 1][2];}return min(dp[n][0], min(dp[n][1], dp[n][2]));}
};

Java:

class Solution 
{public int minCost(int[][] costs) {// 1. 创建 dp 表 // 2. 初始化 // 3. 填表 // 4. 返回结果 int n = costs.length;int[][] dp = new int[n + 1][3];for(int i = 1; i <= n; i++){dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + costs[i - 1][0];dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + costs[i - 1][1];dp[i][2] = Math.min(dp[i - 1][0], dp[i - 1][1]) + costs[i - 1][2];}return Math.min(dp[n][0], Math.min(dp[n][1], dp[n][2]));}
}

算法思路(309)

  1. 状态表示
    在处理线性动态规划问题时,我们可以通过“经验 + 题目要求”来定义状态表。针对本问题,有三种状态:

    • 买入状态;
    • 可交易状态;
    • 冷冻期状态。

    因此,我们可以定义一个三维状态数组 dpdp:

    • dp[i][0]:表示在第 ii 天结束后处于“买入”状态时的最大利润;
    • dp[i][1]:表示在第 ii 天结束后处于“可交易”状态时的最大利润;
    • dp[i][2]:表示在第 ii 天结束后处于“冷冻期”状态时的最大利润。
  2. 状态转移方程
    我们需要根据规则推导状态转移方程:

    • 对于 dp[i][0](买入状态):

      • 可以由之前持有股票(保持不变)和今天购入股票(从可交易状态转变)得到:
      dp[i][0]=max⁡(dp[i−1][0],dp[i−1][1]−prices[i])

      其中,dp[i−1][1]−prices[i] 表示在可交易状态下买入股票的利润计算。

    • 对于 dp[i][1] (可交易状态):

      • 由之前在冷冻期不执行任何交易(停滞)和之前处于可交易状态不执行任何交易得到:
      dp[i][1]=max⁡(dp[i−1][1],dp[i−1][2])
    • 对于 dp[i][2] (冷冻期状态):

      • 由之前的持有状态卖出股票进入冷冻期得到:
      dp[i][2]=dp[i−1][0]+prices[i]
  3. 初始化
    第一行的状态初始化较为关键,因为后续状态均依赖于第一行值:

    • dp[0][0]:为了处于买入状态,必须在第一天买入股票,故:
    dp[0][0]=−prices[0]
    • dp[0][1]:什么也不做的情况下,利润为0:
    dp[0][1]=0
    • dp[0][2]:进入冷冻期时手中没有股票,利润为0:
    dp[0][2]=0
  4. 填表顺序
    根据状态转移方程,依次从第一天填充到最后一天,三个状态表需要一起更新,方向为“从左到右”。

  5. 返回值
    最后,我们需要返回在可交易状态或冷冻期状态下的最大利润值:

    max⁡(dp[n−1][1],dp[n−1][2])

C++:

class Solution 
{
public:int maxProfit(vector<int>& prices) {// 1. 创建 dp 表 // 2. 初始化 // 3. 填表 // 4. 返回结果 int n = prices.size();vector<vector<int>> dp(n, vector<int>(3));dp[0][0] = -prices[0];for(int i = 1; i < n; i++){dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);dp[i][1] = max(dp[i - 1][1], dp[i - 1][2]);dp[i][2] = dp[i - 1][0] + prices[i];}return max(dp[n - 1][1], dp[n - 1][2]);}
};

Java:

class Solution 
{public int maxProfit(int[] prices) {// 1. 创建 dp 表 // 2. 初始化 // 3. 填表 // 4. 返回值 int n = prices.length;int[][] dp = new int[n][3];dp[0][0] = -prices[0];for(int i = 1; i < n; i++){dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i]);dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][2]);dp[i][2] = dp[i - 1][0] + prices[i];}return Math.max(dp[n - 1][1], dp[n - 1][2]);}
}

相关文章:

算法导论(动态规划)——简单多状态

算法思路&#xff08;17.16&#xff09; 状态表示&#xff1a; 在处理线性动态规划问题时&#xff0c;我们可以通过“经验 题目要求”来定义状态表示。通常有两种选择&#xff1a; 以某个位置为结尾的情况&#xff1b;以某个位置为起点的情况。 本题中&#xff0c;我们选择更常…...

主成分分析(PCA)学习介绍及其高阶应用,金融风险分析

前言 主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;是统计学中一种重要的降维技术。它通过寻找数据中各特征之间的线性关系&#xff0c;来降低数据的维度&#xff0c;同时保留数据中的主要信息。PCA在机器学习、信号处理、图像处理等领域广泛应用&…...

利用 SSRF 和 Redis 未授权访问进行内网渗透

目录 环境搭建 ​编辑 发现内网存活主机 ​编辑 扫描内网端口 ​编辑 利用 Redis 未授权访问进行 Webshell 写入 步骤1&#xff1a;生成 payload 方式1&#xff1a;使用python生成 payload 方式二&#xff1a;使用 Gopher 工具 步骤 2&#xff1a;写入 Webshell&#xf…...

计算机网络和因特网

目录 1、什么是Internet&#xff1f; 1.1定义 1.2具体构成描述 2、什么是协议&#xff1f; 2.1 服务描述 2.2 网络协议 3、网络边缘 3.1 定义与组成 3.2 模式 3.3服务 4、接入网、物理媒介 4.1、宽带有线接入网技术 4.2、宽带无线接入网技术 5、网络核心&#xf…...

1.oracle修改配置文件

1.找到oracle的安装路径 D:\app\baozi\product\11.2.0\dbhome_1\NETWORK\ADMIN &#xff0c;修改下面的两个文件。如果提示没有权限&#xff0c;可以先把这两个文件复制到桌面&#xff0c;修改完后&#xff0c;在复制回来。 2.查看自己电脑的主机名&#xff0c; 右击 - 此电脑 …...

算法篇-------------双指针法

温馨提示&#xff1a;由于c语言在编程上更有优势&#xff0c;更加简洁&#xff0c;本文代码均为c代码&#xff0c;其他语言也可以 做&#xff0c;思想是不变的&#xff01; 1.应用场景 涉及到对数组的操作的题目&#xff0c;可以考虑双指针方法解决 2.基…...

Java关于包和final

什么是包&#xff1f; 包就是文件夹。用来管理等各种不同功能的java类&#xff0c;方便后期代码维护 包名的规则&#xff1a;公司域名反写包的作用&#xff0c;需要全部英文小写&#xff0c;见名知意。例如&#xff1a;com.pdsu.domain package com.pdsu.demain;public class…...

2025年华为HCIP题库分享

1101、 【拖拽题】OPSF邻接关系建立的过程中需要使用不同的报文&#xff0c;那么请分别将以下各个状态和该状态使用的报文联系起来。 答题格式为&#xff1a;11 22 33 43 正确答案&#xff1a;【12】【21】【24】【33】 解析&#xff1a; 建立邻居关系 RouterA的一个连接到广…...

49. 字母异位词分组

leetcode Hot 100系列 文章目录 一、核心操作二、外层配合操作三、核心模式代码总结 一、核心操作 先把每一个词都排序&#xff0c;拍完之后相同的就是字母异位词使用map&#xff0c;排序完的作为key&#xff0c;一个string数组作为value对于每一个词&#xff0c;排完序之后将…...

python 语法篇(一)

目录 1 正则匹配注意点11.1 正则匹配字符串写法1.2 创建re函数&#xff08;1&#xff09;re.search()--搜索第一个匹配项&#xff08;2&#xff09;re.match() - 从字符串开头匹配&#xff08;3&#xff09;re.findall() - 返回所有匹配项的列表&#xff08;4&#xff09;re.fi…...

机器学习ML极简指南

机器学习是现代AI的核心&#xff0c;从推荐系统到自动驾驶&#xff0c;无处不在。但每个智能应用背后&#xff0c;都离不开那些奠基性的模型。本文用最简练的方式拆解核心机器学习模型&#xff0c;助你面试时对答如流&#xff0c;稳如老G。 线性回归 线性回归试图通过"最…...

爬虫:网络请求(通信)步骤,http和https协议

电脑(浏览器)&#xff1a;www.baidu.com——url DNS服务器&#xff1a;IP地址标注服务器——1.1.38 DNS服务器返回IP地址给浏览器 浏览器拿到IP地址去访问服务器&#xff0c;返回响应 服务器返回给响应数据&#xff1a;html/css/js/jpg... html&#xff1a;文本 cs…...

【杂谈】-大型语言模型对具身人工智能发展的推动与挑战

大型语言模型对具身人工智能发展的推动与挑战 文章目录 大型语言模型对具身人工智能发展的推动与挑战1. 具身人工智能&#xff08;Embodied AI&#xff09;的内涵解析2. 大型语言模型的功能与作用3. 最新发展趋势4. 面临的挑战与考量因素5. 总结与展望 多年来&#xff0c;研发能…...

解决Beats Solo Buds 无法自动切换音频到耳机的问题

一、核心问题定位 现象矛盾点&#xff1a; Beats 耳机能连接但需手动切换音频 AirPods 可自动切换 → 排除 iOS 系统级故障 问题可能源于 Beats 固件兼容性 或 音频路由逻辑冲突 关键差异&#xff1a; 设备 芯片类型 自动切换协议支持 固件更新方式 AirPods 二代 H1芯片 原…...

MySQL基本查询

一.create 1.1 单行数据 全列插入 1.2 多行数据 指定列插入 1.3插入否则更新 1.4替换 二.Retrieve 2.1.SELECT列 2.1.1全列查询 2.1.2指定列查询 2.1.3查询字段为表达式 2.1.4 为查询结果指定别名 2.1.5结果去重 2.2WHERE 条件 2.2.1比较运算符 2.2.3逻辑运算符…...

面基:为什么不推荐用UUID作为主键

推荐回答结构&#xff1a; 技术理论层面分析 实际项目中的教训 优化改进过程 总结提炼认知 阐述回答 在阐述回答时&#xff0c;你可以从 UUID 本身特性带来的问题&#xff0c;以及在实际工作中遇到的具体场景和优化过程等方面展开&#xff0c;下面从这一思路&#xff0c;给…...

oracle 常用函数的应用

在使用开发中会经常遇到数据类型转换、显示系统时间等情况&#xff0c;需要使用函数来实现。通过函数来实现业务需求会非常的省事便捷&#xff0c;函数可以用在适当的dml语句和查询语句中。 Oracle 数据库中主要使用两种类型的函数&#xff1a; (1)单行函数&#xff1a;对每一个…...

ubuntu的ubuntu--vg-ubuntu--lv磁盘扩容

在我们安装ubuntu时&#xff0c;如果选择的是自动分区&#xff0c;就会按照逻辑卷的形式来分区&#xff0c;并且只分配100G其余的并不会被分配&#xff0c;这对我们大多数情况来说都是不合理的&#xff0c;所以&#xff0c;如何扩充呢 下面以一个小的案例来说明如何扩充 问题…...

鬼泣:升龙系统

文章目录 0.升龙系统&#xff1a;升龙斩使敌人浮空升龙斩使敌人浮空&#xff1a;设置flying状态&#xff0c;不会落下 1.升龙斩&#xff1a;S 攻击S按下calculate directionin range warp&#xff1a;前提是根运动打开蒙太奇拔刀收刀canCombo&#xff1a;接轻攻击连击 2. A.向…...

UI产品经理基础(四):用价值链视角来分析项目需求

用价值链视角来分析项目需求 作为产品经理&#xff0c;从价值链视角分析项目需求&#xff0c;能够更精准地定位价值创造的关键环节&#xff0c;确保资源投入与用户需求、商业目标深度匹配。以下是系统化的方法论与落地步骤&#xff0c;结合案例说明如何实现需求分析与用户认可…...

ThinkPHP的“get\post\put\delete“请求

首先了解一下这四个请求的区别 1.GET 请求 用途&#xff1a;获取资源&#xff08;只读操作&#xff0c;不修改服务器数据&#xff09;。 特点&#xff1a; 参数通过 URL 的 查询字符串&#xff08;Query String&#xff09; 传递&#xff08;例如 /book?id1&#xff09;。 数…...

目标检测的训练策略

在目标检测竞赛中&#xff0c;训练策略的优化是提高模型性能的关键。常用的训练策略包括数据预处理、数据增强、超参数调节、损失函数设计、正负样本采样、模型初始化和训练技巧等。以下是一些常见的训练策略&#xff1a; 1. 数据预处理与数据增强 数据归一化&#xff1a;对输…...

【JavaSE】小练习 —— 图书管理系统

【JavaSE】JavaSE小练习 —— 图书管理系统 一、系统功能二、涉及的知识点三、业务逻辑四、代码实现4.1 book 包4.2 user 包4.3 Main 类4.4 完善管理员菜单和普通用户菜单4.5 接着4.4的管理员菜单和普通用户菜单&#xff0c;进行操作选择&#xff08;1查找图书、2借阅图书.....…...

代码随想录Day29

Day29 动态规划part02 LeetCode 62.不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &…...

Python入门(3):语句

目录 1 基本语句 1.1 表达式语句 1.2 赋值语句 2 控制流语句 2.1 条件语句 2.2 循环语句 while循环&#xff1a; for循环&#xff1a; 2.3 流程控制语句 1. break语句&#xff1a;退出整个循环体 2. continue语句&#xff1a;只跳过本次循环&#xff0c;还会进…...

04_SQL概述及DDL

文章目录 一、关于SQL1.1、SQL概述1.2、SQL分类 二、数据库操作2.1、查看数据库2.2、切换数据库2.3、查询当前使用的数据库2.4、创建数据库2.5、查看数据库创建信息2.6、修改数据库2.7、删除数据库 三、表的操作3.1、数据类型3.1.1、数值类型3.1.2、字符串类型3.1.3、日期时间类…...

如何调整yarn.nodemanager.vmem-pmem-ratio参数?

调整 yarn.nodemanager.vmem - pmem - ratio 参数&#xff0c;可参考以下步骤&#xff1a; 打开YARN配置文件 找到 yarn - site.xml 文件&#xff0c;该文件通常位于Hadoop配置目录中&#xff0c;例如 /etc/hadoop/conf 或 /opt/module/hadoop - 3.1.3/etc/hadoop 。 找到并修改…...

【质量管理】质量的系统是预防,那以预防为主的质量管理系统包括什么?

“质量的系统是预防”这是克劳士比零缺陷管理四项基本原则的第二项基本原则。什么样的系统才是一个以预防为主的质量管理系统呢&#xff1f; 一个以预防为主的质量系统&#xff0c;必须包括三大方面&#xff1a;质量检验系统、质量保证系统、质量管理系统。 举个例子&#xff1…...

JavaScript 事件流与事件委托

目录 一、事件流、事件捕获与事件冒泡 1. 事件流&#xff08;Event Flow&#xff09; 2. 事件捕获&#xff08;Event Capturing&#xff09; 3. 事件冒泡&#xff08;Event Bubbling&#xff09; 4. 阻止事件冒泡 5. 事件解绑 6. 实际应用场景 二、事件委托 1. 什么是…...

RAG 优化 Embedding 模型或调整检索策略

在 RAG(Retrieval-Augmented Generation)系统中,优化 Embedding 模型和调整检索策略是提升检索质量的核心手段。以下是系统化的优化方法和实践指南: 一、优化 Embedding 模型 Embedding 模型的质量直接决定检索的召回率(Recall)和准确率(Precision)。优化方向包括: …...

Sentinel[超详细讲解]-3

主要讲解&#x1f680; - 基于QPS/并发数的流量控制 1、流控规则 流量控制&#xff08;Flow Control&#xff09;用于限制某个资源的访问频率&#xff0c;防止系统被瞬时的流量高峰冲垮。流量控制规则可以针对不同的资源进行配置&#xff0c;例如接口、方法、类等。 流量规则的…...

vue3使用i18n$t()无法获取数组和对象

今天在使用i18n进行国际化时&#xff0c;定义了数组和对象节点&#xff0c;但是用$t()无法获取&#xff0c;只能返回字符串值&#xff0c;查询相关材料&#xff0c;解决方案如下&#xff1a; 使用新的api替换即可&#xff0c;$t > $tm 参考文章(深表谢意)&#xff1a;vue -…...

机器学习的一百个概念(5)数据增强

前言 本文隶属于专栏《机器学习的一百个概念》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…...

(Kotlin)Android 高效底部导航方案:基于预定义 Menu 和 ViewPager2 的 Fragment 动态绑定实现

支持预定义 Menu 并绑定 Fragment&#xff0c;同时保留动态添加 Tab 的能力 BottomTabHelper.kt package smartconnection.com.smartconnect.home.utilimport android.content.Context import android.util.SparseArray import androidx.annotation.IdRes import androidx.fra…...

零基础入门多媒体音频(4)-GENIVIProjectAudioManager总览

GENIVI Project的AudioManager是一个专门设计用于汽车信息娱乐系统的音频管理解决方案。它负责管理和控制车辆内的音频源和音频路径&#xff0c;确保各种音频信号能够正确、高效地在车辆的音响系统中传输和播放。 AudioManager的核心功能包括音频源的管理、音频路径的控制以及音…...

DeepSeek协助优化-GTX750Ti文物显卡0.65秒卷完400MB float 音频512阶时域FIR

文章目录 1. 学习目的2. 阶段成果2.1 NVVP 性能探查2.2 测试编译环境2.3 测试样例 3 学习过程3.1 提问DeepSeek3.2 最终代码 4. 体会 1. 学习目的 最近在学习cuda&#xff0c;准备给我的taskBus SDR添加CUDA的模块支持&#xff0c;以便可以用PC机压榨山寨 B210那56M的带宽。 因…...

Embedding原理

Embedding&#xff08;嵌入&#xff09;是将离散符号&#xff08;如单词&#xff09;映射到连续向量空间的核心技术&#xff0c;其本质是语义的数学化表示。以下是其核心原理详解&#xff1a; 一、基础概念图解 graph LRA[单词猫] --> B[索引5] --> C[向量[0.2, -1.3,…...

Spark,配置hadoop集群1

配置运行任务的历史服务器 1.配置mapred-site.xml 在hadoop的安装目录下&#xff0c;打开mapred-site.xml&#xff0c;并在该文件里面增加如下两条配置。 eg我的是在hadoop199上 <!-- 历史服务器端地址 --> <property><name>mapreduce.jobhistory.address…...

人工智能大模型-数据预处理-文本数据预处理-图像数据预处理

文本数据预处理 大模型常用的文本数据类型 通用文本数据&#xff1a;网页、对话和图书资料等专用文本数据&#xff1a;多语言文本、科学文本、代码和指令等 构造方法 指令数据&#xff1a;指令(instruction)、输入(input)、输出(output)3部分组成 如果在instruction部分已…...

怎么使用嵌套虚拟环境实现项目部署之virtualenv嵌套conda绕开安装环境检测实现.venv部署facefusion

#工作记录 一、前言 嵌套虚拟环境本来是不建议的一种方法&#xff0c;这种嵌套虚拟环境的使用有一定特殊性&#xff0c;但在一些特别的使用场景下&#xff0c;嵌套虚拟环境的使用非常有用。 二、嵌套虚拟环境&#xff1a; &#xff08;一&#xff09;conda嵌套virtualenv 该…...

ansible介绍以及安装

一.ansible介绍 实现对IT基础设施的批量管控&#xff0c;加快效率&#xff0c;节省工作时间。 1.ansible特性 1.基于python开发&#xff0c;开源&#xff0c; 2.基于ssh协议工作。只需要确保ansible机器&#xff0c;与被控制机器能连通就好了&#xff0c; 3.no server 无…...

GPT-4o图像生成功能:技术突破与隐忧并存

2025年3月25日&#xff0c;OpenAI正式推出GPT-4o原生图像生成功能&#xff0c;宣称其实现了“文本到图像的终极跨越”。然而&#xff0c;这一被市场追捧的技术在短短72小时内便因用户需求过载触发限流&#xff0c;暴露出算力瓶颈与商业化矛盾的尖锐性。这场技术狂欢的背后&…...

Java 时间处理:轻松掌握 java.time 包

前言 在 Java 开发中&#xff0c;日期和时间处理一直是令人头疼的问题。传统的 Date​ 和 Calendar​ 类不仅复杂&#xff0c;还充满了线程安全和时区处理的坑。Java 8 引入的 java.time​ 包彻底改变了这一局面&#xff0c;带来了现代化、直观且功能强大的日期时间 API。 本…...

Vue项目中Vuex在util引入,断点存在default

示例代码 // src/store/index.js import Vue from vue; import Vuex from vuex; ……Vue.use(Vuex); export default new Vuex.Store({…… })// src/utils/index.js import store from /store // 导入默认导出的 store export async function getDict() {store.state.userInf…...

2025宁德时代测评Verify考什么?网申测评如何通过SHL笔试|附真题线上笔试考点、高分攻略、CATL新能源科技SHL测评宁德社招题目、面试攻略、求职建议

——职小豚 带你拆解新能源巨头招聘密码 一、宁德时代&#xff1a;新能源赛道「超级独角兽」 作为全球动力电池龙头&#xff0c;宁德时代&#xff08;CATL&#xff09;的江湖地位无需多言&#xff1a; 技术硬实力&#xff1a;麒麟电池、钠离子电池、无钴电池等黑科技加持&…...

谈谈常见的数据结构(如数组、链表、栈、队列、哈希表、树、图)及其应用场景

一、数组&#xff08;Array&#xff09; 定义&#xff1a;连续存储相同类型数据的线性结构&#xff0c;支持随机访问。 应用场景&#xff1a;列表渲染、数据缓存、算法处理 代码示例&#xff1a; // 数组基本操作 const arr [1, 2, 3, 4]; arr.push(5); // O(1) 平均时间复杂…...

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的 AOP:实现日志记录与性能监控

答应我&#xff0c;这篇一定要看到最后~&#xff01; <前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&a…...

【算法】快速幂

一、概念 快速幂是一种高效的指数运算&#xff0c;当指数范围过大时&#xff0c;通过位运算能够减少大量的计算次数 对于&#xff0c;我们通过将指数b转化为二进制数&#xff0c;就可以将分解为许多的&#xff08;其中i是指数b中对应位为1的位数&#xff09; 例如&#xff0…...

使用卷积神经网络识别MNIST数据集

卷积神经网络 卷积神经网络本质是共享权重稀疏链接的全连接网络 编写步骤 构建一个神经网络&#xff0c;步骤是几乎不变的&#xff0c;大概有以下几步 准备数据集 #更高级的CNN网络 import torch import torch.nn as nn import torch.nn.functional as F import torchvisi…...

JavaScript 中数组增删改查

在 JavaScript 中,数组是一种用来存储不同类型的值的数据结构。 增加数组元素: let arr = [1, 2, 3];// 在数组末尾添加元素 arr.push(4); console.log(arr); // [1, 2, 3, 4]// 在数组开头添加元素 arr.unshift(0); console.log(arr); // [0, 1, 2, 3, 4]// 在指定位置插…...