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

【蓝桥杯软件赛 零基础备赛20周】第5周——高精度大数运算与队列

文章目录

  • 1. 数组的应用–高精度大数运算
    • 1.1 Java和Python计算大数
    • 1.2 C/C++高精度计算大数
      • 1.2.1 高精度加法
      • 1.2.2 高精度减法
  • 2. 队列
    • 2.1 手写队列
      • 2.1.1 C/C++手写队列
      • 2.1.2 Java手写队列
      • 2.1.3 Python手写队列
    • 2.2 C++ STL队列queue
    • 2.3 Java队列Queue
    • 2.4 Python队列Queue和deque
    • 2.5 例题
      • 2.5.1 C/C++代码
      • 2.5.2 Java代码
      • 2.5.3 Python
  • 3. 习题

1. 数组的应用–高精度大数运算

高精度算法就是大数的计算方法。超过64位的大数计算,Java和Python都能直接算,而C++不能直接算,需要用数组来模拟大数的存储。因此强烈建议大数运算使用Java或Python。

竞赛中常常用到很大的数组。强烈建议不要用动态分配,因为动态分配需要多写代码而且容易出错。定义为全局静态数组即可,而且不需要初始化为0,因为全局变量在编译时会自动初始化为全0。

#include <bits/stdc++.h>
using namespace std;
int a[10000000]; //定义一个很大的全局数组。自动初始化为0,不需要写成int a[10000000]={0};
int main(){cout << a[0];   //输出0return 0;
}

注意:C++开很大的数组时,必须放在所有函数外,不然会导致栈内存溢出!

这样写是错的:

#include <bits/stdc++.h>
using namespace std;
int main(){int a[10000000]={0}; //这样写是错的,大数组不能定义在函数内部cout << a[0];   //出错return 0;
}

另外,注意全局变量和局部变量的初值。全局变量如果没有赋值,在编译时被自动初始化为0。在函数内部定义的局部变量,若需要初值为0,一定要初始化为0,否则可能为莫名其妙的值。

#include <bits/stdc++.h>
using namespace std;
int a;                //全局变量自动初始化为0
int c = 999;          //赋值为999
int main(){int b;cout << a <<endl; //输出0cout << c <<endl; //输出999cout << b <<endl; //由于b没有初始化,这里输出莫名奇妙的值return 0;
}

1.1 Java和Python计算大数

Java和Python计算大数,理论上可以计算“无限大”的数,只要不超内存。

用下面的简单题说明Java和Python的大数计算。

【题目描述】 大数计算:输入两行表示两个整数。分别计算加、减、乘、除,分5行输出和、差、积、商、余数。

(1)Java代码。注意负数的计算,负数的加减乘都没问题,但是取余可能出错。

