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

数据结构与算法----顺序表和复杂度

嘻嘻,我们用c语言来手撕顺序表!!!全程高能比喻+代码实战,保证你笑着学会!!!

引言

1、数据结构是计算机存储、组织数据的方式。算法是一系列计算步骤,用来将输入数据转化成输出结果。

2、耗费时间资源和空间(内存)资源。

3、衡量一个算法的好坏,从时间和空间俩个维度去衡量。

一、复杂度

时间复杂度讲解:

递归算法的时间复杂度=单次递归的时间复杂度*递归次数

1.定义

时间复杂度是啥? 


官方黑话:描述算法运行时间随数据规模增长的趋势。  
人话翻译:你的代码在数据量爆炸时,会“慢成狗”还是“稳如老狗” ?  

核心思想:  
- 不看具体执行时间(毕竟CPU不同)  
- 只看增长趋势(数据量n→∞时,谁跑得更优雅)  

2. 大O表示法:程序员的凡尔赛
用 O(...) 表示时间复杂度,只保留**“最影响速度的部分”:  
- 忽略常数:O(2n) → O(n)   (最高阶系数存在且不为1,去掉这个项目的常数系数) 
- 忽略低次项:O(n² + 3n) → O(n²)  ,只保留最高阶,因为当n不断变大,低阶对结果影响很小了
- 对数底数也忽略:O(log₂n) → O(logn)  

举个栗子:  
- 土豪算法:不管数据多少,时间固定 → O(1)(像直接开保险箱拿钱)  
- 打工人算法:时间随数据量线性增长 → O(n)(像挨家挨户送快递)  
-996算法:时间指数爆炸 → O(n²)(像全员开会,每两人都要握手)  

3. 常见时间复杂度段位排行**  

| 段位         | 代号      | 生活案例                          | 代码案例                          |  
|--------------|-----------|-----------------------------------|-----------------------------------|  
| 常数时间 | O(1)      | 用钥匙开门                        | 数组按索引访问         |  
| 对数时间 | O(logn)   | 翻字典查单词                      | 二分查找                |  
| 线性时间 | O(n)      | 排队过安检                        | 遍历数组                    |  
| 线性对数 | O(nlogn)  | 全班同学各自翻字典                | 快速排序          |  
| 平方时间 | O(n²)     | 全员开会互相握手                  | 冒泡排序              |  
| 指数时间| O(2ⁿ)     | 病毒式传播                        | 穷举所有密码组合    |  
| 阶乘时间 | O(n!)     | 给n个人排座位的所有可能性

4、如何一眼看出时间复杂度?

(1)单层循环:---->O(n)

for(int i=0;i<n;i++)
{       //循环n次printf("打工第%d天\n",i);
}

数据量n多大,就循环多少次(线性增长)!!!

(2)双层嵌套循环---->O(n^2)

for(int i=0; i<n; i++) {       // 外层n次  for(int j=0; j<n; j++) {   // 内层n次  printf("社恐式握手:%d和%d\n", i, j);  }  
}  

总操作数=n*n=n^2---->平方增长

(3)循环减半--->O(logn)

while(n > 0) {  printf("n=%d\n", n);  n = n / 2;   // 每次砍半  
}  

解析:n经过多少次除以2会变成1?------>对数级(翻字典就是每次排除一半)

(4)递归分治----> O(nlogn)

