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

数位dp入门详解

1. 介绍

数位 d p dp dp一般出现在来求一个范围 [ a , b ] [a, b] [a,b]内满足条件的数有多少。数位 d p dp dp的解决比较公式化,考虑每一位对最终答案的影响。

2. 案例

Luogu P2602: 求给定范围 [ a , b ] [a,b] [a,b]各个数位 k k k出现了多少次。

考虑 n n n 10 10 10进制表示
n = ∑ i = 0 m a i 1 0 i n=\sum_{i=0}^{m}a_i 10^{i}\\ n=i=0mai10i
我们令 n n n的最高位数的数字为 a m a_m am,最高幂次为 m m m
m = ⌊ lg ⁡ n ⌋ a m = ⌊ n / ( 1 0 m ) ⌋ m = \lfloor \lg n \rfloor \\ a_m =\lfloor n /( 10^{m})\rfloor m=lgnam=n/(10m)⌋
一个数 n n n k k k出现的次数
d i g i t C n t ( n , k ) = ∑ i = 0 m ϕ ( a i ) ϕ ( x ) = { 1 , a i = k 0 , a i ≠ k digitCnt(n, k) =\sum_{i=0}^m \phi(a_i)\\ \phi(x) = \begin{cases} 1, \quad a_i=k\\ 0, \quad a_i \ne k \end{cases} \\ digitCnt(n,k)=i=0mϕ(ai)ϕ(x)={1,ai=k0,ai=k
最终我们需要求
a n s ( a , b ) = ∑ x = a b d i g i t C n t ( x ) \\ ans(a,b) = \sum_{x=a}^{b} digitCnt(x) ans(a,b)=x=abdigitCnt(x)
如果我们直接进行遍历,时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn),对于稍稍大一点的情况是处理不了的,这时候我们的数位dp出场了。
我们定义 d p [ n ] [ k ] dp[n][k] dp[n][k] n n n以内的 k k k位出现的次数,那么我们可以把 n n n以内的数分为两个部分
d p [ n ] = a n s ( 1 , a m 1 0 m − 1 ) + a n s ( a m 1 0 m , n ) dp[n] =ans(1,a_{m}10^{m}-1) +\\ans(a_{m}10^{m}, n) dp[n]=ans(1,am10m1)+ans(am10m,n)
考虑最高位对最终增加的数为
M s b C n t ( n , k ) = { 1 0 m , a m > k 0 , k = 0 ∨ a m < k n − a m 1 0 m + 1 , a m = k MsbCnt(n,k) = \begin{cases} 10^{m} \quad , a_{m} > k \\ 0\quad, k=0 \vee a_{m} <k\\ n - a_{m}10^{m}+1 \quad,a_{m} =k \end{cases} MsbCnt(n,k)= 10m,am>k0,k=0am<knam10m+1,am=k
我们先忽略前导 0 0 0, 除去最高位的贡献后可以得到
d p [ n ] = M s b C n t ( n ) + a m T [ 1 0 m − 1 ] + T [ n − a m 1 0 m ] dp[n]=MsbCnt(n)+a_m T[10^{m} -1]\\+T[n-a_m10^{m}] dp[n]=MsbCnt(n)+amT[10m1]+T[nam10m]
这里的 T [ n ] T[n] T[n]定义为
T [ n ] = d i g i t C n t ( S { n } ) S { n } : = { s 0 s 1 ⋯ s m − 1 , 0 ≤ s i ≤ 9 , S ≤ n − a m 1 0 m } T[n]= digitCnt(S\{n\})\\ \quad S\{n\}:= \{s_0s_1\cdots s_{m-1} \quad ,0 \le s_i \le 9\\ ,S \le n- a_m 10^{m}\} T[n]=digitCnt(S{n})S{n}:={s0s1sm1,0si9,Snam10m}
通俗一点就是比如 n = 123 n=123 n=123

那么 S { 123 } = { 000 , 001 , ⋯ , 123 } S\{123\} = \{000,001,\cdots,123\} S{123}={000,001,,123}

也就是把 n n n之前的数列出,并加上前导 0 0 0使之与 n n n的位数对齐。

前导 0 0 0的添加并不会影响非 0 0 0的其他数位置的计数,因此可以得到

d p [ n ] [ k ] = T [ n ] [ k ] , k ≠ 0 dp[n][k] =T[n][k], k\ne0 dp[n][k]=T[n][k],k=0

我们考虑 T [ 1 0 d − 1 ] [ k ] T[10^{d} -1][k] T[10d1][k]的值, S { 1 0 d − 1 } S\{10^{d}-1\} S{10d1}集合中总共有 1 0 d 10^{d} 10d个数,每个数有 d d d位,而每个数字在排列中等可能出现,因此
T [ 1 0 d − 1 ] [ 1 ] = ⋯ = T [ 1 0 d − 1 ] [ 9 ] = d × 1 0 d − 1 T[10^{d}-1][1]=\cdots=T[10^{d}-1][9] \\=d \times10^{d-1} T[10d1][1]==T[10d1][9]=d×10d1
我们再考虑减去前导 0 0 0, 容易得到 1 0 d − 1 10^{d}-1 10d1内的数在 S { 1 0 d − 1 } S\{10^{d}-1\} S{10d1}集合中的前导 0 0 0的个数为

F r o n t Z e r o ( S { 1 0 d − 1 } ) = ∑ i = 1 d − 1 1 0 i FrontZero(S\{10^{d}-1\}) =\sum_{i=1}^{d-1}10^{i} FrontZero(S{10d1})=i=1d110i

因此
T [ 1 0 d − 1 ] [ 0 ] = ∑ i = 1 d − 1 ( d − 1 ) 1 0 i + d T[10^d-1][0] =\sum_{i=1}^{d-1} (d-1)10^{i} +d T[10d1][0]=i=1d1(d1)10i+d

对于一个数 n n n而言, 在它之前有 k ≠ 0 k \ne 0 k=0的个数为
d p [ n ] [ k ] = M o s t C n t ( n , k ) + m a m 1 0 m − 1 + d p [ n − a m 1 0 m ] [ k ] dp[n][k] = MostCnt(n,k)+ma_{m}10^{m-1}+\\ dp[n-a_m10^{m}][k ] dp[n][k]=MostCnt(n,k)+mam10m1+dp[nam10m][k]
如果 k = 0 k =0 k=0, 还需要减去前导 0 0 0
d p [ n ] [ 0 ] = T [ n ] [ 0 ] − ∑ i = 1 m 1 0 m dp[n][0] =T[n][0]-\sum_{i=1}^{m}10^{m} dp[n][0]=T[n][0]i=1m10m

  • 代码一
#include <iostream>
#include <vector>
#include <functional>#include <unordered_set>
constexpr static int BASE = 10;
constexpr static int MAX_POW = 12;unsigned long long typeVal;
using int_type = decltype(typeVal);int MaxPowNotGreater(int_type BASE, int_type v) {int ans = 1;auto tb = BASE;for ( ;tb <= v; tb *= BASE, ans++) {}return ans - 1;
}int_type getDigitCntUntil(int_type val, int_type k) {int_type v = val;int digitCnt = MaxPowNotGreater(BASE, v);int_type mod = val % BASE;int_type  ans = ((mod >= k))? 1 : 0;v /= BASE;int_type cpow = BASE;for (int d = 1; d < digitCnt + 1; d++, v/= BASE, cpow *= BASE) {int_type m = v % BASE;if ( m > k)ans += cpow;else if ( m == k) ans += mod + 1;else {}ans += m  * (cpow / BASE) * d; mod += cpow * m;}if ( k == 0) {cpow /= BASE;while (cpow >= 1) {ans -= cpow;cpow /= BASE;}}return ans;
}
int main()
{int_type a = 1;int_type b = 99;std::cin >> a >> b;std::vector<int_type> cal(BASE, 0);for (int i = 0;i < 10;i++) {cal[i] = getDigitCntUntil( b,i) - getDigitCntUntil(a - 1, i);}for (auto num:cal) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

我们可以将整次幂的数位置个数存起来

T C n t [ d ] [ k ] = T [ 1 0 d − 1 ] [ k ] TCnt[d][k] = T[10^{d}-1][k] TCnt[d][k]=T[10d1][k]
容易得到得到递推关系式
T C n t [ d ] [ k ] = { 1 0 d − 1 + T C n t [ d − 1 ] [ k ] , k ≠ 0 9 T C n t [ d − 1 ] [ 1 ] + T C n t [ d − 1 ] [ 0 ] , k = 0 TCnt[d][k] = \\ \begin{cases} 10^{d-1} +TCnt[d-1][k],\quad k \ne 0 \\ 9TCnt[d-1][1] + TCnt[d-1][0],\quad k =0 \end{cases} TCnt[d][k]={10d1+TCnt[d1][k],k=09TCnt[d1][1]+TCnt[d1][0],k=0

  • 代码2

#include <iostream>
#include <vector>
#include <functional>#include <unordered_set>
constexpr static int BASE = 10;
constexpr static int MAX_POW = 12;unsigned long long typeVal;
using int_type = decltype(typeVal);auto  fpow = [](int_type base, int_type cnt) {int_type ans = 1;while (cnt) {if (cnt & 1) ans *= base;base *= base;cnt = cnt >> 1;}return ans; 
};
auto LogFloor = [](int_type base, int_type v) {int_type m = base;int_type kdigits = 1;while ( m <= v) {m *= base;kdigits++;}kdigits--;return kdigits;
};
template<typename T>
void TEST_EQ( T a, T b) {bool ret = (a == b);if (!ret) {std::cout << a << " NOT EQUAL " << b << '\n';}else {std::cout << a << " EQUAL " << b << '\n'; }
}void testEqual(int_type a, int_type b, const std::vector<int_type>& cal) {std::vector<int> tmpCnt(BASE, 0);for (int_type i = a; i <= b; i++) {auto ti = i;while (ti) {tmpCnt[ti % BASE]++;ti /= BASE;}}bool ok = true;for (int i = 0; i < BASE; i++) {if (cal[i] != tmpCnt[i]) {std::cout << i << "failed: Real=" << tmpCnt[i] << " ;Cal= " << cal[i] <<'\n';ok = false;}}if (ok) {std::cout << "ok fine result!!!\n";}
}std::vector<std::vector<int_type>> FCnt( MAX_POW + 1, std::vector<int_type>(BASE, 0));int_type getDigitCntUntil(int_type val, int_type k) {int_type v = val;int digitCnt = LogFloor(BASE, v);int_type mod = val % BASE;int_type  ans = ((mod >= k) && k)? 1 : 0;v /= BASE;for (int d = 1; d < digitCnt + 1;d++, v /= BASE) {int_type lsb = v % BASE ;if (d != digitCnt) {ans += lsb * fpow(BASE, d - 1) * d;if ( lsb > k)ans += fpow(BASE, d);else if (lsb == k)ans += mod + 1;}else {ans += FCnt[digitCnt][k];ans += (lsb - 1) * fpow(BASE, d - 1) * d;if (0 != k) {if ( lsb > k)ans += fpow(BASE, d);else if (k == lsb)ans += mod + 1;else       ans += 0;}}mod += lsb * fpow(BASE, d);}return ans;
}
int main()
{for (int i = 0;i < BASE;i++) {FCnt[1][i] = 1;}for (int i = 2;i <= MAX_POW;i++) {for (int d = 0; d < BASE;d++) {if (d == 0)FCnt[i][d] = 9 * FCnt[i - 1][1] + FCnt[i - 1][0];else {FCnt[i][d] = fpow(10, i - 1) + 10 * FCnt[i - 1][d];} }}    int_type a = 1;int_type b = 99;std::cin >> a >> b;std::vector<int_type> cal(BASE, 0);for (int i = 0;i < 10;i++) {cal[i] = getDigitCntUntil( b,i) - getDigitCntUntil(a - 1, i);}for (auto num:cal) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

相关文章:

数位dp入门详解

1. 介绍 数位 d p dp dp一般出现在来求一个范围 [ a , b ] [a, b] [a,b]内满足条件的数有多少。数位 d p dp dp的解决比较公式化&#xff0c;考虑每一位对最终答案的影响。 2. 案例 Luogu P2602&#xff1a; 求给定范围 [ a , b ] [a,b] [a,b]各个数位 k k k出现了多少次。 …...

【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步

【黑马点评优化】2-Canel实现多级缓存&#xff08;RedisCaffeine&#xff09;同步 0 背景1 配置MySQL1.1 开启MySQL的binlog功能1.1.1 找到mysql配置文件my.ini的位置1.1.2 开启binlog 1.2 创建canal用户 2 下载配置canal2.1 canal 1.1.5下载2.2 配置canal2.3 启动canal2.4 测试…...

牛顿法:用泰勒级数求解平方根的秘籍

目录 一、引言二、牛顿法的理论基础——泰勒级数三、牛顿法的原理与推导3.1 原理概述3.2 推导过程3.3 几何解释 四、牛顿法的应用场景4.1 数值计算4.2 优化问题 五、牛顿法求平方根的具体案例5.1 原理推导5.2 具体步骤5.3 代码实现&#xff08;Python&#xff09;5.4 示例计算过…...

四、敏捷方法论:敏捷开发中的关键实践

敏捷开发中的关键实践 在敏捷开发中,许多关键实践帮助团队提升效率、增强协作和确保高质量交付。通过合理运用这些实践,团队能够灵活应对需求变化、缩短交付周期,并持续优化工作流程。本文将详细介绍敏捷开发中的一些核心实践,包括用户故事、需求优先级排序、持续交付、持…...

基于Qt 和微信小程序的用户管理系统:WebSocket + SQLite 实现注册与登录

目录 一. 概要 二. 技术栈 三. 系统功能设计 3.1 功能模块 3.2 数据表设计 四. 具体实现 4.1 Qt 服务端 4.1.1 初始化 WebSocket 服务器 4.1.2 用户管理界面 4.2 微信小程序端 4.2.1 注册功能 4.2.2 登录功能 五. 运行效果 六. 源码下载 一. 概要 在物联网和智能设备…...

DeepSeek R1 与 OpenAI O1:机器学习模型的巅峰对决

我的个人主页 我的专栏&#xff1a;人工智能领域、java-数据结构、Javase、C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞&#x1f44d;收藏❤ 一、引言 在机器学习的广袤天地中&#xff0c;大型语言模型&#xff08;LLM&#xff09;无疑是最…...

【硬件设计细节】缓冲驱动器使用注意事项

一、缓冲驱动器核心功能与选型原则 信号增强与隔离 驱动能力匹配&#xff1a;根据负载电流需求选择缓冲器&#xff0c;例如CMOS缓冲器驱动能力通常为4-8mA&#xff0c;需搭配大电流负载时选用图腾柱输出或专用驱动芯片&#xff08;如TI的SN74LVC系列&#xff09;。电压域转换&…...

基于LVGL的简易聊天室

创建过程&#xff1a; 在GUI里配置好了一个大概的界面。聊天界面需要一个滑动页、一个输入框、一个文本框、一个发送按键。其中文本框属于滑动页&#xff0c;并且给发送按键添加上事件。 保存界面后&#xff0c;打开工程代码。 第一件事&#xff0c;是打开键盘使用的宏定义 随…...

DeepSeek 助力 Vue 开发:打造丝滑的开关切换(Switch)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

IDEA集成DeepSeek

引言 随着数据量的爆炸式增长&#xff0c;传统搜索技术已无法满足用户对精准、高效搜索的需求。 DeepSeek作为新一代智能搜索技术&#xff0c;凭借其强大的语义理解与深度学习能力&#xff0c;正在改变搜索领域的游戏规则。 对于 Java 开发者而言&#xff0c;将 DeepSeek 集成…...

pycharm社区版有个window和arm64版本,到底下载哪一个?还有pycharm官网

首先pycharm官网是这一个。我是在2025年2月16日9:57进入的网站。如果网站还没有更新的话&#xff0c;那么就往下滑一下找到 community Edition,这个就是社区版了免费的。PyCharm&#xff1a;适用于数据科学和 Web 开发的 Python IDE 适用于数据科学和 Web 开发的 Python IDE&am…...

LeetCode热题100- 缺失的第一个正数【JavaScript讲解】

题目&#xff1a; 解题一&#xff1a; 如果不考虑时间复杂度和空间复杂度的话&#xff0c;我们最先想到的办法是先将该数组进行排序和去重&#xff0c;将最初的res结果值设置为1&#xff1b;将然后进行遍历&#xff0c;如果第一项不为1&#xff0c;则返回1&#xff0c;否则根…...

基于矢量轨道角动量波的透射超表面设计

摘 要&#xff1a;针对轨道角动量(Orbital Angular Momentum,OAM)在无线通信系统中相位奇点的问题,提出了一种产生矢量OAM波的透射超表面&#xff61;设计了一种超表面透射单元实现透射极化和相位的调控,并由此单元排布组成透射超表面&#xff61;采用透射超表面调控透射电磁波…...

全方位探索DeepSeek

目录 前言1. DeepSeek的基础功能与应用场景2. 使用DeepSeek的多种方式2.1 通过Web界面快速体验2.2 调用API实现自动化处理2.3 集成到本地开发环境2.4 结合第三方工具扩展功能 3. 高效使用DeepSeek的进阶技巧3.1 参数调优与性能优化3.2 数据处理与结果分析 4. 实际案例分析与应用…...

详解Redis数据结构(附源码)

引言 只有弄明白Redis数据结构&#xff0c;才能理解它如此快速的原因&#xff0c;并不只是它存储于内存&#xff0c;本篇文章将拆开Redis数据结构分析它高效的原因 字符串&#xff08;String&#xff09; 基本概念&#xff1a;字符串是 Redis 中最基本的数据结构&#xff0c;…...

基于Flask的茶叶销售数据可视化分析系统设计与实现

【FLask】基于Flask的茶叶销售数据可视化分析系统设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统的创新之处在于系统不仅提供了基础的图表展示&#xff0c;如价格分布、付款分…...

基于推荐算法的在线课程推荐系统设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

计时器任务实现(保存视频和图像)

下面是一个简单的计时器任务实现&#xff0c;可持续地每秒保存一幅图像&#xff0c;也可持续地每60秒保存一个视频&#xff0c;图像和视频均以当前时间命名&#xff1a; TimerTask类的实现如下&#xff1a; class TimerTask { public:TimerTask(const std::string& path):…...

FreeRTOS第3篇:链表的“精密齿轮”——列表与列表项

文章目录 1 列表与列表项:FreeRTOS的“排队系统”2 列表操作:FreeRTOS的“排队算法”3 列表的应用场景:FreeRTOS的“任务调度枢纽”4 源码级洞察:列表的“灵魂代码”5 实战:列表操作实验6 总结与思考引言:嵌入式系统的“任务候车厅” 想象你正在管理一座繁忙的火车站:乘…...

Linux(ubuntu)下载ollama速度慢解决办法

国内安装Ollama都很慢&#xff0c;因为一直卡在下载中&#xff0c;直接通过官网的链接地址下载方法&#xff1a; curl -fsSL https://ollama.com/install.sh | sh速度大概是10min下载1%&#xff0c;完全不能接受啊&#xff01; 其中很好的一个加速方式是通过使用github文件加速…...

【Java】分布式锁Redis和Redisson

https://blog.csdn.net/weixin_44606481/article/details/134373900 https://www.bilibili.com/video/BV1nW421R7qJ Redis锁机制一般是由 setnx 命令实现&#xff0c;set if not exists&#xff0c;语法setnx key value&#xff0c;将key设置值为value&#xff0c;如果key不存在…...

网络编程-

文章目录 网络编程套接字UDP/TCP的api使用 网络编程套接字 socket&#xff0c;是操作系统给应用程序&#xff08;传输层给应用层&#xff09;提供的api&#xff0c;Java也对这个api进行了封装。 socket提供了两组不同的api&#xff0c;UDP有一套&#xff0c;TCP有一套&#x…...

DeepSeek助力学术论文写作[特殊字符]

宝子们&#xff0c;还在为学术论文写作发愁吗&#xff1f;DeepSeek来帮你&#xff01;只要用对提示词&#xff0c;它就能变成你写作路上的超级助手。今天就来给大家分享一些超好用的提示词&#xff0c;助力学术论文写作&#xff0c;让你的论文在ChatGPT的辅助下闪闪发光✨。 一…...

从零创建DeepSeek:技术路径与实践探索

import tensorflow as tf摘要&#xff1a;本文详细阐述了从零开始创建DeepSeek的全过程&#xff0c;涵盖从项目启动的构思&#xff0c;到技术选型的考量&#xff0c;再到模型训练的精细操作&#xff0c;以及系统集成、测试优化和部署上线的各个环节。通过对这些步骤的深入解析&…...

MySQL技术公开课:Mysql-Server-8.4.4 Innodb 集群搭建与维护

MySQL技术公开课 - Mysql-Server-8.4.4 Innodb 集群搭建与维护 讲课内容&#xff1a; 1、Innodb集群框架介绍 2、Innodb集群部署(mysql-Server、mysql-shell、mysql-router安装配置) 3、Innodb集群维护(主备切换、启动与关闭、故障排除) Mysql-server商业版目前最新的是8.…...

VS Code User和System版区别【推荐使用System版本】and VSCode+Keil协同开发之Keil Assistant

VS Code User和System版区别 Chapter1 VS Code User和System版区别1. 对于安装而言2. 结束语 Chapter2 VS Code 安装、配置教程及插件推荐插件&#xff1a; Chapter3 VSCodeKeil协同开发之Keil Assistant1. 效果展示2. Keil Assistant简介3. Keil Assistant功能特性4. 部署步骤…...

动态规划两个数组dp问题系列一>最长重复子数组

目录 状态表示&#xff1a;状态转移方程&#xff1a;初始化&#xff1a;填表顺序&#xff1a;返回值&#xff1a;代码呈现&#xff1a; 状态表示&#xff1a; 状态转移方程&#xff1a; 初始化&#xff1a; 填表顺序&#xff1a; 返回值&#xff1a; 这里是以某一个位置为结尾定…...

在SpringBoot中使用UniHttp简化天地图路径规划调用实践

目录 写在最前面 前言 一、天地图路径规划简介 1、天地图相关服务 2、天地图路径规划接口 二、UniHttp简介 1、UniHttp是什么&#xff1f; 2、UniHttp能做什么&#xff1f; 三、UniHttp调用天地图接口 1、请求接口的定义 2、实际调用 3、相应结果展示 四、总结 写在…...

springboot与Freemarker

1 基本使用 1.1 介绍 FreeMarker 是一款模板引擎&#xff1a; 即一种基于模板和要改变的数据&#xff0c;并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&#xff0c;源代码等)的通用工具。 是一个Java类库。 FreeMarker 被设计用来生成 HTML Web 页面…...

CMake无法生成可执行文件,一直生成库文件

CMakeLists的内容如下&#xff0c;一直生成的main是库文件&#xff0c;而不是可执行文件。本人是在进行鸿蒙的交叉编译的时候遇到&#xff0c;归结为cmake属性的差异。原内容如下&#xff1a; # 设置最低CMake版本要求 cmake_minimum_required (VERSION 2.8.0)# 设置项目名称 …...

PrimeFaces实战:IdleMonitor与Ajax的完美结合

在现代的Web开发中&#xff0c;用户交互的实时反馈是一个重要的用户体验环节。PrimeFaces作为一个强大的Java EE UI库&#xff0c;提供了许多便捷的功能组件&#xff0c;其中之一就是IdleMonitor。通过IdleMonitor&#xff0c;我们可以轻松地检测用户何时处于空闲状态以及何时从…...

搭建一个经典的LeNet5神经网络

第一章&#xff1a;计算机视觉中图像的基础认知 第二章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(一) 第三章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(二) 第四章&#xff1a;搭建一个经典的LeNet5神经网络 一、LeNet-5背景 LeNet-…...

Transformer多头注意力并行计算原理与工业级实现:从数学推导到PyTorch工程优化

一、核心数学原理剖析 1.1 多头注意力矩阵分解 Q XW^Q ∈ R^{nd_k} K XW^K ∈ R^{nd_k} V XW^V ∈ R^{nd_v} 多头分解公式&#xff1a; head_i Attention(QW_i^Q, KW_i^K, VW_i^V) 其中 W_i^Q ∈ R^{d_kd_k/h}, W_i^K ∈ R^{d_kd_k/h}, W_i^V ∈ R^{d_vd_v/h} (h为头数…...

OpenAI 的变化对行业意味着什么?

哎呀&#xff0c;中国AI的发展可是搅动了一番风云。害怕自己正在失去对 AI 话语权的掌控&#xff0c;OpenAI 决定是时候全力出击了。 除了最近意外发布的 o3-mini 模型之外&#xff0c;Sam Altman 昨天还宣布了接下来几周/几个月的路线图&#xff0c;而这些变化相当显著&#…...

LinkedList

一.IDEA的链表库 IDEA上实现链表的包&#xff0c;实现的是无头双向不循环链表&#xff1a;&#xff08;并且这个链表有头尾节点&#xff09; 二.自己实现一个无头双向不循环链表 1.创建链表的类&#xff0c;在链表内中定义一个节点的内部类&#xff0c;并且在链表的类中定义头…...

半遮挡检测算法 Detecting Binocular Half-Occlusions

【1. 背景】&#xff1a; 本文分析【Detecting Binocular Half-Occlusions&#xff1a;Empirical Comparisons of Five Approaches】Geoffrey Egnal和Richard P. Wildes于2002年发表在IEEE Transactions on Pattern Analysis and Machine Intelligence上&#xff0c;这是1篇中…...

零基础购买阿里云服务器,XShell连接云服务器

目录 1.环境搭建方式 2. 使用云服务器 3.使用终端软件登录到Linux 4.使用XShell登录主机 5.连接失败的原因&#xff1a; 下一篇更新&#xff1a;Linux的基础指令以及如何Linux的环境搭建 1.环境搭建方式 主要有四种: 1.直接安装在物理机上&#xff0c;虽然Linux有图形化…...

Mac ARM 架构的命令行(终端)中,删除整行的快捷键是:Ctrl + U

在 Mac ARM 架构的命令行&#xff08;终端&#xff09;中&#xff0c;删除整行的快捷键是&#xff1a; Ctrl U这个快捷键会删除光标所在位置到行首之间的所有内容。如果你想删除光标后面的所有内容&#xff0c;可以使用&#xff1a; Ctrl K这两个快捷键可以帮助你快速清除当…...

ESP学习-1(MicroPython VSCode开发环境搭建)

下载ESP8266固件&#xff1a;https://micropython.org/download/ESP8266_GENERIC/win电脑&#xff1a;pip install esptools python.exe -m pip install --upgrade pip esptooo.py --port COM5 erase_flash //清除之前的固件 esptool --port COM5 --baud 115200 write_fla…...

微信小程序性能优化

微信小程序的性能优化是提升用户体验的关键。以下是一些常见的优化策略和技巧&#xff1a; 1. 减少 setData 的调用频率和数据量 setData 是小程序中更新视图的主要方式&#xff0c;但频繁调用或数据量过大会导致性能问题。 减少调用频率&#xff1a;避免在短时间内多次调用…...

五十天精通硬件设计第31天-阻抗

系列文章传送门 50天精通硬件设计第一天-总体规划-CSDN博客 目录 1. 核心概念:特性阻抗 2. 阻抗不匹配的后果 3. 关键影响因素 4. 阻抗匹配方法 5. 设计实践要点 6. 工具与测试 7. 常见问题解决 总结 信号完整性中的阻抗问题主要涉及传输线的特性阻抗匹配,是确保高…...

docker部署dify结合deepseek构建知识库

序 本文主要研究一下本地docker部署dify结合deepseek构建知识库 步骤 dify git clone https://github.com/langgenius/dify.git git co tags/0.15.3 -b 0.15.3 cd docker cp .env.example .env docker-comopse up启动之后访问localhost docker-comopse.yaml # # WARNING…...

11.C语言 malloc() calloc() realloc()分配内存

目录 malloc 好处 坏处 总结 calloc 参数说明 作用 与 malloc 的区别 示例 优点 缺点 总结 realloc 参数说明 作用 示例 优点 缺点 注意事项 总结 总结区别 对比表格 malloc 函数功能&#xff1a;分配内存给 void* malloc(size_t size); 来看一下deep…...

可信大模型:LLM + 神经符号推理,解决复杂推理任务

可信大模型&#xff1a;LLM 神经符号推理&#xff0c;解决复杂推理任务 论文大纲一、Why&#xff1a;研究要解决的现实问题二、What&#xff1a;核心发现或论点三、How&#xff1a;研究的整体方法与关键细节3.1 前人研究的局限性3.2 创新方法/视角3.3 关键数据或实验支持3.4 可…...

基于大数据的全国热门旅游景点数据分析系统的设计与实现

【大数据】基于大数据的全国热门旅游景点数据分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统主要包括登录注册、系统首页、图表分析、数据管理和个人信息五大功能模…...

Moya 网络框架

Moya 网络框架 定义enum类型&#xff0c;有多种接口就定义多少种&#xff0c;然后实现TargetType协议 import Foundation //导入网络框架 import Moyaenum DefaultService {//广告列表case ads(position : Int)case sheets(size:Int)case sheetDetail(data: String)case regi…...

【环境安装】重装Docker-26.0.2版本

【机器背景说明】Linux-Centos7&#xff1b;已有低版本的Docker 【目标环境说明】 卸载已有Docker&#xff0c;用docker-26.0.2.tgz安装包安装 1.Docker包下载 下载地址&#xff1a;Index of linux/static/stable/x86_64/ 2.卸载已有的Docker 卸载之前首先停掉服务 sudo…...

std::ranges::set_intersection set_union set_difference set_symmetric_difference

std::ranges::set_intersection&#xff1a;是 C20 引入的一个算法&#xff0c;用于计算两个已排序范围的交集。它将两个范围的交集元素复制到输出范围中。 std::ranges::set_intersection 用于计算两个已排序范围的交集。它将两个范围的交集元素复制到输出范围中。 注意事项…...

消息中间件深度剖析:以 RabbitMQ 和 Kafka 为核心

在现代分布式系统和微服务架构的构建中&#xff0c;消息中间件作为一个不可或缺的组件&#xff0c;承担着系统间解耦、异步处理、流量削峰、数据传输等重要职能。尤其是在面临大规模并发、高可用性和可扩展性需求时&#xff0c;如何选择合适的消息中间件成为了开发者和架构师们…...

笔试题笔记#6 模拟三道题和总结知识

两小时快乐模拟&#xff0c;最终三百分耻辱下播&#xff0c;&#xff08;刷的题三道一组&#xff0c;时长两小时&#xff0c;第一题100分&#xff0c;第二题200分&#xff0c;第三题300分&#xff09;&#xff0c;第三题完全想错了&#xff0c;其实挺简单的&#xff0c;就是好久…...