import java.math.BigInteger;
import java.util.Scanner; 
public class Main {     public static void main(String[] args) {Scanner sc=new Scanner(System.in);BigInteger a,b;a=sc.nextBigInteger();   b=sc.nextBigInteger(); System.out.println(a.add(b)); System.out.println(a.subtract(b));  System.out.println(a.multiply(b)); System.out.println(a.divide(b)); System.out.println(a.mod(b));     //注意:如果b是负数,这里可能报错}                     
}

(2)Python代码。注意负数的计算,加减乘都没问题,但是除法和求余的结果可能比较奇怪。

a=int(input())
b=int(input())
print(a+b)
print(a-b)
print(a*b)
print(a // b)    #注意:如果a或b是负数,除法的结果可能比较怪,例如123//(-10)得-13
print(a % b)     #注意:如果a或b是负数,求余的结果可能比较怪,例如123%(-10) 得-7

1.2 C/C++高精度计算大数

C++能表示的最大整数是64位的long long,如果需要计算更大的数,需要使用“高精度”。对于加减乘除四种计算,模拟每一位的计算,并处理进位或借位。

  1. 数字的读取和存储。因为整数a和b太大,无法直接赋值给C++的变量,不能按数字读入,只能按字符读入。大数a用字符串string读入,一个字符存一位数字。注意存储的顺序,读入的时候,数字的左边是高位,右边是低位,即a[0]是最高位,a[n-1]是最低位;但是计算时习惯用a[0]表示最低位,a[n-1]表示最高位,所以需要把输入的字符串倒过来。
  2. 加法和减法。简单地模拟即可。
  3. 乘法。模拟小学竖式乘法操作,例如34×67,计算过程:计算结果用int a[]存储,首先算出a[0]=4×7=28,a[1]=3×7+4×6=21+24,a[2]=3×6=18,然后处理进位,得到乘积2278。
  4. 除法。直接做除法有点麻烦,简单一点的方法是利用减法。例如a除以b,转化为a连续减去b,减了多少次就是商,最后不够减的是余数。

1.2.1 高精度加法

链接:大整数加法
把输入的数字存到字符串中,然后在add()中把字符转成数字,做完加法后再转回字符。

#include<bits/stdc++.h>
using namespace std;
int na[1005],nb[1005];  //加数和被加数
string add(string a,string b){int lena=a.size(),lenb=b.size();for(int i=0;i<lena;i++)na[lena-1-i] = a[i]-'0';  //把字符转成数字,然后翻转,使na[0]是最低位for(int i=0;i<lenb;i++)nb[lenb-1-i] = b[i]-'0';int lmax = lena>lenb ? lena : lenb;for(int i=0;i<lmax;i++) {na[i] += nb[i];na[i+1] += na[i]/10;   //处理进位na[i]%=10;}if(na[lmax]) lmax++;        //若最高位相加后也有进位,数字长度加1string ans;for(int i=lmax-1;i>=0;i--)  //把数字转成字符,然后翻转ans += na[i]+'0';return ans;
}
int main(){string a,b;cin >> a >> b;cout << add(a,b);return 0;
}

1.2.2 高精度减法

#include<bits/stdc++.h>
using namespace std;
int na[1005],nb[1005];             //被减数和减数
string sub(string a,string b){if(a == b) return "0";         //特判一下是否两数字相等bool neg = 0;                  //标记是否为负数if(a.size() < b.size() || a.size() == b.size() && a < b)swap(a, b), neg = 1;      //让a大于bint lena=a.size(),lenb=b.size();for(int i=0;i<lena;i++)        //把字符转成数字,然后翻转,使na[0]是最低位na[lena-1-i]=a[i]-'0';for(int i=0;i<lenb;i++)nb[lenb-1-i]=b[i]-'0';int lmax = lena;for(int i=0;i<lmax;i++){na[i] -= nb[i];if(na[i]<0){                //处理借位na[i]+=10;na[i+1]--;}}while(!na[--lmax] && lmax>0)    //找到首位为0的位置;                          //什么都不做lmax++;string ans;for(int i=lmax-1;i>=0;i--)       //把数字转成字符,然后翻转ans += na[i]+'0';if(neg) ans = "-" + ans;          //查询一下是否为负数return ans;
}
int main(){string a,b;cin>>a>>b;cout<<sub(a,b);return 0;
}

1.2.3 高精度乘法

链接:大整数乘法

#include<bits/stdc++.h>
using namespace std;
int na[1005], nb[1005], nc[1000005];
string mul(string a,string b){if(a=="0"||b=="0")  return "0";int lena=a.size(),lenb=b.size();for(int i=0;i<lena;i++)na[lena-i]=a[i]-'0';for(int i=0;i<lenb;i++)nb[lenb-i]=b[i]-'0';for(int i=1;i<=lena;i++)for(int j=1;j<=lenb;j++)nc[i+j-1] += na[i]*nb[j];for(int i=1;i<=lena+lenb;i++)nc[i+1]+=nc[i]/10,nc[i]%=10;string ans;if(nc[lena+lenb])  ans += nc[lena+lenb]+'0';for(int i=lena+lenb-1;i>=1;i--) ans += nc[i]+'0';return ans;
}
int main(){string a,b;cin>>a>>b;cout<<mul(a,b);return 0;
}

1.2.4 高精度除法

#include<bits/stdc++.h>
using namespace std;
string sub(string a,string b){//模拟大整数减法 string res;int n=a.size(),m=b.size(),i,by=1;reverse(a.begin(),a.end());reverse(b.begin(),b.end());for(i=0;i<m;++i){int t=a[i]-b[i]+9+by;res+=t%10+'0';by=t/10;}for(;i<n;++i){int t=a[i]-'0'+9+by;res+=t%10+'0';by=t/10;}//消去前缀零 while(res[--i]=='0'&&i>0);res=res.substr(0,i+1);reverse(res.begin(),res.end());return res; 
}
int main(){string s1,s2,res,ans;cin>>s1>>s2;bool h=false;int n=s1.size(),m=s2.size(),t;//查找被除数末端非零位 int f=n-1;while(s1[f]=='0')f--;//模拟除法 for(int i=0;i<n;++i){//遍历被除数 ans+=s1[i];t=0;while(ans.size()>m||ans.size()==m&&ans>=s2){//具体操作 ans=sub(ans,s2);//用减法模拟除法 t++;} if(t||h){//等待商的首位 h=true;res+=t+'0';}if(ans.empty()&&i>=f){//处理后缀零 while(++i<n)res+='0'; }}if(res.empty())res+='0';//余数为零 if(ans.empty())ans+='0';//商为零 cout<<res<<endl<<ans;return 0;
} 

2. 队列

队列中的数据存取方式是**“先进先出”**,只能往队尾插入数据、从队头移出数据。队列的原型在生活中很常见,例如食堂打饭的队伍,先到先服务,不能插队。

下图是队列的原理,队头head指向队列中的第一个元素 a 1 a_1 a1,队尾tail指向队尾最后一个元素 a n a_n an。元素只能从队头方向出去,元素只能从队尾进入队列。
在这里插入图片描述
对于栈、队列、动态数组等,竞赛中一般都用各个语言写好的类和方法,直接调用。但是为了大家更好的理解队列,需要自己先实现手写队列作为练习。

2.1 手写队列

2.1.1 C/C++手写队列

队列的代码很容易实现。如果使用环境简单,最简单的手写队列代码用数组实现。

const int N = 10000; 	  //定义队列容量,确保够用
int que[N];              //队列,用数组模拟
int head = 0;            //head始终指向队头。que[head]是队头。开始时队列为空,head = 0
int tail = -1;           //tail始终指向队尾。que[tail]是队尾。开始时队列为空,tail = -1//队列长度等于tail-head+1
head++;                  //弹出队头元素,让head指向新队头。注意保持head <= tail
que[head];               //读队头
que[++tail] = data;      //入队:先tail加1,然后数据data入队。注意tail必须小于N

这个手写代码有一个严重缺陷:如果进入队列的数据太多,使得tail超过了N,数组que[N]就会溢出,导致出错。

用下面的例子给出上述手写代码的应用:约瑟夫问题

约瑟夫问题是一个经典问题,可以用队列、链表等数据结构实现。下面的代码用队列来模拟报数。如果不理解代码,可以模拟执行的过程。

#include <bits/stdc++.h>
using namespace std;
const int N = 10000;  //定义队列大小,确保够用
int que[N];
int head=0, tail=-1;
int main(){int n,m;cin>>n>>m;for(int i=1;i<=n;i++)  que[++tail] = i;while((tail-head+1)!=0){for(int i=1;i<m;i++){que[++tail] = que[head];head++;}cout << que[head] << " ";head++;}cout<<endl;return 0;
}

代码第3行定义了队列的容量N = 10000。本题的n最大是100,每人出圈一次,所以队列长度一定不超过100×100。如果把N设置小了,例如N=2000,提交到OJ会返回RE,即Runtime Error,说明溢出了。

如果要防止溢出,可以使用循环队列。在上面例子中,只需要设置一个N=100的循环队列即可。

手写循环队列的代码见:手写循环队列

队列是一种线性数据结构,线性数据结构的主要缺点是查找较慢。要在队列中查找某个元素,只能从头到尾一个个查找。

2.1.2 Java手写队列

下面是Java的手写队列代码,和C++代码基本一样。

import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[] que = new int[10000];      // 定义队列大小,确保够用int head = 0, tail = -1;for (int i = 1; i <= n; i++)     que[++tail] = i;        while ((tail - head + 1) != 0) {for (int i = 1; i < m; i++) {que[++tail] = que[head];head++;}System.out.print(que[head] + " ");head++;}System.out.println();}
}

2.1.3 Python手写队列

下面是Python的手写队列代码。这个手写队列是用list实现的,进队尾用append()实现,队列自动扩展,不会有溢出问题。

n, m = map(int, input().split())
que = [i for i in range(1, n+1)]
head, tail = 0, n-1              #队头和队尾
while tail - head + 1 != 0:for i in range(1, m):que.append(que[head])head += 1tail += 1print(que[head], end=' ')head += 1

2.2 C++ STL队列queue

C++STL官方文档:英文主页 https://en.cppreference.com/,或中文主页https://zh.cppreference.com/

queue的文档:https://en.cppreference.com/w/cpp/container/queue

一个比较全的 C++ STL博客:https://wyqz.top/p/870124582.html

竞赛时一般不自己手写队列,而是用STL queue,而且没有溢出的问题,大大加快了做题速度。STL queue的主要操作见下表。

在这里插入图片描述
这里有篇博文可以参考:STL queue

下面是 约瑟夫问题 的STL queue实现。

#include <bits/stdc++.h>
using namespace std;
int main(){int n,m;cin>>n>>m;queue<int>q;for(int i=1;i<=n;i++)   q.push(i);while(!q.empty()){for(int i=1;i<m;i++){q.push(q.front());q.pop();}cout << q.front() << " ";q.pop();}cout<<endl;return 0;
}

2.3 Java队列Queue

Java官方文档:https://docs.oracle.com/en/java/

Queue的文档:https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/Queue.html

Java用LinkedList实现基本队列Queue。常用操作有:

在这里插入图片描述
这篇博文可以参考:Java队列

下面是 约瑟夫问题 的Java Queue实现。

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();Queue<Integer> q = new LinkedList<>();for (int i = 1; i <= n; i++)    q.offer(i);while (!q.isEmpty()) {for (int i = 1; i < m; i++) {q.offer(q.peek());q.poll();}System.out.print(q.peek() + " ");q.poll();}}
}