void 归并排序(int arr[], int l, int r) {  if(l < r) {  int mid = (l+r)/2;  归并排序(arr, l, mid);      // 分治左半  归并排序(arr, mid+1, r);    // 分治右半  合并(arr, l, mid, r);       // O(n)的合并操作  }  
}  

解析:(1)分治层数:O(logn)每次分俩半

(2)每层合并:O(n) (3)总时间:O(nlogn)---->优雅的排序

5、时间复杂度的灵魂拷问

Q1:O(n)一定比O(1)慢吗? 
- 不一定!当n很小时,O(n)可能更快(比如n=5时,遍历5次比复杂计算快)  
- 但n→∞时,O(1)永远碾压O(n)  

Q2:O(2n)和O(n)有区别吗?
- 大O表示法认为没区别!只看趋势,常数系数忽略  
- 但实际编码中,2n比n慢一倍(优化时要注意)  

Q3:时间复杂度能100%反映实际速度吗? 
- 不能!比如同样O(n)的算法,一个循环内做加法,另一个做除法,实际速度不同  
- 时间复杂度是理论模型,实际速度还要看“常数项”和“硬件性能” 

6、实战:顺序表操作时间复杂度分析

(1)随机访问元素

int getElement(SeqList* list, int index) {  return list->data[index];  // 直接算地址:base + index*sizeof(int)  
}  

解析:时间复杂度O(1)(内存连续,一步到位)

(2)在位置i插入元素        

void insert(SeqList* list, int i, int value) {  // 需要把i之后的元素全后移 → 移动次数 = size - i  for(int k=list->size; k>i; k--) {  list->data[k] = list->data[k-1];  }  list->data[i] = value;  
}  

解析:时间复杂度:

(1)最好的情况是:插在末尾->O(1)(没人需要移动)

(2)最坏的情况是:插在开头->O(n)(全体后移,程序员落泪)

(3)平均情况:O(n).

(3)删除位置i的元素

void delete(SeqList* list, int i) {  // 需要把i之后的元素全前移 → 移动次数 = size - i -1  for(int k=i; k<list->size-1; k++) {  list->data[k] = list->data[k+1];  }  
}  

时间复杂度:和插入对称--->平均O(n)

7、总结归纳

【防秃指南】
1. 递归时间复杂度:用**递归树**或**主定理**分析(比如斐波那契数列O(2ⁿ)是灾难)  
2. 均摊时间复杂度:像顺序表动态扩容,单次插入可能是O(n),但均摊后是O(1)  
3. 空间换时间:哈希表用O(n)空间换O(1)查询时间  

---

【灵魂总结】
- O(1) < O(logn) < O(n) < O(nlogn) < O(n²) < O(2ⁿ)← 增长速度天梯图  
- 优化方向:把高阶复杂度向低阶转化(比如用哈希表将查找从O(n)→O(1))  
- 核心思想:不要纠结具体时间,关注数据量增长时的趋势!

空间复杂度讲解:(因为算法需要,需要临时开辟空间)

空间复杂度计算的是变量的个数;函数运行时所需要的栈空间在编译时就已经确定好了,因此空间复杂度主要是通过函数在运行时候显式申请的额外空间来确定。

创建变量需要申请空间

 【空间复杂度の灵魂拷问】
Q:空间复杂度是啥?能当饭吃吗? 
A:它衡量算法**执行时占用内存随数据量增长的趋势**,不是具体内存值!  
👉 举个栗子:  
- **背包问题**:背包容量是O(n),装的东西越多(数据量越大),空间需求越大  
- **递归调用**:像俄罗斯套娃,每递归一次就压一层栈 → 空间复杂度可能爆炸!  

举例:“代码的内存战场”

案例1、O(1)(极简主义)

int sum(int n) {  int result = 0;          // 只用了1个变量  for(int i=1; i<=n; i++) {  result += i;  }  return result;  
}  

无论n多大,只有固定数量的变量--->内存用量不随n增长

案例2、O(n)空间(搬家式编程)

int* copyArray(int arr[], int n) {  int* newArr = (int*)malloc(n * sizeof(int)); // 申请n个int的空间  for(int i=0; i<n; i++) {  newArr[i] = arr[i];  }  return newArr;  
}  

空间消耗与输入数据量n成正比---->数据翻倍,内存需求也翻倍!!!

案例3、O(n^2)空间(土豪式存储)

void createMatrix(int n) {  int** matrix = (int**)malloc(n * sizeof(int*));  for(int i=0; i<n; i++) {  matrix[i] = (int*)malloc(n * sizeof(int)); // 创建n×n的矩阵  }  
}  

解析:总空间=n^2--->当n=1000时,占用约4MB(假设int是4字节),n=10000时400MB!

案例4、O(logn)空间  (精致分层)

int binarySearchRecursive(int arr[], int left, int right, int target) {  if(left > right) return -1;  int mid = left + (right - left)/2;  if(arr[mid] == target) return mid;  else if(arr[mid] < target)   return binarySearchRecursive(arr, mid+1, right, target); // 递归右半  else  return binarySearchRecursive(arr, left, mid-1, target); // 递归左半  
}  

解析:递归深度=log2 n---->每次递归压栈,但是栈空间随对数增长!!!

注意知识点:

1、递归的隐藏成本

int fibonacci(int n) {  if(n <= 1) return n;  return fibonacci(n-1) + fibonacci(n-2); // 空间复杂度O(n)?错!实际是O(n)的栈深度  }  

实际空间复杂度是O(n),递归调用栈深度,但时间复杂度是O(2^n),指数灾难

2、临时变量的陷阱

void func(int n) {  int temp[n]; // C99变长数组 → 空间复杂度O(n)!  // ...  }  

虽然代码简洁,但可能引发栈溢出(大n时慎用)

3、空间复用技巧

// 优化前:O(n)空间  int* arr1 = malloc(n * sizeof(int));  int* arr2 = malloc(n * sizeof(int));  // 优化后:O(1)额外空间(原地操作)  for(int i=0; i<n; i++) {  arr1[i] = arr1[i] * 2; // 直接修改原数组  }  

空间 vs 时间の哲学抉择】 
- 空间换时间:哈希表用O(n)空间换取O(1)查询速度  
- 时间换空间:某些压缩算法用计算时间换取更小存储空间  
- 平衡之道:缓存策略(如LRU)在空间和时间之间找平衡  

【灵魂总结】
1. 空间复杂度看的是算法运行过程中申请的额外空间(不包括输入数据本身)  
2. 递归的空间复杂度 ≈ 递归深度 × 每次递归的空间消耗
3. 现代计算机内存充足,但处理海量数据时仍需警惕空间问题
4. 核心口诀:
   - 能用O(1)别用O(n)  
   - 警惕递归的空间地雷  
   - 二维数组是空间吞噬兽  

二、来自顺序表的自白

我,顺序表,c语言界的“动态数组plus”:

1、物理上连续:像军训队列每个元素必须贴贴站好

2、随机访问快:查元素像查寝室号,直接破门而入(O(1)时间复杂度)

3、增删慢如龟:中间插入/删除?全体元素军训式移动(O(n)时间复杂度)

三、代码的“解剖室”(动态顺序表的实现)

1、结构体定义(顺序表的“身份证”)

arr是指向动态数组的指针

typedef struct SeqList
{SLDataType* arr;int size;//有效数据个数int capacity;//空间容量
}SL;

2、初始化顺序表(申请地盘)

void SLInit(SL* ps)//形参  形参是实参值的拷贝
{ps->arr = NULL;//对指针通过箭头的方式来解引用->ps->size = ps->capacity = 0;} 

定义动态顺序表的结构:

//定义动态数据表的结构
typedef int SLDataType;
typedef struct SeqList
{SLDataType* arr;int size;//有效数据个数int capacity;//空间容量
}SL;
//typedef struct SeqList SL;这俩种都可以 

判断空间是否足够:

void SLCheckCapacity(SL* ps)
{
//判断空间是否足够if (ps->size==ps->capacity)//有效数据个数和空间容量{//增容,增容一般是成倍数增容,3倍、2倍....假如每次只增加一个空间\会出现频繁增容,重新找空间int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;//如果空间容量为0,就给4个空间\空间容量不为0,就扩大二倍!SLDataType* tmp = (SLDataType*)realloc(ps->arr, newCapacity*sizeof(SLDataType));//realloc的第二个参数单位是字节//因为capacity一开始初始化是0,所以要处理一下!!!if (tmp == NULL){perror("realloc fail!");exit(1);}ps->arr = tmp;//内存分配成功后,arr指向新的内存分配空间,用完要freeps->capacity = newCapacity;}
}

2、顺序表头删

void SLPopFront(SL* ps)
{assert(ps&&ps->size);//参数不能为NULL,顺序表也不为NULLfor (int i = 0;i < ps->size-1;i++)//  注意:i<ps->size -1,需要一会画图来描述!!!!!!!!!!{ps->arr[i] = ps->arr[i + 1];}ps->size--;//有效数字减小
}

3、顺序表头插

void SLPushFront(SL* ps, SLDataType x)
{assert(ps);SLCheckCapacity(ps);for (int i = ps->size;i > 0;i--){ps->arr[i] = ps->arr[i - 1];}ps->arr[0] = x;ps->size++;//插入一个数字,有效数字个数+1
}

4、顺序表尾插

void SLPushBack(SL* ps, SLDataType x)
{assert(ps);SLCheckCapacity(ps);//判断空间是否足够//空间足够时:ps->arr[ps->size] = x;++ps->size;
}

5、顺序表尾删

void SLPopBack(SL* ps)
{//ps限制的是参数不能直接给NULL//ps->size:顺序表为空,不能删。assert(ps && ps->size);//有效数字为0,是不可以尾删的,因为数组内没有数字ps->size--;}

6、顺序表的打印

void SLPrint(SL* ps)//打印顺序表
{assert(ps);for (int i = 0;i < ps->size;i++){printf("%d ", ps->arr[i]);}printf("\n");
}

7、顺序表在指定位置之前和之后插入数据

void SLInsert(SL* ps, int pos, SLDataType x)//指定位置之前插入数据,pos是对应的下标
{SLCheckCapacity(ps);assert(ps);assert(pos >= 0 && pos <= ps->size);//pos及之后的数据整体向后挪动一位for (int i = ps->size;i > pos;i--){ps->arr[i] = ps->arr[i - 1];}ps->arr[pos] = x;//在指定位置之后插入数据就是arr[pos+1]=x;ps->size++;  
}

8、顺序表删除指定位置数据

void SLErase(SL* ps, int pos)
{assert(ps);assert(pos >= 0 && pos < ps->size);for (int i = pos;i < ps->size - 1;i++){ps->arr[i] = ps->arr[i + 1];}ps->size--;
}

9、顺序表查找元素的下标

//查找
int SLFind(SL* ps, SLDataType x)
{for (int i = 0;i < ps->size;i++){if (ps->arr[i] == x){//找到了return i;}}//未找到return -1;
}

10、顺序表的销毁

//销毁
void SLDestroy(SL* ps)
{assert(ps);if (ps->arr)free(ps->arr);ps->arr = NULL;ps->size = ps->capacity = 0;
}

相关文章:

数据结构与算法----顺序表和复杂度

嘻嘻&#xff0c;我们用c语言来手撕顺序表&#xff01;&#xff01;&#xff01;全程高能比喻代码实战&#xff0c;保证你笑着学会&#xff01;&#xff01;&#xff01; 引言 1、数据结构是计算机存储、组织数据的方式。算法是一系列计算步骤&#xff0c;用来将输入数据转化…...

Android studio局域网屏幕共享(旧手机可以用来当监控啦)

项目地址 https://github.com/Anyuersuper/ScreenSharing 百度网盘 通过网盘分享的文件&#xff1a;ScreenSharing-master.zip 链接: https://pan.baidu.com/s/1URQnyI8zJF-IFl5_-ttXBg?pwdyuer 提取码: yuer &#x1f4f1; 屏幕分享应用 (ScreenSharing) &#x1f4cb; 项目…...

Redis持久化之RDB

RDB持久化是将当前进程数据生成快照保存到硬盘的过程&#xff0c;触发RDB持久化过程分为手动触发和自动触发。 1.触发机制 手动触发费别对应save和bgsave命令&#xff1a; save命令&#xff1a;阻塞当前Redis服务器&#xff0c;直到RDB过程完成为止&#xff0c;对于内存比较…...

Ubuntu 64-bit 交叉编译 FFmpeg(高级用户指南)

适用于 ​​ARM (aarch64)、Windows (mingw)、Android、Raspberry Pi​​ 等平台的交叉编译。 ​​&#x1f539; 1. 安装交叉编译工具链​​ ​​ARM (aarch64) 示例​ sudo apt update sudo apt install gcc-aarch64-linux-gnu g-aarch64-linux-gnu binutils-aarch64-linux…...

YOLO V8中的​“中心点邻近区域 + 动态IoU匹配“

它是联合优化正样本分配的策略&#xff0c;旨在更精准地匹配预测框与真实目标的位置关系。以下分步详解其原理&#xff1a; 1. 中心点邻近区域&#xff08;Central Region&#xff09;​​ ​​1.1 目标中心区域定义​​ ​​基础思想​​&#xff1a;将真实边界框&#xff…...

【MySQL | 八、 事务管理】

文章目录 什么是事务&#xff1f;事务的特性&#xff1a;事务的意义事务的提交查看事务提交方式事务的自动提交事务的手动提交开始事务执行SQL操作事务操作提交事务示例&#xff1a; 事务的隔离级别并发访问的基本概念并发事务的典型问题对ACID特性的影响查看和设置隔离属性各个…...

Ubuntu 下搭建 MCU 开发环境全流程指南(以 STM32 为例)

在嵌入式开发中,许多工程师都习惯于在 Windows 平台使用 Keil、IAR 等 IDE。然而,随着对自动化、可定制性以及开放工具链的需求增长,越来越多的开发者开始尝试在 Linux 环境下进行 MCU 开发。 本篇文章将以 STM32F1 系列 为例,手把手带你在 Ubuntu 下搭建一个完整的 MCU 开…...

Redis淘汰策略详解!

目录 一、为什么需要淘汰策略&#xff1f; &#x1f914;二、Redis 的淘汰策略详解 &#x1f447;三、如何选择合适的淘汰策略&#xff1f; &#x1f914;➡️✅四、如何切换 Redis 的淘汰策略&#xff1f; ⚙️&#x1f527;五、总结 &#x1f389; &#x1f31f;我的其他文章…...

基于51单片机和TM1638模块的小游戏《打地鼠》

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、TM1638模块2、定时器03、定时器1 四、主函数总结 系列文章目录 前言 有两个版本&#xff0c;普中开发板版本和最小系统板版本&#xff0c;两个版本差别在于晶振频率不一样&#xff0c;其他的都相同。 本文代码…...

机器学习之数据预处理(一):缺失值处理和异常值识别的几种常用方法

始终致力于将复杂知识通俗化的不断追求中&#xff0c;不足之处欢迎批评指正。 1、噪声处理 噪声是一个测量变量中的随机错误或偏差&#xff0c;是观测值和真实值之间的误差&#xff0c;包括错误值或偏离期望的孤立点值。对于噪声的处理&#xff0c;通常可以采用数据平滑技术来…...

25/4/6 算法笔记<仿真O2DES>基础知识学习

此文章就来整理一下我学习到的O2DES仿真框架的一些核心知识 核心概念&#xff1a; 模拟器&#xff08;Simulator&#xff09;&#xff1a;模拟器是O2DES框架的核心组件&#xff0c;用来管理模拟时钟&#xff0c;事件调度和执行。可以通过Simulator类创建模拟环境&#…...

Three.js 系列专题 3:光照与阴影

内容概述 光照是 3D 场景真实感的关键。Three.js 提供了多种光源类型,每种光源有不同的效果和用途。本专题还将介绍如何启用和优化阴影效果,提升场景的深度感。 学习目标 理解不同光源类型及其应用场景。掌握在 Three.js 中添加光源并启用阴影。学会调整阴影效果以平衡真实…...

接口自动化学习五:mock工具使用

Moco简介&#xff1a; Mock是一个简单搭建模拟服务器的框架&#xff0c;可以用来模拟http、https、socket等协议。 原理&#xff1a; Mock会根据一些配置&#xff0c;启动一个真正的HTTP服务&#xff08;会监听本地的某个端口&#xff09;,当发起的请求满足某个条件时&#xf…...

Java学习——day22(Java反射基础入门)

文章目录 1.反射的定义2. 认识反射的关键API2.1 Class2.2 Field2.3 Method2.4 Constructor 3. 示例代码讲解与分析4. 编写反射示例代码的步骤4.1 定义测试类4.2 编写主程序&#xff0c;使用反射获取信息4.3 通过反射创建对象并调用方法 5. 总结6.今日生词 Java反射笔记 1.反射的…...

字符串、列表、元组、字典

字符串 双引号或者单引号中的数据&#xff0c;就是字符串 字符串输入 之前在学习input的时候&#xff0c;通过它能够完成从键盘获取数据&#xff0c;然后保存到指定的变量中&#xff1b; 注意&#xff1a;input获取的数据&#xff0c;都以字符串的方式进行保存&#xff0c;即…...

数据分析-Excel-学习笔记

Day1 复现报表聚合函数&#xff1a;日期联动快速定位区域SUMIF函数SUMIFS函数环比、同比计算IFERROR函数混合引用单元格格式总结汇报 拿到一个Excel表格&#xff0c;首先要看这个表格个构成&#xff08;包含了哪些数据&#xff09;&#xff0c;几行几列&#xff0c;每一列的名称…...

Nginx 常见面试题

一、nginx常见错误及处理方法 1.1 404 bad request 一般原因&#xff1a;请求的Header过大 解决办法&#xff1a; 配置nginx.conf 相关设置1. client_header_buffer_size 16k; 2. large_client_header_buffers 4 64k;1.2 413 Request Entity Too Large 一般原因&#xff1…...

Spring 中的 @Autowired 和 @Resource

&#x1f9e9; 一、Autowired 和 Resource 的基本作用 注解来源作用AutowiredSpring 提供&#xff08;org.springframework.beans.factory.annotation.Autowired&#xff09;按类型 自动注入ResourceJDK 提供&#xff08;javax.annotation.Resource&#xff09;默认按名称 注入…...

IAGCN:登上《Nature》的深度学习可解释性情感分析模型突破

IAGCN&#xff1a;登上《Nature》的深度学习可解释性情感分析模型突破 一、技术突破背景 社交媒体时代&#xff0c;用户生成内容的情感分析需求激增。传统方面级情感分析模型在复杂语境下存在特征交互捕捉不足、情感极性判定偏差等问题。微软亚洲研究院联合清华大学提出的交互…...

Go 学习笔记 · 进阶篇 · 第一天:接口与多态

&#x1f436;Go接口与多态&#xff1a;继承没了&#xff0c;但自由炸裂&#xff01; 最近翻 Go 的代码&#xff0c;突然看到这么一段&#xff1a; type Animal interface {Speak() string }我一愣&#xff0c;咦&#xff1f;这不就是 Java 里常见的“接口”吗&#xff1f; …...

模运算:数字世界中的时空扭曲法则——从密码学到量子计算的跨维演绎

一、模宇宙基本定理&#xff1a;重构数字时空的底层逻辑 1.1 同余关系的时空折叠效应 在模运算创造的离散时空中&#xff0c;数字呈现出环状拓扑结构。当我们在模7空间观察时&#xff0c;12与5通过时空折叠达成量子纠缠&#xff1a;12 ≡ 5 (mod 7)。这种性质使得RSA加密算法…...

0303hooks-react-仿低代码平台项目

文章目录 1. 副作用2.其他内置hooks2.1 useEffect2.2 useRef2.3useMemo2.4 useCallback 3.自定义hooks4. 第三方hooks5. hooks使用原则6. hooks闭包陷阱7. 总结结语 1. 副作用 当组件渲染完成时&#xff0c;加载一个Ajax网络请求当某个state更新时&#xff0c;加载一个Ajax网络…...

Batch Normalization:深度学习训练的加速引擎

引言 在深度学习的发展历程中&#xff0c;训练深度神经网络一直是一项极具挑战性的任务。随着网络层数的增加&#xff0c;梯度消失、梯度爆炸以及训练过程中的内部协变量偏移&#xff08;Internal Covariate Shift&#xff09;问题愈发严重&#xff0c;极大地影响了模型的收敛…...

nacos的地址应该配置在项目的哪个文件中

在 Spring Boot 和 Spring Cloud 的上下文中&#xff0c;​Nacos 的地址既可以配置在 bootstrap.yml 中&#xff0c;也可以配置在 application.yml 中&#xff0c;但具体取决于使用场景和需求。以下是两者的区别和最佳实践&#xff1a; ​1. bootstrap.yml vs application.yml …...

【数据集】 PBMC(Peripheral Blood Mononuclear Cells)数据集

&#x1f9ec; 一、PBMC 数据集简介 内容描述名称Peripheral Blood Mononuclear Cells&#xff08;外周血单个核细胞&#xff09;细胞类型包括 B 细胞、T 细胞、NK 细胞、单核细胞等技术平台通常由 10x Genomics 提供&#xff08;例如 3k、4k、6k、10k 版本&#xff09;数据类…...

3. go-zero中如何使用redis

问题 go-zero项目相关文档中redis是这样配置的&#xff1a; Name: account.rpc ListenOn: 0.0.0.0:8080 Etcd:Hosts:- 127.0.0.1:2379Key: account.rpcMysql:Host: xxxx:3306User: rootPass: xxxData: mall-userCharset: utf8mb4Cache: - Host: 192.168.145.10:6379Type: nod…...

Redis基础知识

Redis基础知识 一、Redis简介 1.1 什么是Redis&#xff1f; Redis是一个开源的、基于内存的数据结构存储系统&#xff0c;可以用作&#xff1a; 数据库缓存消息中间件分布式锁 1.2 Redis特点 高性能&#xff1a;基于内存操作支持多种数据结构支持数据持久化支持主从复制支…...

每日c/c++题 备战蓝桥杯(求解三个数的最大公约数与最小公倍数)

求解三个数的最大公约数与最小公倍数&#xff08;C/C实现&#xff09; 引言 在数学计算和编程问题中&#xff0c;求多个数的**最大公约数&#xff08;GCD&#xff09;和最小公倍数&#xff08;LCM&#xff09;**是常见需求。本文将探讨如何高效求解三个数的GCD和LCM&#xff…...

解决Win11耳机没有声音的问题

方法一&#xff1a;更新驱动程序&#xff08;有效&#xff09; 进入 “设置”&#xff08;快捷键&#xff1a;WinX&#xff09;&#xff0c;点击 “Windows 更新” → “高级选项” 点击 “可选更新” &#xff0c;然后点击 “驱动程序更新” 【注】&#xff1a;更新后可能会出…...

滤波电容的正负极线宽需要一致吗?

今天看到一个项目的滤波电容的正端采用铺铜处理增大过流能力&#xff0c;但是负极却仅仅打了两个地过孔&#xff0c;不仅产生疑问&#xff0c;这样做是否合理&#xff0c;滤波电容的正负极线宽需要一致吗&#xff1f; 搜寻资料的时候看到这样一个类似的问题&#xff1a; 这些人…...

使用 `pandas` 库来读取 Excel 文件,并实现六种算法的遍历计算

以下是一个满足你需求的 Python 程序示例。在这个示例中&#xff0c;我们假设已经有了处理数据的函数&#xff0c;并且生成的 Excel 文件中包含了观测数据和推算数据。我们将使用 pandas 库来读取 Excel 文件&#xff0c;并实现六种算法的遍历计算。 import pandas as pd# 模拟…...

【Linux】文件描述符访问Open、Read、Write

每个运行的程序被称为进程&#xff08;process&#xff09;&#xff0c;它有一些与之关联的文件描述符。我们可以通过这些文件描述符来访问打开的文件或者设备。 一、文件描述符 什么是文件描述符&#xff1f; 概念&#xff1a;文件描述符&#xff08;File Descriptor&#x…...

在 VS2022 中修复 Linux CMake 项目构建失败:从 Ninja 迁移到 Makefile

问题背景​​ 在使用 ​​Visual Studio 2022​​ 开发跨平台 C 项目时&#xff0c;许多开发者会选择通过 ​​WSL (Windows Subsystem for Linux)​​ 直接在本地调试 Linux 环境下的程序。然而&#xff0c;近期在配置一个 CMake 项目时&#xff0c;遇到了以下报错&#xff1…...

ctf-show-mics2

下载文件用zip解压&#xff0c;将文件修改为flp文件 新建虚拟机&#xff0c;把文件添加到软盘 再次打开虚拟机会显示flag flag&#xff1a;flag{ctfshow}...

STM32_USB

概述 本文是使用HAL库的USB驱动 因为官方cubeMX生成的hal库做组合设备时过于繁琐 所以这里使用某大神的插件,可以集成在cubeMX里自动生成组合设备 有小bug会覆盖生成文件里自己写的内容,所以生成一次后注意保存 插件安装 下载地址 https://github.com/alambe94/I-CUBE-USBD-Com…...

Java 基础-32-枚举-枚举的应用场景

在Java编程中&#xff0c;枚举&#xff08;Enum&#xff09;提供了一种强大的方式来定义一组固定的常量。它们不仅限于简单的用途&#xff0c;还可以包含构造函数、方法和字段等高级功能&#xff0c;使其适用于多种不同的应用场景。本文将探讨几种常见的使用枚举的场景&#xf…...

新潮透明液体水珠水滴失真故障扭曲折射特效海报字体标题设计ps样机动作素材 Bubble Photoshop Templates

只需单击几下即可创建引人注目的视觉效果&#xff01;您需要做的就是将您的文本或图像放入智能对象中并应用作。 包中包含&#xff1a; 15 个静态 Photoshop 模板&#xff08;PS 2019 及更高版本&#xff09; 01-05 垂直布局 &#xff08;22504000&#xff09;06-10 水平布局…...

学透Spring Boot — 017. 魔术师—Http消息转换器

本文是我的专栏《学透Spring Boot》的第17篇文章&#xff0c;了解更多请移步我的专栏&#xff1a; 学透 Spring Boot_postnull咖啡的博客-CSDN博客 目录 HTTP请求和响应 需求—新的Media Type 实现—新的Media Type 定义转换器 注册转换器 编写Controller 测试新的medi…...

stable diffusion 量化加速点

文章目录 一、导出为dynamic shape1)函数讲解(函数导出、输出检查)2)代码展示二、导出为static shape1)函数讲解(略)2)代码展示三、序列化为FP32测速1)测速2)代码四、序列化为FP16测速1)测速2)代码同上五、发现并解决解决CLIP FP16溢出,并测速1)如何找到溢出的算子…...

