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

【C++编程探索】01前缀和来临!优点多多!八千字详解

个人主页:PingdiGuo_guo

收录专栏:C++干货专栏

【PingdiGuo_guo:一名C++、数据结构、算法等爱好者,用所学帮助大家,感谢关注!】

新年刚过,在这里先祝各位

新年快乐!!!

1.引,01前缀和的登场

俗活说“新年新气象”,我们也要努力做题了,但有一道前缀和的题,PingdiGuo_guo却遇到了问题,原因是:普通的前缀和解法太慢了,导致超时问题。为避免大家踩坑(PingdiGuo_guo也顺便了解一下),我特地查了一下,发现有一种好的前缀和——

01前缀和!!!(当当啷当

目录

1.引,01前缀和的登场

2. 01前缀和的自我展示

2.1.我的出现

2.2.我的概念是?

2.3.如何和我交盆友?

2.3.1.我的样子

2.3.2.我的用法

3.关于我的番外(其他)

3.1.我与亲戚(普通前缀和)的区别?

3.2.我的特长(应用)

示例应用场景

4.我的帮助例子(题目)

4.1.新二进制

4.1.1题目

题目描述

输入格式

输出格式

数据范围

样例数据

4.1.2.思路

4.1.3.代码

5.总结


2. 01前缀和的自我展示

Hello everyone! 我是01前缀和(憨憨音),PingdiGuo_guo邀请我来他的博客,那么各位,接下来我要自我介绍了哈!

2.1.我的出现

哲学家黑格尔说“理性存在,即为合理”,没错,我提高了普通前缀和的效率,即便普通前缀和能应对大多数情况,但也有例外(比如PingdiGuo_guo的题,嘿嘿),这时候我就上场啦!

2.2.我的概念是?

前缀和大家应该都熟悉(就是把前一项累加),我是一种前缀和家族的特殊一员,通常用于处理二进制数据或特定状态的累积问题。

PingdiGuo_guo:与常见的前缀和不同,它的计算基于二进制位的0和1,适用于处理类似开关状态、二进制掩码或位运算等问题。

2.3.如何和我交盆友?

2.3.1.我的样子

PingdiGuo_guo:为了方便大家了解,我现在给大家用常用工具Excel表格演示一下,(如表)。

假设有一个十进制数组 A

位置数组 A普通前缀和01 前缀和 (使用 XOR)
1111
2231 XOR 2 = 3
336(1 XOR 2) XOR 3 = 0
4410

(1 XOR 2 XOR 3) XOR 4 =4

避免大家混淆,来点说明:

1.普通前缀和:从第一个元素开始,逐步累加所有元素的值。

  • 例如,位置 2 的普通前缀和是 1 + 2 = 3,位置 3 的普通前缀和是 1 + 2 + 3 = 6

2.01 前缀和(使用 XOR):使用二进制运算中的异或(XOR)操作来计算前缀和。

  • XOR 运算规则
    • a XOR a = 0(相同数字异或结果为 0)
    • a XOR 0 = a(0 异或任何数结果为该数)
    • a XOR b = b XOR a(交换律)
  • 计算过程:
    • 位置 1:0 (初始值) XOR 1 = 1
    • 位置 2:1 XOR 2 = 3
    • 位置 3:3 XOR 3 = 0
    • 位置 4:0 XOR 4 = 4
    • 注意:其实01前缀和就是异或前一个的结果,只不过符号变了。

据说图像更能帮助记忆,不知道这个(图像+文字说明  能不能更好帮助大家记住。

01前缀和:又到了我的时间,既然大家都明白我的过程了,老话说:看会和做会是两码事。那么就让PingdiGuo_guo用C++和Python代码来演示一下吧!请看~~~(憨憨音)

C++代码:

#include<bits/stdc++.h>//万能头文件
using namespace std;
int a[20]={1,2,3,4};
int s[20],t[20];//s数组代表普通的前缀和,t数组代表01前缀和
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int i;//循环变量s[0]=t[0]=a[0];//特殊处理:第一个cout<<"普通: "<<s[0]<<' ';for(i=1;i<=3;i++)//普通前缀和演示过程,注意i从2开始{s[i]=a[i]+s[i-1];//加上前一个cout<<s[i]<<' ';}cout<<'\n'<<"01: "<<t[0]<<' ';for(i=1;i<=3;i++)//01前缀和过程{t[i]=t[i-1]^a[i];//异或:^cout<<t[i]<<' ';}return 0;
}

C++代码运行结果:

Python代码:

a = [1, 2, 3, 4]
s = [0] * len(a)
t = [0] * len(a)# 初始化s数组(普通前缀和)
s[0] = a[0]
for i in range(1, len(a)):s[i] = s[i-1] + a[i]# 初始化t数组(01前缀和)
t[0] = a[0]
for i in range(1, len(a)):t[i] = t[i-1] ^ a[i]print("普通前缀和:", end=" ")
print(s)
print("01前缀和:", end=" ")
print(t)

说明:

  1. 初始化数组a
  2. 分别计算普通前缀和s和01前缀和t
  3. 输出结果(与C++相同)

2.3.2.我的用法

1. 单点和

单点和是指数组中某一个元素的值。使用异或运算的前缀和可以用来快速计算区间和,但单点和本身不需要前缀和的支持,可以直接从数组中获取。

语言解释:

单点和是从数组中直接访问某一个元素的值。
异或运算的前缀和主要用于计算区间和,单点和可以直接通过数组索引访问。

代码片段:

vector<int> arr = {1, 2, 3, 4, 5};
int singlePoint = arr[2]; // 访问第三个元素(索引为2)

2.区间和

区间和是指数组中某一段区间 [l, r] 内所有元素的累加和。使用异或运算的前缀和可以快速计算区间和。

语言解释:

使用异或运算的前缀和数组 prefix,其中 prefix[i] 表示从数组起点到第 i 个元素的异或结果。
区间和可以通过 prefix[r] ^ prefix[l-1] 计算,前提是数组中元素的异或满足结合律。

代码片段:

vector<int> arr = {1, 2, 3, 4, 5};
vector<int> prefix(arr.size() + 1, 0);
prefix[0] = 0;
for (int i = 0; i < arr.size(); ++i) {prefix[i+1] = prefix[i] ^ arr[i];
}
int l = 1, r = 3; // 区间[1,3](1-based索引)
int intervalSum = prefix[r] ^ prefix[l-1]; // 区间和为6

3. 区间最值

区间最值指的是数组中某一段区间 [l, r] 内的最大值或最小值。使用异或运算的前缀和可以辅助计算区间最值。

语言解释:

异或运算的前缀和可以用于快速计算区间和,但区间最值需要遍历区间内的所有元素。
通过预处理数组的最大值和最小值,可以在常数时间内查询区间最值。

代码片段:

vector<int> arr = {1, 2, 3, 4, 5};
int l = 1, r = 3; // 区间[1,3](1-based索引)
int minVal = *min_element(arr.begin() + l - 1, arr.begin() + r);
int maxVal = *max_element(arr.begin() + l - 1, arr.begin() + r);

4. 数组预处理

数组预处理指对数组进行某种形式的预处理,以便后续操作更快。使用异或运算的前缀和可以用于数组预处理。

语言解释:

使用异或运算的前缀和数组 prefix,其中 prefix[i] 表示从数组起点到第 i 个元素的异或结果。
预处理后,可以通过简单计算得到区间和。

代码片段:

vector<int> arr = {1, 2, 3, 4, 5};
vector<int> prefix(arr.size() + 1, 0);
prefix[0] = 0;
for (int i = 0; i < arr.size(); ++i) {prefix[i+1] = prefix[i] ^ arr[i];
}

5. 差分

差分数组用于处理区间更新和单点查询的问题。使用异或运算的前缀和可以辅助实现差分数组。

语言解释:

使用异或运算的差分数组 diff,其中 diff[l] ^= value 和 diff[r+1] ^= value 表示对区间 [l, r] 进行更新。
预处理后,可以通过遍历 diff 数组得到更新后的数组。

代码片段:

vector<int> arr = {1, 2, 3, 4, 5};
vector<int> diff(arr.size() + 2, 0);
int l = 1, r = 3, value = 10; // 更新区间[1,3](1-based索引)
diff[l] ^= value;
diff[r+1] ^= value;// 应用差分
for (int i = 1; i < diff.size(); ++i) {diff[i] ^= diff[i-1];
}// 输出结果
for (int i = 1; i < arr.size(); ++i) {arr[i] ^= diff[i];
}

6. 多维和

多维和指的是对二维或更高维数组进行前缀和计算。使用异或运算的前缀和可以用于多维数组的处理。

语言解释:

对二维数组 arr,使用异或运算的前缀和 prefix,其中 prefix[i][j] 表示从起点到 (i,j) 的异或结果。
多维前缀和可以用于快速计算矩形区域的异或结果。

代码片段:

vector<vector<int>> arr = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
vector<vector<int>> prefix(arr.size() + 1, vector<int>(arr[0].size() + 1, 0));for (int i = 0; i < arr.size(); ++i) {for (int j = 0; j < arr[0].size(); ++j) {prefix[i+1][j+1] = prefix[i+1][j] ^ prefix[i][j+1] ^ prefix[i][j];prefix[i+1][j+1] ^= arr[i][j];}
}// 计算矩形区域[l1, r1] x [l2, r2]的异或结果
int l1 = 1, r1 = 2; // 1-based行索引
int l2 = 1, r2 = 2; // 1-based列索引
int result = prefix[r1+1][r2+1] ^ prefix[l1-1][r2+1] ^ prefix[r1+1][l2-1] ^ prefix[l1-1][l2-1];

怎么样,大家明白我的用法了吗?

3.关于我的番外(其他)

3.1.我与亲戚(普通前缀和)的区别?

区别有以下几点:

1. 普通前缀和

  • 定义:数组中从第一个元素到第i个元素的所有元素的和。
  • 适用场景:用于计算任意子数组的和,适用于元素可以是任意整数的情况。
  • 计算方式:通过累加数组中的每个元素的值来计算前缀和。
  • 优点:计算简单,适用于元素范围广泛的场景。
  • 缺点:不适用于二进制数组的特定操作(如统计1的个数)。

2. 01前缀和(二进制前缀和)

  • 定义:数组中从第一个元素到第i个元素的所有元素的二进制异或(XOR)结果。
  • 适用场景:用于处理二进制数组,快速计算子数组的异或结果。
  • 计算方式:通过累加(异或操作)数组中的每个元素的值来计算前缀和。
  • 优点:特别适用于处理二进制数组,如统计1的个数、查找特定子数组的异或结果等。
  • 缺点:不适用于一般整数数组的和计算。

汇总一下,如表:

项目普通前缀和01前缀和(二进制前缀和)
定义数组中从第一个元素到第i个元素的和数组中从第一个元素到第i个元素的异或(XOR)结果
适用场景适用于计算任意子数组的和,元素是整数适用于处理二进制数组,计算子数组的异或结果
计算方式通过累加数组元素的值通过累加(异或操作)数组元素的值
优点简单易懂,适用于元素范围广泛的场景特别适用于二进制数组的快速计算
缺点不适用于二进制数组的特定操作(如统计1的个数)无显著缺点,但不适用于一般整数数组的和计算

总结一下,大家在使用时记得注意区分,数据大,速度快时就用01前缀和,否则就用普通前缀和。(不要混淆呦~~多看几遍)。

3.2.我的特长(应用)

01(二进制前缀和(Bitwise Prefix Sum)主要用于处理二进制数组(由0和1组成的数组)中的前缀和问题。以下是其主要的应用场景和用途:

项目描述
快速计算区间内1的个数通过二进制前缀和可以快速计算数组中某区间内1的个数,避免了每次都遍历子数组的时间开销。
处理二进制数组的特定问题例如,快速查找满足条件的子数组(如连续1的长度、特定模式的子数组等)。
高效前缀和查询在需要频繁查询前缀和的场景中,二进制前缀和可以提供高效(O(1)时间复杂度)的查询方式。
相关算法优化二进制前缀和常用于优化一些算法,例如模式匹配、滑动窗口等,减少时间复杂度。

示例应用场景

  1. 统计特定区间的1的个数
    给定一个二进制数组,可以预先计算二进制前缀和数组,然后通过前缀和快速求出任意区间的1的个数。

  2. 快速判断子数组是否全为1
    通过二进制前缀和可以快速判断某个子数组是否全为1,只需比较该区间的1的个数是否等于子数组的长度。

  3. 解决类似“最长连续1”的问题
    通过二进制前缀和可以快速找到最长连续1的子数组。

总之,二进制前缀和是一种高效的工具,能够帮助解决二进制数组相关的计数和查询问题。

4.我的帮助例子(题目)

4.1.新二进制

4.1.1题目

内存限制: 512 Mb时间限制: 1000 ms

题目描述

Bob 最近正在学习二进制,但二进制的每一位上只能是 00 或 11,这让 Bob 觉得很无趣,于是他研究出了一种新的二进制:每一位上只能是 −1−1 或 11!

Bob 想研究的新二进制数有 nn 位,它可以表示为 b1×20+b2×21+⋯+bn×2n−1b1​×20+b2​×21+⋯+bn​×2n−1,其中 bibi​ 等于 ±1±1。进一步地,Bob 认为一个区间 [l,r][l,r] 满足 1≤l≤r≤n1≤l≤r≤n 是正的,当且仅当其代表值 bl×2l−1+bl+1×2l+⋯+br×2r−1>0bl​×2l−1+bl+1​×2l+⋯+br​×2r−1>0,区间 [l,r][l,r] 是负的则表示代表值 <0<0。

请问正区间个数和负区间个数相差多少?换言之,将正区间的个数记为 AA,负区间的个数记为 BB,求 ∣A−B∣∣A−B∣ 的值。

输入格式

第一行一个整数 TT 表示数据组数,对于每组数据:

第一行一个整数 nn。

第二行 nn 个整数 b1∼nb1∼n​。

输出格式

对于每组数据,输出一行一个整数表示答案。

数据范围

对于 30%30% 的数据,1≤T≤101≤T≤10,1≤n≤501≤n≤50。

对于 60%60% 的数据,1≤T≤101≤T≤10,1≤n≤10001≤n≤1000。

对于 100%100% 的数据,1≤T≤1051≤T≤105,1≤n≤1051≤n≤105,∑n≤3×105∑n≤3×105,bi=1bi​=1 或 bi=−1bi​=−1。

样例数据

输入:

4
4
1 -1 1 1
3
-1 -1 -1
2
1 -1
2
1 1

输出:

6
6
1
3

说明:

样例解释:对于第三组数据,区间 [1,1],[1,2],[2,2] 的代表值分别为 1,-1,-2,则A=1,B=2,|A-B|=1。

4.1.2.思路

  1. 前缀和数组:我们定义一个前缀和数组 S,其中 S[i] 表示从第一个元素到第i个元素的和。这样,区间 [l, r] 的值可以表示为 S[r] - S[l-1]
  2. 维护有序列表:我们维护一个有序列表来记录已经处理过的前缀和值。对于每个新的前缀和值,我们使用二分查找来统计有多少个已经处理过的值小于当前值,这样可以快速确定正区间的数量。
  3. 计算结果:总区间数为 n*(n+1)/2。正区间数减去负区间数的绝对值即为结果。

4.1.3.代码

C++:

#include <bits/stdc++.h>
using namespace std;// 结构体Node用于表示有序集合中的元素,每个节点存储一个值和该值出现的次数
struct Node {int value;int count;Node(int v) : value(v), count(1) {}Node(int v, int c) : value(v), count(c) {}bool operator<(const Node& other) const {return value < other.value;}
};// vector<Node> sortedSet用于维护有序的集合
vector<Node> sortedSet;// 插入新的前缀和值到有序集合中
void insertNode(int s) {// 使用lower_bound找到插入位置auto it = lower_bound(sortedSet.begin(), sortedSet.end(), s);if (it != sortedSet.end() && it->value == s) {// 如果已经存在该值,增加计数it->count += 1;return;}// 创建新的Node并插入Node temp(s, 1);sortedSet.insert(it, temp);
}// 统计小于等于目标值s的元素数量
int countLess(int s) {int count = 0;auto it = lower_bound(sortedSet.begin(), sortedSet.end(), s);return it - sortedSet.begin();
}int main() {int T;  // 测试用例的数量cin >> T;for (int case_num = 0; case_num < T; ++case_num) {int n;  // 数组的长度cin >> n;vector<int> b(n);  // 输入数组for (int i = 0; i < n; ++i) {cin >> b[i];}// 计算前缀和数组Svector<int> S(n + 1);S[0] = 0;for (int i = 1; i <= n; ++i) {int bit = 1 << (i - 1);  // 计算2^(i-1)S[i] = S[i - 1] + b[i - 1] * bit;}// 清理并初始化有序集合sortedSet.clear();sortedSet.push_back(Node(0, 1));  // 初始节点,表示前缀和为0的情况int positive = 0;  // 正区间数累计器for (int j = 1; j <= n; ++j) {int s = S[j];  // 当前前缀和positive += countLess(s);  // 统计小于等于s的前缀和数量insertNode(s);  // 插入当前前缀和到有序集合中}int total = n * (n + 1) / 2;  // 所有可能的区间数int negative = total - positive;  // 负区间数cout << abs(positive - negative) << endl;  // 输出结果}return 0;
}

Python:

import bisectdef compute_difference():import sysinput = sys.stdin.read().split()ptr = 0T = int(input[ptr])ptr += 1for _ in range(T):n = int(input[ptr])ptr += 1b = list(map(int, input[ptr:ptr + n]))ptr += nS = [0] * (n + 1)for i in range(1, n + 1):bit = 1 << (i - 1)S[i] = S[i - 1] + b[i - 1] * bitsorted_S = [S[0]]positive = 0for j in range(1, n + 1):s = S[j]cnt = bisect.bisect_left(sorted_S, s)positive += cntbisect.insort(sorted_S, s)total = n * (n + 1) // 2negative = total - positiveprint(abs(positive - negative))compute_difference()

5.总结

感谢各位帅哥美女的支持,以上是对01前缀和的一遍博客,希望对大家有帮助,也希望大家给个赞,制作不易,谢谢!

相关文章:

【C++编程探索】01前缀和来临!优点多多!八千字详解

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 【PingdiGuo_guo&#xff1a;一名C、数据结构、算法等爱好者&#xff0c;用所学帮助大家&#xff0c;感谢关注&#xff01;】 新年刚过&#xff0c;在这里先祝各位 新年快乐&#xff01;&#xff01;&#xf…...

文件下载技术的终极选择:`<a>` 标签 vs File Saver.js

文件下载技术的终极选择&#xff1a;<a> 标签 vs File Saver.js 在 Web 开发中&#xff0c;文件下载看似简单&#xff0c;实则暗藏玄机。工作种常纠结于 <a> 标签的原生下载和 File Saver.js 等插件的灵活控制之间。本文将从原理、优缺点、场景对比到实战技巧&…...

《机器学习数学基础》补充资料:矩阵的LU分解

本文是对《机器学习数学基础》第2章2.3.3节矩阵LU分解的拓展。 判断是否可LU分解 并非所有矩阵都可以实现LU分解。 定理1&#xff1a; 若 n n n 阶可逆矩阵 A \pmb{A} A 可以进行LU分解&#xff0c;则 A \pmb{A} A 的 k k k 阶顺序主子阵&#xff08;leading principal s…...

[笔记.AI]AI知识科普提纲

仅供参考 1.AI基础认知 1.1什么是什么AI 1.2核心概念 1.2.1机器学习、深度学习、神经网络 1.2.2模型&#xff1a;模型、大模型、模型参数 1.2.3多模态 1.2.4生成式AI & 判别式AI 1.3发展与现状 2.大模型 2.1主流大模型 2.1.1分类 2.1.2各…...

Spring Security 如何防止 CSRF 攻击?

目录 一、CSRF 攻击简介二、Spring Security 防止 CSRF 攻击的机制1. 默认启用 CSRF 保护2. CSRF 令牌的生成与验证3. 配置与自定义4. 在请求中包含 CSRF 令牌 三、最佳实践四、总结 一、CSRF 攻击简介 CSRF&#xff08;Cross-Site Request Forgery&#xff09;攻击&#xff0…...

使用 Kubeflow 和 Ray 构建机器学习平台

使用 Kubeflow 和 Ray 构建一个稳健的 ML 平台。我们将深入讨论 Kubeflow 和 Ray 的独特功能,以及它们如何互补,共同创建一个强大的 ML 生态系统 集中化 ML 平台的需求 随着企业在 ML 旅程中的成熟,初始 ML 项目的临时性质逐渐让位于对更结构化和可扩展方法的需求。集中化…...

SEO炼金术(4)| Next.js SEO 全攻略

在上一篇文章 SEO炼金术&#xff08;3&#xff09;| 深入解析 SEO 关键要素 中&#xff0c;我们深入解析了 SEO 关键要素&#xff0c;包括 meta 标签、robots.txt、canonical、sitemap.xml 和 hreflang&#xff0c;并探讨了它们在搜索引擎优化&#xff08;SEO&#xff09;中的作…...

每日十个计算机专有名词 (7)

Metasploit 词源&#xff1a;Meta&#xff08;超越&#xff0c;超出&#xff09; exploit&#xff08;漏洞利用&#xff09; Metasploit 是一个安全测试框架&#xff0c;用来帮助安全专家&#xff08;也叫渗透测试人员&#xff09;发现和利用计算机系统中的漏洞。你可以把它想…...

StarRocks 在爱奇艺大数据场景的实践

作者&#xff1a;林豪&#xff0c;爱奇艺大数据 OLAP 服务负责人 小编导读&#xff1a; 本文整理自爱奇艺工程师在 StarRocks 年度峰会的分享&#xff0c;介绍了爱奇艺 OLAP 引擎演化及引入 StarRocks 后的效果。 在广告业务中&#xff0c;StarRocks 替换 ImpalaKudu 后&#x…...

蓝桥杯好题推荐----高精度乘法

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 题目链接 P1303 A*B Problem - 洛谷https://www.luogu.com.cn/problem/P1303 解题思路 这道题的思路&#xff0c;其实和前面差不多&#xff0c;我们主要说一下最为关键的部分&…...

Linux网络 数据链路层

在Linux网络中&#xff0c;数据链路层位于物理层之上&#xff0c;网络层之下&#xff0c;其主要职责是将网络层的IP数据包封装成帧&#xff0c;并通过物理链路发送到目标设备。同时&#xff0c;它还负责接收来自物理层的帧&#xff0c;并将其解封装为数据包&#xff0c;传递给网…...

量子计算可能改变世界的四种方式

世界各地的组织和政府正将数十亿美元投入到量子研究与开发中&#xff0c;谷歌、微软和英特尔等公司都在竞相实现量子霸权。 这其中的利害关系重大&#xff0c;有这么多重要的参与者&#xff0c;量子计算机的问世可能指日可待。 为做好准备&#xff0c;&#xff0c;我们必须了…...

React 组件基础介绍

基本概念&#xff1a;一个组件就是用户界面的一部分&#xff0c;可以有自己的逻辑和外观&#xff0c;组件之间可以互相嵌套、复用多次。每个组件就是一个首字母大写的函数&#xff0c;内部存放了组件的逻辑和试图UI&#xff0c;渲染组件只需要把组件 当成 标签 书写。App 可以视…...

ETL系列-数据抽取(Extract)

ETL的过程 1、数据抽取&#xff1a;确定数据源&#xff0c;定义数据接口&#xff0c;选择数据抽取方法&#xff08;主动抽取或由源系统推送&#xff09;。 2、数据清洗&#xff1a;处理不完整数据、错误数据、重复数据等&#xff0c;确保数据的准确性和一致性。&#xff08;是…...

java八股文之框架

1.Spring框架中的Bean是否线程安全的 Spring框架中的Bean默认是单例的&#xff0c;不是线程安全的。因为一般在Spring的bean的中都是注入无状态的对象&#xff0c;没有线程安全问题&#xff0c;如果在bean中定义了可修改的成员变量&#xff0c;是要考虑线程安全问题的&#xf…...

【大模型】Ubuntu下 fastgpt 的部署和使用

前言 本次安装的版本为 fastgpt:v4.8.8-fix2。 最新版本fastgpt:v4.8.20-fix2 问答时报错&#xff0c;本着跑通先使用起来&#xff0c;就没有死磕下去&#xff0c;后面bug解了再进行记录。   github连接&#xff1a;https://github.com/labring/FastGPT fastgpt 安装说明&…...

小程序中头像昵称填写

官方文档 参考小程序用户头像昵称获取规则调整公告 新的小程序版本不能通过wx.getUserProfile和wx.getUserInfo获取用户信息 <van-field label"{{Avatar}}" label-class"field-label" right-icon-class"field-right-icon-class"input-class&…...

卷积神经网络(cnn,类似lenet-1,八)

我们第一层用卷积核&#xff0c;前面已经成功&#xff0c;现在我们用两层卷积核&#xff1a; 结构如下&#xff0c;是不是很想lenet-1&#xff0c;其实我们24年就实现了sigmoid版本的&#xff1a; cnn突破九&#xff08;我们的五层卷积核bpnet网络就是lenet-1&#xff09;-CS…...

【NLP 27、文本分类任务 —— 传统机器学习算法】

不要抓着枯叶哭泣&#xff0c;你要等待初春的新芽 —— 25.1.23 一、文本分类任务 定义&#xff1a;预先设定好一个文本类别集合&#xff0c;对于一篇文本&#xff0c;预测其所属的类别 例如&#xff1a; 情感分析&#xff1a; 这家饭店太难吃了 —> 正类 …...

Go红队开发—并发编程

文章目录 并发编程go协程chan通道无缓冲通道有缓冲通道创建⽆缓冲和缓冲通道 等协程sync.WaitGroup同步Runtime包Gosched()Goexit() 区别 同步变量sync.Mutex互斥锁atomic原子变量 SelectTicker定时器控制并发数量核心机制 并发编程阶段练习重要的细节端口扫描股票监控 并发编程…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...

Linux基础开发工具——vim工具

文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...