2.4 Python队列Queue和deque

Python官方文档:https://docs.python.org/3/

deque文档:https://docs.python.org/3/library/collections.html#collections.deque

Python的队列可以用list、Queue、deque实现。

下面先用Queue实现 约瑟夫问题 。

from queue import Queue
n, m = map(int, input().split())
q = Queue()
for i in range(1, n+1):     q.put(i)
while not q.empty():for i in range(1, m):   q.put(q.get())print(q.get(), end=' ')

不过,建议算法竞赛只使用deque,不要用queue。算法竞赛的代码都是单线程的,在这种场景下,deque比Queue快很多。

deque是双向队列,队头和队尾都能插入和弹出。当成普通队列使用时,只用它的队头弹出、队尾插入功能即可。deque的常用操作有:

参考博文:Deque

下面用deque实现 约瑟夫问题 。

from collections import deque
n, m = map(int, input().split())
dq = deque(range(1, n+1))
while dq:dq.rotate(-(m-1))                 #把前m-1个数挪到队列尾部print(dq.popleft(), end=' ')      #队头是第m个数,删除并打印它。

2.5 例题

机器翻译

用一个哈希表hashtable[]模拟内存,若hashtable[x]=true,表示x在内存中,否则不在内存中。用队列queue对输入的单词排队,当内存超过M时,删除队头的单词。