Xorg内存管理机制深度解析

Xorg内存管理机制深度解析 一、客户端资源生命周期管理 Xorg 采用 客户端绑定型资源管理 机制,所有资源(窗口、像素图、字体等)的生命周期与客户端连接状态强关联。 资源 ID 分配机制: • 每个资源由 32位标识符 表示,格式:0xBBCCDDEE ◦ BB:客户端 ID(ClientIndex)…...

第五期:深入理解 Spring Web MVC [特殊字符]( 前后端交互的综合性练习)

✨ 前言&#xff1a;从理解到实战&#xff0c;彻底掌握 Spring MVC 前后端交互 当我们学习了 Spring MVC 中的各种注解、参数绑定、请求方式、编码处理以及 Cookie/Session 操作之后&#xff0c;下一步就是 —— 动手实践&#xff01; 理论再多&#xff0c;不如亲自敲一次代码…...

ansible可视化自动化平台-semaphore

1、简介 Semaphore UI 是一个开源的CI/CD工具&#xff0c;专注于简化和自动化软件交付流程&#xff0c;可轻松管理和运行 Ansible playbook&#xff0c;提供了一个直观的 Web 用户界面&#xff08;UI&#xff09;&#xff0c;帮助DevOps团队轻松管理任务、部署和流水线。 官网…...

