33.状态压缩动态规划
一、算法内容
1.简介
若元素数量比较小(不超过 20 20 20)时,想要存储每个元素取或不取的状态时, 可以借助位运算将状态压缩。 需要借助状态压缩过程的动态规划就是状态压缩 DP(很多地方会简称为状压 DP)。
取若干元素,也就是对应的位置记为 1 1 1,其余位置记为 0 0 0。例如,一共有 5 5 5 个元素 a , b , c , d , e a,b,c,d,e a,b,c,d,e ,我们分别用二进制的 1 , 10 , 100 , 1000 , 10000 1,10,100,1000,10000 1,10,100,1000,10000 表示这五个元素,则集合 { a , c , e } \{a,c,e\} {a,c,e} 可以用 ( 10101 ) 2 = 21 (10101)_2=21 (10101)2=21 来表示,而集合 { b , c , d } \{b,c,d\} {b,c,d} 可以用 ( 01110 ) 2 = 14 (01110)_2=14 (01110)2=14 表示。
对于元素个数为 n n n 的情况,其空间复杂度为 O ( 2 n ) O(2^n) O(2n) 。 如果不用状态压缩,那么我们状态需要开 5 5 5 维数组 d p [ 2 ] [ 2 ] [ 2 ] [ 2 ] [ 2 ] dp[2][2][2][2][2] dp[2][2][2][2][2] ,这样不仅使得代码的实现变的很复杂,并且当 n n n 的大小不一样的时候,状态维度也不一样,不是很容易实现。
2.子集与二进制
由于状压 DP 经常涉及到枚举子集的情况,所以我们介绍一种代码编写非常方便的枚举子集方法,也就是用二进制来模拟。这也是我们状压 DP 的基础。我们可以用二进制的一位表示集合对应某一元素的选取状态, 1 1 1 表示选取, 0 0 0 表示未选取。举个例子,我们拥有一个集合 { 0 , 1 , 2 , 3 , 4 , 5 , 6 } \{0,1,2,3,4,5,6\} {0,1,2,3,4,5,6}。那么二进制 0101101 0101101 0101101 就代表子集合 { 0 , 2 , 3 , 5 } \{0,2,3,5\} {0,2,3,5}。
而在集合选取尤其是动态规划的状态转移方程中,我们需要用位运算来帮助我们实现子集的枚举。例如: i & (1 << j)
就可以用来判断 i i i 的二进制展开所代表的集合里面,是否包含第 j j j 个元素;(1 << n) - 1
就可以表示所以元素都被选取的情况,也就是全集。
由二进制展开的情况不难发现,子集的大小是指数级别的,所以数据范围一定不会很大。因此这也是一条判断是否是状压 DP 的一大方式。
二、实例分析
1. P2622 关灯问题
(1)题目大意
现有 n n n 盏灯,以及 m m m 个按钮。每个按钮可以同时控制这 n n n 盏灯,按下 i i i 按钮对于第 j j j 盏灯,具体的操作结果如下:
- 如果 a i , j a_{i,j} ai,j 为 1 1 1,那么当这盏灯开了的时候,把它关上,否则不管;
- 如果 a i , j a_{i,j} ai,j 为 − 1 -1 −1,如果这盏灯是关的,那么把它打开,否则也不管;
- 如果 a i , j a_{i,j} ai,j 为 0 0 0,无论这灯是否开,都不管。
现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部关掉。
(2)题目分析
-
本题灯只有开关两种状态,所以可以用 1 1 1 表示开灯状态, 0 0 0 表示关灯状态
-
因此可以用一个长度为 n n n 的二进制数唯一地表示每个状态
-
题目提供的开关灯方式即可作为一个状态转移的方式,我们以灯全开也就是
(1 << n) - 1
为起点 -
如果我们设当前状态为
now
,则now & (1 << j)
就可以判断 j j j 这个灯是否是打开状态。 -
那么我们就可以对于每个状态遍历所有开关的情况。对于
a[i][j]
来说,我们有状态转移如下所示:a[i][j] = 1 && (now & (1 << j))
:now ^= (1 << j)
a[i][j] == -1 && !(now & (1 << j))
:now |= (1 << j)
-
我们用迷宫问题的思路,设全开为迷宫入口,全关为迷宫出口。记录每个状态的步数,即可在第一次找到出口的时候退出程序。
(3)正解程序
#include <iostream>
#include <queue>using namespace std;
typedef long long ll;
struct node
{ll status;ll step;
};
ll n, m;
ll a[110][20];
bool vis[2010];
ll bfs()
{queue<node> q;q.push((node) {(1 << n) - 1, 0});vis[(1 << n) - 1] = true;while(!q.empty()){node u = q.front();q.pop();if(u.status == 0)return u.step;for(ll i = 0; i < m; i++){ll now = u.status;for(ll j = 0; j < n; j++)if((a[i][j] == 1 && (now & (1 << j))) || (a[i][j] == -1 && !(now & (1 << j))))now ^= (1 << j);if(!vis[now]){q.push((node){now, u.step + 1});vis[now] = true;}}}return -1;
}
int main()
{cin >> n >> m;for(ll i = 0; i < m; i++)for(ll j = 0;j < n; j++)cin >> a[i][j];cout << bfs() << endl;return 0;
}
2. P1441 砝码称重
(1)题目大意
现有 n n n 个砝码,重量分别为 a i a_i ai,在去掉 m m m 个砝码后,问最多能称量出多少不同的重量(不包括 0 0 0)。砝码只能放在其中一边。
(2)题目分析
- 设我们当前选择的砝码集合是 T T T,它能称出的重量的集合为 d p dp dp
- 我们设 M M M 对应的二进制表示为 ( m t , m t − 1 , . . . , m 0 ) 2 (m_t,m_{t-1},...,m_0)_2 (mt,mt−1,...,m0)2,其中 m i = 1 m_i=1 mi=1 表示 i i i 这个重量是可以被称出来的;
- 那么再添加一个砝码之后,能称出的重量就是
dp |= (dp << w[i])
(3)正解代码
#include <iostream>
#include <cstdio>
#include <bitset>using namespace std;
typedef int ll;
const ll maxn = 30;
ll n, m, a[maxn];
ll my_count(ll x)
{ll res = 0;while(x){res += (x & 1);x >>= 1;}return res;
}
int main()
{scanf("%d%d", &n, &m);m = n - m;for(ll i = 0; i < n; i++)scanf("%d", &a[i]);ll ans = 0;for(ll i = 1; i < (1 << n); i++){if(my_count(i) != m)continue;bitset<2010> dp;dp[0] = 1;for(ll j = 0; j <= n - 1; ++j)if(i & (1 << j))dp = dp | dp << a[j];ans = max(ans, (ll)dp.count());}printf("%d\n", ans - 1);return 0;
}
3. P1896 互不侵犯
(1)题目大意
在 N × N N\times N N×N 的棋盘里面放 K K K 个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 8 8 8 个格子。
(2)题目分析
-
有由题目意思可以知道,每个格子只有能摆放和不能拜访两种状态,所以我们可以用状态压缩的方式来表示整个棋盘
-
现在考虑应该用哪些内容来完整的表示棋盘。因为国王会影响上下行,所以我们可以考虑从上往下遍历状态,这样就只需要考虑每一行的上一行是否会发生冲突即可。
-
考虑每一行的合法状态,因为对于同一行来说,不能有两个连续的格子存在国王,那也就是说对于状态 i i i 来说,需要满足
i & (i << 1) == 0
。 -
设总共有 M a x Max Max 种合法状态,如果我们设当前行的状态为 k k k,上一行的状态为 x x x。那么它们应该满足以下关系:
(suit[k] & suit[x]) == 0 && ((suit[k] << 1) & suit[x]) == 0 && ((suit[k] >> 1) & suit[x]) == 0
。 -
因此设 d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k] 表示在前 i i i 行中已经放置 j j j 个国王,第 i i i 行的状态为第 k k k 种合法状态时,题目的合法方案数。
-
如果我们设置前 i − 1 i-1 i−1 行的第 i − 1 i-1 i−1 行为第 x x x 种合法状态,则我们有状态转移方程:
d p [ i ] [ j ] [ k ] = ∑ x = 1 M a x d p [ i − 1 ] [ j − n u m [ k ] ] [ x ] ; dp[i][j][k]=\sum_{x=1}^{Max}dp[i - 1][j - num[k]][x]; dp[i][j][k]=x=1∑Maxdp[i−1][j−num[k]][x];其中 n u m [ k ] num[k] num[k] 表示状态 k k k 的国王数量。
(3)正解代码
#include <iostream>
#include <algorithm>
#include <cstdio>using namespace std;
typedef long long ll;
ll n, K;
ll suit[1 << 10], Max = 0;
ll num[1 << 10];
ll dp[100][100][1 << 10];
void prework()
{for(ll i = 0; i <= (1 << n) - 1; i++)if((i & (i << 1)) == 0)suit[++Max] = i;for(ll i = 1; i <= Max; i++){ll tmp = suit[i];while(tmp){num[i] += (temp & 1);tmp >>= 1;}}
}
int main()
{scanf("%lld%lld", &n, &K);prework();dp[0][0][1] = 1;for(ll i = 1; i <= n; i++)for(ll j = 0; j <= K; j++)for(ll k = 1; k <= Max; k++)for(ll x = 1; x <= Max; x++)if(j - num[k] >= 0 && (suit[k] & suit[x]) == 0 && ((suit[k] << 1) & suit[x]) == 0 && ((suit[k] >> 1) & suit[x]) == 0)dp[i][j][k] += dp[i - 1][j - num[k]][x];ll ans = 0;for(ll i = 1; i <= Max; i++)ans += dp[n][K][i];printf("%lld", ans);return 0;
}
三、作业
1.绿题
P1441 砝码称重
P1879 [USACO06NOV] Corn Fields G
2.蓝题
P1896 [SCOI2005] 互不侵犯
P2704 [NOI2001] 炮兵阵地
P2831 [NOIP 2016 提高组] 愤怒的小鸟
P3959 [NOIP2017 提高组] 宝藏
相关文章:
33.状态压缩动态规划
一、算法内容 1.简介 若元素数量比较小(不超过 20 20 20)时,想要存储每个元素取或不取的状态时, 可以借助位运算将状态压缩。 需要借助状态压缩过程的动态规划就是状态压缩 DP(很多地方会简称为状压 DP)…...
WSL 中 nvidia-smi: command not found的解决办法
前言 在使用基于 Linux 的 Windows 子系统(WSL)时,当我们执行某些操作后,可能会遇到输入 nvidia-smi 命令却无法被系统识别的情况。 例如,在终端中输入nvidia-smi 后,系统返回提示 -bash: nvidia-smi: co…...
Linux 进程控制
文章目录 1. 进程创建1.1 fork1.2 写时拷贝 2.进程终止2.1 退出码2.2 进程如何返回退出码 3. 进程等待3.1 wait3.1.1 阻塞等待3.1.2 退出码与退出信号 3.2 waitpid 1. 进程创建 1.1 fork 我们可以使用fork函数来创建子进程,创建子进程后,父子进程之间就…...
使用MobaXterm远程登录Ubuntu系统:SSH服务配置教程
一、MobaXterm介绍 MobaXterm官网:https://mobaxterm.mobatek.net/ MobaXterm类似于Xshell,是一个工具箱,功能比Xshell多。 直接去官网下载安装就可以,本文主要介绍开启Ubuntu的ssh服务,并通过MobaXterm实现远程登录…...
直线模组精度测试的标准是什么?
直线模组的精度测试是确保其性能和稳定性的重要环节。那么,大家知道直线模组精度测试的标准是什么吗? 1、定位精度:以最大行程为基准长度,用从基准位置开始实际移动的距离与指令值之间的最大误差的绝对值来表示。一般来说…...
RK3568 Debian调试记录
文章目录 1、环境介绍2、前言3、debian目录结构3.1、脚本调用顺序 4、编译debian4.1、构建debian编译所需的环境4.2、编译debian4.3、打包 5、系统启动6、debian适配6.1、新增板级配置单6.2、USB6.3、Wi-Fi / BT6.4、屏幕旋转6.5、触摸旋转6.6、时钟 7、测试8、总结 1、环境介绍…...
来自 Bisheng 关于微调的内容总结
来自 Bisheng 关于微调的内容总结 0. 引言1. 关于微调的总结 0. 引言 这篇文章的内容(主要是截图)是来自 Bisheng 关于微调的内容总结,内容来源于 B 站Up主七吟覃_BISHENG负责人的视频,感兴趣的可以观看原视频。 1. 关于微调的总…...
Git 工具的安装
目录 Git 工具介绍 Git 工具安装 创建本地仓库 配置本地仓库 Git 版本控制基本原理 本期开始,我们将学习如何使用 Git 工具,实现多版本控制。 Git 工具介绍 要了解 Git 工具我们得先了解版本控制器的概念。 有这样一个场景,如下图所…...
任务管理系统,Java+Vue,含源码与文档,科学规划任务节点,全程督办保障项目落地提效
前言: 在当今快节奏的工作环境中,高效的任务管理是确保项目按时完成、资源合理分配及团队协作顺畅的关键。任务管理系统作为提升工作效率的重要工具,通过数字化手段帮助用户组织、跟踪和完成各类任务。本文将详细阐述任务管理系统的五大核心…...
JavaScript基础知识合集笔记1——数据类型
文章目录 JavaScript中的数据类型基本数据类型引用类型存储区别 JavaScript中的数据类型 基本数据类型和复杂类型 基本数据类型 基础类型包含六种:Number、Bigint、String、Boolean、Undefined、null、symbol Number(特殊值NaN,意为“不是数值”) c…...
2025.04.26-美团春招笔试题-第四题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 04. 图像智能降维处理 问题描述 卢小姐是一家图像处理公司的算法工程师,她正在开发一种高效的图像压缩算法。该算法基于奇异值分解(SVD)技术,通过保留图像矩阵中最重要的特征,在…...
测试基础笔记第十三天
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、流程控制语句-判断语句1.判断语句2.逻辑运算符3.elif多重判断4.if的嵌套5.if与逻辑运算符结合1.and2.or3.not 设计测试用例二、流程控制语句-循环语句1.while语…...
【昇腾】PaddleOCR转om推理
文章目录 1. 使用Paddle框架推理1.1 安装1.2 推理 2. paddle 转 ONNX3. 转om4. Ais_bench 命令推理5. Ais_bench 编写推理代码 概要: PyTorch官方提供了昇腾插件包,安装后虽然可以支持PytorchOCR和PaddlePaddle的推理任务,但性能通常低于GPU。…...
【数据融合】基于拓展卡尔曼滤波实现雷达与红外的异步融合附matlab代码
一、问题分析与技术难点 1. 传感器特性对比 传感器测量维度优势局限性噪声模型雷达距离 $ r $、方位角 $ \theta $、速度 $ v $测距精度高、全天候工作角度分辨率低、易受多径干扰高斯噪声,协方差矩阵 $ R_r \text{diag}(\sigma_r^2, \sigma_\theta^2, \sigma_v^…...
第一部分:网页的骨架 —— HTML
这目录 前言1. 初识 HTML:搭建地基和框架1.1 小例子: 创建一个最简单的 HTML 页面,包含 "Hello World"。1.2 练习 2. 常用文本与内容标签:填充墙体和房间2.1 小例子: 创建一个包含个人简介(使用标…...
RTMP 协议解析 1
介绍 📖 什么是 RTMP? RTMP协议(Real-Time Messaging Protocol,实时消息传输协议)是由Adobe公司(最初由Macromedia开发)设计的一种用于实时传输音频、视频和数据流的网络协议,主要…...
c++初始化数组
1.前言 话说数组是n年前的事了,我为啥现在又提到它呢?因为很多人不会初始化数组,所以今天我来教教大家 2.初始化数组 初始化数组就是定义数组,就像这样 int a[5]{0}; 这样是a[0]到a[5]全都等于0 如果要输出这个数组…...
支持Win和Mac的批量图片压缩方法
软件介绍 如果你的图片太大,传输或上传总是卡壳,那就需要一款好用的图片压缩工具了。今天推荐的这款工具支持Windows和Mac双系统,简直是图片压缩界的"变形金刚"! 图压(图片压缩双系统版) …...
autodl(linux)环境下载git-lfs等工具及使用
一、git-lfs工具下载 #初始化git.lfs命令 curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash sudo apt-get install git-lfs git lfs install 二、 huggingface-cli工具下载及使用 Linux设置huggingface的镜像: ex…...
云原生--核心组件-容器篇-3-Docker核心之-镜像
1、定义与作用 定义: Docker镜像是一个只读的模板,包含运行应用程序所需的所有内容,包括代码、依赖库、环境变量、配置文件等。简单来说,Docker镜像是一个轻量级、独立、可执行的软件包,它包含了运行某个软件所需的所有…...
Dify与n8n深度对比:AI应用开发与自动化工作流的双轨选择
Dify与n8n深度对比:AI应用开发与自动化工作流的双轨选择 在数字化转型加速的2025年,Dify和n8n作为两大主流工具,分别代表了AI应用开发与自动化工作流领域的顶尖解决方案。本文将从核心定位、功能特性、使用场景等维度展开对比,为…...
AI算法优化建筑形态与能耗管理 实现方案和技术架构
以下是基于AI算法优化建筑形态与能耗管理的实现方案与技术架构,结合行业实践与前沿技术趋势,分层次解析核心要素及实施路径: 一、技术架构设计 1. 数据采集与感知层 多源数据融合 传感器网络:部署温湿度、CO₂浓度、光照、人流密度等传感器,构建实时数据采集体系(如北京…...
【互联网架构解析】从物理层到应用层的全栈组成
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现(Python网络请求)运行结果验证 三、性能对比测试方法论量化数据对比结果分…...
Redis和MQ的区别
redis是一个高性能的key-value数据库,支持消息推送功能,可以当做一个轻量级的队列服务器使用。 redis只是提供一个高性能的、原子操作内存键值队,具有高速访问能力,虽然可以做消息队列的存储,但不具备消息队列的任何功…...
多系统安装经验,移动硬盘,ubuntu grub修改/etc/fstab 移动硬盘需要改成nfts格式才能放steam游戏
笔记本一个系统,移动硬盘两个系统,当前系统sda4.jpg 移动硬盘需要再装一个linux会有boot/efi,启动的时候grub界面才能识别,单linux没有efi别的电脑识别不到 没efi甚至启动不了grub 按下f6.jpg 看看笔记本grub能不能识别得到移动硬…...
4.26学习——web刷题
把攻防世界的web做了20道左右,挑了几道学到东西的题目记录一下 攻防世界warmup 进到环境中读取源代码发先有个提示:source.php,进去看看 <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$wh…...
Go 语言中的实时交互式编程环境
在 Go 语言中,确实有几种方法可以实现类似 Python REPL 的实时交互式编程体验,让你可以实时编写代码并查看输出,而无需每次都编译运行整个程序。 但是需要注意的是,由于 Go 是编译型语言,完全的实时交互体验不如解释型…...
动态规划求解leetcode300.最长递增子序列(LIS)详解
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&#…...
冯·诺依曼和哈佛架构两种架构的总线组成及核心特点
在计算机体系结构中,哈佛架构和冯诺依曼架构是两种不同的存储与总线设计范式,它们的总线组成和访问方式有显著差异。以下是两种架构的总线组成及核心特点的详细分析: 1. 冯诺依曼架构(Von Neumann Architecture) 核心…...
7.学习笔记-Maven进阶(P75-P89)-进度(p75-P80)
1.MAVEN-01-分模块开发的意义 (一)分模块开发意义 模块可以按功能划分,也可以按团队划分,所以把domain的方法抽取出来,进行共享,从而提高开发 的效率。 (1)分模块开发的意义…...
Java——令牌技术
目录 一、何为令牌 JWT令牌 介绍 JWT组成 二、JWT用于验证用户登录 三、JWT令牌生成和校验 简单用法 1.创建生成密钥的方法 2.接着添加过期时间,密钥,BASE64解码密钥的属性以及生成token的方法,合并上面生成密钥的方法,下面…...
【含文档+PPT+源码】基于Python校园跑腿管理系统设计与实现
项目介绍 本课程演示的是一款基于Python校园跑腿管理系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.…...
Spring AI Alibaba - Milvus 初体验,实现知识库效果
先看效果 数据被存储在 milvus 中,包括原始数据和向量数据。 大模型使用向量化数据的回答: 环境准备 安装 milvus Milvus 是一款专为向量相似性搜索设计的高性能开源数据库。 本地测试环境可以直接 Standalone 模式安装,需要用到 docke…...
arcpy列表函数的应用
arcpy.ListDatasets() 该函数用于列出指定工作空间中的所有数据集(如要素数据集、栅格数据集等)。 语法: python arcpy.ListDatasets(wild_cardNone, feature_typeNone) • wild_card:用于筛选数据集名称的通配符。 • feat…...
上位机知识篇---时钟分频
文章目录 前言 前言 本文简单介绍了一下时钟分频。时钟分频(Clock Division)是数字电路设计中常见的技术,用于将高频时钟信号转换为较低频率的时钟信号,以满足不同模块的时序需求。它在处理器、FPGA、SoC(片上系统&am…...
Redis的两种持久化方式:RDB和AOF
Redis持久化概述 Redis作为内存数据库,数据存储在内存中。为了保证数据在服务器重启或宕机时不丢失,Redis提供了两种持久化方案: RDB(Redis Database):定时生成内存快照 AOF(Append Only File&…...
1位的推理框架bitnet.cpp
源码:https://github.com/microsoft/BitNet bitnet.cpp 技术解析 bitnet.cpp 是专为 低精度大语言模型(如 BitNet b1.58) 设计的官方推理框架,其核心特性如下: 一、架构优势 全栈优化引擎 提供高度优化…...
教育领域的AIGC革命:构建多模态智能教学系统
一、智能教育系统技术架构 1.1 教育场景技术需求 教学环节 传统痛点 AIGC解决方案 课程设计 耗时耗力,创新不足 跨学科教案自动生成 课堂互动 单向传授,参与度低 多模态交互式虚拟教师 作业批改 重复劳动,反馈延迟 全自动批改与个性化评语 学…...
Simulink 数据存储机制:Base Workspace、Model Workspace 与 Data Dictionary 的核心区别
1. 核心定位与设计目标 存储方式本质核心设计目标Base WorkspaceMATLAB全局内存空间临时数据交互,快速原型开发Model Workspace模型私有数据容器模型数据隔离,防止命名冲突Data Dictionary专业数据管理文件(.sldd)复杂系统数据治理,支持团队…...
TI---UART通信
一、SysConfig 中 UART 配置的核心参数与生成逻辑 1. 基础参数配置(图形化界面) 配置项功能说明生成代码影响模式选择主机模式(Master)/ 从机模式(仅部分芯片支持,如 UART 作为 I2C 桥接)生成…...
spark总结
文章目录 一 spark简介1.1 什么是spark1.2 spark运行过程1.2.1 组成1.2.2 过程1.2.3 事例(词频统计WordCount程序) 1.3 spark运行模式1.4 pyspark 二 SparkCore2.1 RDD介绍2.2 RDD编写2.3 RDD算子2.4 RDD的持久化2.4.1 为什么需要缓存和检查点机制&#…...
【随笔】地理探测器原理与运用
文章目录 一、作者与下载1.1 软件作者1.2 软件下载 二、原理简述2.1 空间分异性与地理探测器的提出2.2 地理探测器的数学模型2.21 分异及因子探测2.22 交互作用探测2.23 风险区与生态探测 三、使用:excel 一、作者与下载 1.1 软件作者 作者: DOI: 10.…...
补码底层逻辑探讨
在计算机里面以二进制进行存储,二进制并不能区分正负数 为了处理负数,人们想了很多办法 1.原码 首先,很直观的区分方法就是设置一个flag 在二进制前面加一个符号位,0是正、1是负 但是在电路里面处理这样的信号却很复杂&#…...
第二大脑-个人知识库
原文链接:https://i68.ltd/notes/posts/20250407-llm-person-kb/ Quivr-第二大脑一样的个人助手,利用AI技术增强个人生产力 将 GenAI 集成到您的应用程序中的个性化 RAG,专注于您的产品而非 RAG项目仓库:https://github.com/QuivrHQ/quivr Star:37.7k官网:https:/…...
泰勒展开概念解释(图优化SLAM中非线性系统的线性处理)
1. 泰勒展开 泰勒展开是一种用多项式近似复杂函数的数学方法,其核心思想是通过函数在某一点的各阶导数信息,构建一个多项式来逼近原函数,即通过函数在某一点x0的各阶导数值,构造一个多项式 P(x),使得该多项式在 x0 附近与原函数 f(x) 的值及其导数尽可能匹配,数学形式为…...
CANape与MATLAB数据接口技术详解
目录 CANape与MATLAB数据接口技术详解 一、数据互操作背景与意义 1.1 汽车电子开发中的测量需求 1.2 技术标准演进分析 二、CANape数据导出深度解析 2.1 MDF文件结构说明 2.2 转换流程优化建议 三、MATLAB数据处理进阶技术 3.1 数据质量评估脚本 3.2 数据可视化增强方…...
per-task affinity 是什么?
Per-Task Affinity(任务级CPU亲和性)详解 Per-Task Affinity 是 Linux 调度器提供的一种机制,允许将单个任务(进程/线程)绑定到特定的 CPU 核心(或核心集合)上运行,从而优化性能、减…...
基于先进MCU的机器人运动控制系统设计:理论、实践与前沿技术
摘要:随着机器人技术的飞速发展,对运动控制系统的性能要求日益严苛。本文聚焦于基于先进MCU(微控制单元)的机器人运动控制系统设计,深入剖析其理论基础、实践方法与前沿技术。以国科安芯的MCU芯片AS32A601为例…...
Network.framework 的引入,不是为了取代 URLSession
Network.framework 的引入,不是为了取代 URLSession 如果你感觉 Network.framework 的引入, 可能是为了取代 URLSession, 那你就大错特错了!这里需要非常准确地区分一下: 🔵 Network.framework 不是为了取代 URLSession。 &…...
gradle-缓存、依赖、初始化脚本、仓库配置目录详解
1.启用init.gradle文件的方法 在命令置顶文件,例如gradle --init-script yourdir/init.gradle -q taskName,你可以多次输入此命令来制定多个init文件把init.gradle文件放到USER_HOME/.gradle/目录下把以.gradle结尾的文件放到USER_HOME/.gradle/.init.d/目录下把以…...