2.5.1 C/C++代码

#include<bits/stdc++.h> 
using namespace std;
queue<int> q;
int h[1010];
int main()
{int n, m;cin >> m >> n;int res = 0;for (int i = 1; i <= n; i++) {int x;cin >> x;if (h[x] != 1) {res++;if (q.size() >= m) {h[q.front()] = 0;q.pop();}q.push(x);h[x] = 1;}}cout << res << endl;return 0;
}

2.5.2 Java代码

import java.util.*;
public class Main {static boolean[] hashtable = new boolean[1003];static Queue<Integer> q = new LinkedList<>(); //使用LinkedList实现队列public static void main(String[] args) {int m, n;Scanner scanner = new Scanner(System.in);m = scanner.nextInt();n = scanner.nextInt();int ans=0;for (int i = 0; i < n; i++) {int x = scanner.nextInt();if (hashtable[x] == false) {hashtable[x] = true;if (q.size() < m)q.add(x); //使用add方法添加元素到队列中else {//int front = ; //使用poll方法取出队列头部元素并移除hashtable[q.poll()] = false;q.add(x);}ans++;}}System.out.println(ans);}
}

2.5.3 Python

from collections import deque  
hashtable = [False] * 1003  # 哈希表初始化,默认为False  
m, n = map(int, input().split())  # 输入m和n  
ans = 0      # 初始化答案为0  
q = deque()  # 初始化队列  
line =  list(map(int, input().split()))  #读第2行
for x in line:                           #处理每个数   if hashtable[x] is False:  # 如果x不在哈希表中  hashtable[x] = True  # 将x加入哈希表  if len(q) < m:  # 如果队列未满  q.append(x)  # 将x加入队列  else:  # 如果队列已满  hashtable[q.popleft()] = False  # 将队列首元素出队并从哈希表中删除  q.append(x)  # 将x加入队列  ans += 1  # 答案加1  
print(ans)  # 输出答案 