手撕LLM(二):从源码出发,探索LoRA加载、推理全流程

接上回接着说&#xff0c;前面我们通过分析源码&#xff0c;了解了大模型推理的详细流程&#xff0c;包括提示词从输入&#xff0c;到对话模版包装&#xff0c;到tokenID转换&#xff0c;到Embedding词向量转换&#xff1b;通过大模型推理&#xff0c;再将大模型输出进行最后一…...

数据库连接JDBC

概述 ✅概念 JDBC(JavaDataBaseConnectivityjava数据库连接)是⼀种⽤于执⾏SQL语句的JavaAPI&#xff0c;可以为多种关系型数据库提供 统⼀访问&#xff0c;它是由⼀组⽤Java语⾔编写的类和接⼝组成的。 本质 其实就是java官⽅提供的⼀套规范(接⼝)。⽤于帮助开发⼈员快速实现…...

VectorBT:使用PyTorch+Transformer训练和回测股票模型 进阶五

VectorBT&#xff1a;使用PyTorchTransformer训练和回测股票模型 进阶五 本方案基于PyTorch框架与Transformer模型&#xff0c;结合VectorBT回测引擎构建多股票量化交易系统&#xff0c;采用滑动窗口技术构建时序特征&#xff0c;通过自注意力机制捕捉市场规律预测收益率&#…...

