当前位置: 首页 > 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定时器控制并发数量核心机制 并发编程阶段练习重要的细节端口扫描股票监控 并发编程…...

3大颠覆突破!Wan2.2-TI2V-5B让消费级GPU生成720P视频成为现实

3大颠覆突破&#xff01;Wan2.2-TI2V-5B让消费级GPU生成720P视频成为现实 【免费下载链接】Wan2.2-TI2V-5B Wan2.2-TI2V-5B是一款开源的先进视频生成模型&#xff0c;基于创新的混合专家架构&#xff08;MoE&#xff09;设计&#xff0c;显著提升了视频生成的质量与效率。该模型…...

逆向工程入门:从Hook Cookie到RPC调用,一步步破解zp_stoken生成逻辑

逆向工程实战&#xff1a;解密zp_stoken生成与RPC远程调用技术解析 在当今数据驱动的互联网环境中&#xff0c;理解Web应用的安全机制成为开发者进阶的必修课。本文将带您深入一个典型的前端加密案例——zp_stoken的生成逻辑分析&#xff0c;并展示如何通过RPC技术实现自动化调…...

Python办公自动化教程 - openpyxl让Excel处理变得轻松

Python办公自动化教程 - openpyxl让Excel处理变得轻松适用人群&#xff1a;零基础办公人员、想提高工作效率的非IT专业人士 学习目标&#xff1a;掌握使用Python处理Excel文件&#xff0c;实现日常办公自动化 前置知识&#xff1a;不需要任何编程基础&#xff0c;只要会操作电脑…...

从零开始集成cv_resnet101_face-detection_cvpr22papermogface:Git版本控制与团队协作指南

从零开始集成cv_resnet101_face-detection_cvpr22papermogface&#xff1a;Git版本控制与团队协作指南 你是不是也遇到过这种情况&#xff1f;团队里几个人一起折腾一个AI项目&#xff0c;比如这个人脸检测模型。你刚在自己的电脑上把环境配好&#xff0c;代码跑通了&#xff…...

YOLOv9官方镜像实战入门:小白也能快速上手的目标检测教程

YOLOv9官方镜像实战入门&#xff1a;小白也能快速上手的目标检测教程 1. 为什么选择YOLOv9官方镜像&#xff1f; 目标检测是计算机视觉中最实用的技术之一&#xff0c;但环境配置往往让初学者望而却步。YOLOv9官方镜像解决了这个痛点&#xff0c;它预装了所有必要的依赖项&am…...

ComfyUI Qwen镜像部署与使用:小白也能轻松玩转AI图像生成

ComfyUI Qwen镜像部署与使用&#xff1a;小白也能轻松玩转AI图像生成 1. 认识Qwen-Image-Edit-F2P模型 Qwen-Image-Edit-F2P是一个专注于人脸控制的AI图像生成模型&#xff0c;它能够将一张简单的人脸照片转化为精美的全身图像。这个模型基于ComfyUI平台部署&#xff0c;让普…...

跨平台协作:Windows主机OpenClaw调用mac部署的Qwen3.5-9B

跨平台协作&#xff1a;Windows主机OpenClaw调用mac部署的Qwen3.5-9B 1. 为什么需要跨设备调用大模型&#xff1f; 去年我遇到一个典型困境&#xff1a;主力开发机是Windows台式机&#xff0c;但需要频繁调用大模型处理代码生成和文档分析。直接在Windows本地部署Qwen3.5-9B这…...

10个imaskjs性能优化技巧:大型表单与高频输入场景的终极实践指南

10个imaskjs性能优化技巧&#xff1a;大型表单与高频输入场景的终极实践指南 【免费下载链接】imaskjs vanilla javascript input mask 项目地址: https://gitcode.com/gh_mirrors/im/imaskjs imaskjs是一个功能强大的JavaScript输入掩码库&#xff0c;专为处理表单输入…...

JAVA自动装箱自动拆箱

自动装箱与自动拆箱深层次讲解自动装箱&#xff08;Autoboxing&#xff09;和自动拆箱&#xff08;Unboxing&#xff09;是Java语言中的特性&#xff0c;用于简化基本数据类型&#xff08;如int、double&#xff09;与其对应包装类&#xff08;如Integer、Double&#xff09;之…...

Robin机器人感知系统与持续学习技术

“Robin 面对的是一个万物皆在变化的世界” 一套先进的感知系统能够检测并学习自身错误&#xff0c;使 Robin 机器人能够在生产规模下从杂乱的包裹堆中选取单个物品。 作者&#xff1a;Alan S. Brown 2022年4月18日 阅读时间&#xff1a;9分钟 相关内容 某机构的机器人手臂在安…...