3. 习题

餐厅排队

小桥的神秘礼物盒

相关文章:

【蓝桥杯软件赛 零基础备赛20周】第5周——高精度大数运算与队列

文章目录 1. 数组的应用–高精度大数运算1.1 Java和Python计算大数1.2 C/C高精度计算大数1.2.1 高精度加法1.2.2 高精度减法 2. 队列2.1 手写队列2.1.1 C/C手写队列2.1.2 Java手写队列2.1.3 Python手写队列 2.2 C STL队列queue2.3 Java队列Queue2.4 Python队列Queue和deque2.5 …...

C#:程序发布的大小控制

.net不讨喜有个大原因就是.net平台本身太大了&#xff0c;不同版本没有兼容性&#xff0c;程序依赖哪个版本用户就要安装哪个版本&#xff0c;除非你恰好用的是操作系统默认安装的版本——问题是不同版本操作系统默认安装的不一样。 所以打包程序就很头疼&#xff0c;不打包平台…...

Python中的split()、rsplit()、splitlines()的区别

split、rsplit、splitlines的区别 1、split()2、rsplit()3、splitlines() Python提供了三种字符串分割的方法&#xff1a;split()、rsplit()和splitlines()&#xff1b;本文主要通过案例介绍这三种字符串分割函数的区别 1、split() split()主要用于从左向右匹配分割符进行分割…...

上位机开发框架:QT与winform/wpf对比

QT QT 是一个跨平台的 C 应用程序框架&#xff0c;它提供了丰富的 UI 组件和功能强大的网络通信、数据库操作等模块。QT 的优势在于其良好的跨平台性能&#xff0c;可以方便地部署在 Windows、Linux、macOS 等不同操作系统上。此外&#xff0c;QT 还具有强大的 UI 设计能力&am…...

Halcon tiff 点云读取以及平面矫正