DP Alt Mode​​ 与 ​​USB​​ 的关系

DP Alt Mode​​ 与 ​​USB​​ 的关系 1. 物理接口的统一&#xff1a;USB-C 是“万能插座” [USB-C接口物理结构] |-----------------------------------------------| | USB 3.0数据引脚 | DP Alt Mode视频引脚 | 电源引脚 | |-------------------------------------…...

C#“与AI的奇妙结合”

原文&#xff1a;C# 使用通义灵码 - AI 助力 Visual Studio 开发_w3cschool &#xff08;注意&#xff1a;本文章中并不存在任何广告&#xff0c;也不存在任何盈利内容&#xff09; C# 使用通义灵码 C# 作为一种功能强大且灵活多变的编程语言&#xff0c;被广泛应用于各个领…...

企业ITR流程设计与执行详细介绍【附全文阅读】

该方案聚焦企业 ITR 流程,适用于企业的服务管理人员、流程优化负责人、技术支持团队以及中高层管理者等。 ITR 流程的重要性:企业服务面临客户不满、管理者焦虑、服务人员无奈等挑战,缺乏完善的 ITR 流程会影响品牌形象、客户满意度和产品竞争力。ITR 流程能够保障客户满意,…...

Ubuntu 无密码热点(Soft AP)完整配置方案

适用于 Jetson、嵌入式 Linux、RDK 平台。目标&#xff1a;配置一个无密码热点&#xff08;Soft AP&#xff09;&#xff0c;供手机等设备直接连接。实现开机自动启动热点&#xff0c;也支持后续一键切换回 WiFi 客户端模式。 平台&#xff1a;Yahboom RDK X3&#xff08;Jetso…...

【力扣hot100题】(063)搜索二维矩阵

看到这题我就想到之前被我当作这题做的【力扣hot100题】&#xff08;020&#xff09;搜索二维矩阵Ⅱ 其实是完全不一样的两题&#xff0c;个人觉得这道题更简单也更考验基础&#xff0c;那道题思路更难想到但代码更好写。 两个二分查找结束&#xff0c;要注意的是第一个二分查…...