一、读取tiff 图 dev_close_window () dev_open_window (0, 0, 512, 512, black, WindowHandle)xResolution:0.0025 yResolution:0.0025 zResolution:0.001 read_image (IntputImage, C:/Users/alber/Desktop/2023-08-15_16-38-24-982_/Sta5_002.tif) zoom_image_factor (Intpu…...

详解Spring中基于注解的Aop编程以及Spring对于JDK和CGLIB代理方式的切换

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…...

百度/抖音/小红书/微信搜索品牌形象优化怎么做?

搜索口碑是网络营销不可或缺的一部分&#xff0c;企业如何做好品牌搜索口碑优化呢&#xff1f;小马识途营销顾问建议从以下几方面入手。 1. 通过关键字优化提高自身知名度 通过对竞争对手和目标客户的关键字进行分析&#xff0c;企业可以确定哪些关键字可以提高自身品牌知名度。…...

爬虫学习(三)用beautiful 解析html

安装库 import requests from bs4 import BeautifulSoup headers {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"} for start_num in range(0,250…...

OSG编程指南<十四>:OSG纹理渲染之普通纹理、多重纹理、Mipmap多级渐远纹理及TextureRectangle矩阵纹理

1、纹理映射介绍 物体的外观不仅包括形状&#xff0c;不同物体表面有着不同的颜色和图案。一个简单而有效地实现这种特性的方法就是使用纹理映射。在三维图形中&#xff0c;纹理映射&#xff08;Texture Mapping&#xff09;的方法运用广泛&#xff0c;使用该技术可以大大提高物…...

Langchain-Chatchat的安装过程

参考&#xff1a;LLMs之RAG&#xff1a;LangChain-Chatchat(一款中文友好的全流程本地知识库问答应用)的简介(支持 FastChat 接入的ChatGLM-2/LLaMA-2等多款主流LLMs多款embe_一个处女座的程序猿的博客-CSDN博客 1、安装过程中出现了 GPU驱动版本 是11.8 而 python -c "…...

Windows系列:Windows Server 2012 R2 安装VMware Tools的正确姿势(实现物理机和虚拟机文件互传)

Windows Server 2012 R2 安装VMware Tools的正确姿势(实现物理机和虚拟机文件互传) 安装环境安装步骤一. 安装补丁下面进入教程首先打开虚拟机,点击"虚拟机"选项中的"安装VMware Tools"点击确定如果出现下图中的问题,说明虚拟机中缺少更新程序,我们需…...

最长连续递增序列

最长连续递增序列 描述 : 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&#xff08;l < r&#xff09;确定&#xff0c;如果对于每个 l < i < r&#xff0c;都有 …...

FreeRTOS入门--任务

目录 一、什么是任务 二、创建任务---xTaskCreate函数 三、任务的删除 四、任务优先级 1.阻塞状态(Blocked) 2.暂停状态(Suspended) 3.就绪状态(Ready) 五、Delay 六、调度算法 一、什么是任务 在FreeRTOS中&#xff0c;任务就是一个函数&#xff0c;原型如下&#xff…...

4个解决特定的任务的Pandas高效代码

在本文中&#xff0c;我将分享4个在一行代码中完成的Pandas操作。这些操作可以有效地解决特定的任务&#xff0c;并以一种好的方式给出结果。 从列表中创建字典 我有一份商品清单&#xff0c;我想看看它们的分布情况。更具体地说&#xff1a;希望得到唯一值以及它们在列表中出…...

【已解决】AttributeError: module ‘gradio‘ has no attribute ‘Image‘

问题描述 AttributeError: module gradio has no attribute Image 不知道作者用的是哪个gradio版本&#xff0c;最新的版本报错AttributeError: module gradio has no attribute outputs &#xff0c; 换一个老一点的版本会报错AttributeError: module gradio has no attribute…...

高级软件工程15本书籍

如果您想学习软件工程技能并提高您的专业知识&#xff0c;那么这里是您的最佳选择。我们有一本很棒的书&#xff0c;可以极大地增强您在软件工程方面的知识。 1&#xff09;干净的代码 Robert C. Martin 写了一本名为“干净代码&#xff1a;敏捷软件工艺手册”的书。在本书中&…...

计网Lesson3 - 计算机网络评价指标与封包解包

文章目录 计算机网络的性能指标1. 速率2. 带宽3. 吞吐量4. 时延5. 时延带宽积6. 往返时间7. 利用率8. 数据的解包和封包 计算机网络的术语实体![实体](https://img-blog.csdnimg.cn/direct/cbf4ca9ed5ab4df290b5a17b4642c6a1.png)协议服务 计算机网络的性能指标 1. 速率 数据…...

深度学习好文记录,反复学习

recent update time&#xff1a;2023.12.2 深度学习入门 - 知乎、这本书也很好&#xff0c;作者写的专栏不错。 机器学习&#xff0c;深度学习一些好文_一只菜得不行的鸟的博客-CSDN博客 卷积神经网络学习路线&#xff08;五&#xff09;| 卷积神经网络参数设置&#xff0c;提…...

CSS浅谈动画性能

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目的一、举个栗子二、性能分析1.从图层分析2.性能分析 总结 目的 为了探究使用动画时&#xff0c;『transform』和『width、height、margin等』的差异 一、举个栗子…...

万能的视频格式播放器

今天博主给大家带来一款“万能”的视频播放器——VLC Media Player&#xff0c;支持的文件格式非常多&#xff0c;大家快来一起看看吧&#xff01; VLC Media Player 是一款可播放大多数格式&#xff0c;而无需安装编解码器包的媒体播放器。可以播放 MPEG-1、MPEG-2、MPEG-4、D…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...