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

算法复杂度

目录:

  1. 算法的效率
  2. 时间复杂度

1.算法的效率

1.1旋转数组习题分析

如何衡量一个算法的好坏呢?

案例:旋转数组(189. 轮转数组 - 力扣(LeetCode))

思路:循环k次将所有元素向后移动一位

首先我们先看一下题目:

这道题其实就是把数组后k个元素放到开头,进行轮换。

图示:

代码展示: 

void rotate(int* nums, int numsSize, int k) 
{int i = 0,end = 0;while(k--){end = nums[numsSize - 1];for(i = numsSize - 1 ; i > 0 ; i--){nums[i] = nums[i - 1];}nums[0] = end;}
}

这个代码点击执行可以通过, 然而点击提交却无法通过。

1.2复杂度的概念

算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量⼀个算法的好坏,⼀般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。

时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们已经不需要再特别关注一个算法的空间复杂度。

2.时间复杂度

定义:在计算机科学中,算法的时间复杂度是一个函数式T(N),它定量描述了该算法的运行时间。时间复杂度是衡量程序的时间效率,那么为什么不去计算程序的运行时间呢?

  1. 因为程序运行时间和编译环境和运行机器配置都有关系,比如同一个算法程序,用一个老编译
    器进行编译和新编译器编译,在同样机器下运行时间不同。
  2. 同一个算法程序,用一个老低配置机器和新高配置机器,运行时间也不同。
  3. 并且时间只能程序写好后测试,不能写程序前通过理论思想计算评估。

那么算法的时间复杂度是一个函数式T(N)到底是什么呢?这个T(N)函数式计算了程序的执行次数。通过c语言编译链接章节学习,我们知道算法程序被编译后生成二进制指令,程序运行,就是cpu执行这
些编译好的指令。那么我们通过程序代码或者理论思想计算出程序的执行次数的函数式T(N),假设每句指令执行时间基本一样(实际中有差别,但是微乎其微),那么执行次数和运行时间就是等比正相关,这样也脱离了具体的编译运行环境。执行次数就可以代表程序时间效率的优劣。比如解决一个问题的算法a程序T(N)=N,算法b程序T(N)=N^2,那么算法a的效率一定优于算法b。

案例1:

void Func1(int N) 
{ int count = 0; for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { ++count;} }for (int k = 0; k < 2 * N; ++k) { ++count;}int M = 10;while (M--) { ++count; } 
}

T(N)=N^2+2*N+10

  • N=10       T(N)=130
  • N=100     T(N)=10210
  • N=1000   T(N)=1002010 

能够判断出,对结果影响最大的N^2,时间复杂度为O(N^2)。

2.1大O的渐进表示法

大O符号(Big O notation):是用于描述函数渐进行为的数学符号

推导大O阶规则:

  1. 时间复杂度函数式T(N)中,只保留最高阶项,去掉那些低阶项,因为当N不断变大时,低阶项对结果影响越来越小,当N无穷大时,就可以忽略不计了。
  2. 如果最高阶项存在且不是1,则去除这个项目的常数系数,因为当N不断变大,这个系数对结果影响越来越小,当N无穷大时,就可以忽略不计了。
  3. T(N)中如果没有N相关的项目,只有常数项,用常数1取代所有加法常数。

2.2时间复杂度计算示例

代码1:

void Func2(int N) 
{int count = 0;for (int k = 0; k < 2 * N; ++k) {++count;}int M = 10;while (M--) {++count;}printf("%d\n", count);
}

 T(N)=2N+10,根据规则2可知,时间复杂度为O(N)

代码2:

    // 计算Func3的时间复杂度?
void Func3(int N, int M) 
{int count = 0;for (int k = 0; k < M; ++k) {++count;}for (int k = 0; k < N; ++k) {++count;}printf("%d\n", count);
}

T(N)=M+N

时间复杂度:

  • M>>N      O(M)
  • M<<N      O(N)
  • M==N      O(M+N)

代码3:

    // 计算Func4的时间复杂度?void Func4(int N) {int count = 0;for (int k = 0; k < 100; ++k) {++count;}printf("%d\n", count);}

T(N)=100,根据规则3可知,时间复杂度为O(1)。

代码4:

    const char* strchr(const char* str, int character) {const char* p_begin = s;while (*p_begin != character) {if (*p_begin == '\0')return NULL;p_begin++;}return p_begin;}

strchr执行的基本操作次数:

  1. 若要查找的字符在字符串的前面,则:T(N)=1
  2. 若要查找的字符在字符串的中间,则:T(N)=N/2
  3. 若要查找的字符在字符串的后面,则:T(N)=N

因此:strchr的时间复杂度分为:

  • 最好情况:O(1)
  • 最坏情况:O(N)
  • 平均情况:O(N)

总结:

通过上面我们会发现,有些算法的时间复杂度存在最好、平均和最坏情况。

最坏情况:任意输入规模的最大运行次数(上界)

平均情况:任意输入规模的期望运行次数

最好情况:任意输入规模的最小运行次数(下界)

大O的渐进表示法在实际中一般情况关注的是算法的上界,也就是最坏运行情况。

 代码5:

    void BubbleSort(int* a, int n) {assert(a);for (size_t end = n; end > 0; --end) {int exchange = 0;for (size_t i = 1; i < end; ++i) {if (a[i - 1] > a[i]) {Swap(&a[i - 1], &a[i]);exchange = 1;}}if (exchange == 0)break;}}

这个代码大家可能并不陌生,没错就是冒泡排序

计算时间复杂度,我们就要去计算最坏的情况(此时end也为n),那么就是完整的进行一次循环

则我们能够指导代码规律:

  • 外:n、n-1、n-2、……1
  • 内:n-1、n-2、n-3、……0  (相加)

所以我们能够知道一共循环了n*(n-1)/2次,经过大O规则后,最后的出来的时间复杂度是O(N^2)

代码6:

    void func5(int n) {int cnt = 1;while (cnt < n) {cnt *= 2;}}

当n=2时,执行次数为1

当n=4时,执行次数为2

当n=16时,执行次数为4

假设执行次数为x,则2^x=n

因此执行次数:x=log n(以2为底)

因此:时间复杂度取最差情况为:log n(以2为底)

代码7:

long long Fac(size_t N)
{if(0==N)return 1;return Fac(N-1)*N;
}

 调用一次Fac函数的时间复杂度为O(1)

而在Fac函数中,存在n次递归调用

因此:阶乘递归的时间复杂度为:O(n)

代码8:

int func(int n)
{if(n==0) return 1;return func(n) + func(n-1)
}

上面的代码中,有两次递归调用,函数的执行时间就会和输入n成指数的关系。

 因此,这里可以用O(2^n)表示

 

 3.空间复杂度

空间复杂度也是一个数学表达式,是对一个算法在运行过程中因为算法的需要额外临时开辟的空间。

空间复杂度不是程序占用了多少bytes的空间,因为常规情况每个对象大小差异不会很大,所以空间复
杂度算的是变量的个数。

空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。

注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好
了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。

 3.1空间复杂度计算示例

代码1:

    void BubbleSort(int* a, int n) {assert(a);for (size_t end = n; end > 0; --end) {int exchange = 0;for (size_t i = 1; i < end; ++i) {if (a[i - 1] > a[i]) {Swap(&a[i - 1], &a[i]);exchange = 1;}}if (exchange == 0)break;}}

此时函数的栈帧已经在编译时就确定好了,所以我们这里关注函数内部就好,很显然,这里我们就创立了exchange等一些局部变量,此时可以直到开辟的空间为一个常量,所以最后计算的大O应该是O(1)。

代码2:

    long long Fac(size_t N) {if (N == 0)return 1;return Fac(N - 1) * N;}

Fac递归调用了N次,额外开辟了N个函数栈帧,每个栈帧使用了常数个空间

因此空间复杂度为:O(N)

4.常见复杂度对比 

 按增长量级递增排列,常见的时间复杂度有:

  • O(1):常数阶
  • O(logn):对数阶
  • O(n):线性阶
  • O(nlogn):线性对数阶
  • O(n^2):平方阶
  • O(n^3):立方阶
  • O(2^n):指数阶
  • O(n!):阶乘阶

O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!) 

5.复杂度算法题

189. 轮转数组 - 力扣(LeetCode)

思路1:

  • 时间复杂度O(n^2)
  • 循环k次将数组所有元素向后移动一位(代码不通过)
void rotate(int* nums, int numsSize, int k) 
{int i = 0,end = 0;while(k--){end = nums[numsSize - 1];for(i = numsSize - 1 ; i > 0 ; i--){nums[i] = nums[i - 1];}nums[0] = end; }
}

思路2:

  • 空间复杂度O(n) ,时间复杂度O(n)

  • 申请新数组空间,先将后k个数据防到新数组中,再将剩下的数据挪到新数组中

void rotate(int* nums, int numsSize, int k) 
{int arr[numsSize];for (int i = 0; i < numsSize; i++){arr[(i + k) % numsSize] = nums[i];}for (int i = 0; i < numsSize; i++){nums[i] = arr[i];}
}

思路3:

  •  时间复杂度O(N),空间复杂度O(1)
  • 前n-k个逆置:4321567
  • 后k个逆置:4321765
  • 整体逆置:5671234
void jiaohuan(int * arr,int left,int right)
{while(left < right){int tmp;tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;left++;right--;}}void rotate(int* nums, int numsSize, int k) 
{k = k % numsSize;jiaohuan(nums,0,numsSize - k - 1);jiaohuan(nums,numsSize - k,numsSize - 1);jiaohuan(nums,0,numsSize - 1);}

相关文章:

算法复杂度

目录&#xff1a; 算法的效率时间复杂度 1.算法的效率 1.1旋转数组习题分析 如何衡量一个算法的好坏呢&#xff1f; 案例&#xff1a;旋转数组&#xff08;189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09;&#xff09; 思路&#xff1a;循环k次将所有元素向后移动一…...

时序约束进阶六:Set_Clock_Groups详解

目录 一、前言 二、时钟间关系 2.1 时钟关系分类 2.2 时钟关系查看 三、set_clock_groups设置 3.1 使用格式 3.2 优先级 3.3 约束设置示例 3.4 约束效果查看 四、Exclusive差异说明 4.1 Asynchronous 4.2 Logically_exclusive与Physically_exclusive 4.3 logical…...

《运放秘籍》第二部:仪表放大器专项知识点总结

一、差分放大器与仪表放大器的讨论 1.1. 仪放的前世今生——差分放大器原理&#xff1f; 1.2. 差分放大的原理 1.3. 差分放大器检测电流 1.4. 差分放大器端一&#xff1a;输入阻抗 1.5. 差分放大器端二&#xff1a;共模抑制比 1.6. 为什么关注输入阻抗&#xff1f;共模抑…...

JavaSE——异常

一、异常的概念 在Java中&#xff0c;将程序执行中发生的不正常行为称为"异常"&#xff0c;开发过程中的语法错误和逻辑错误不是异常。 主要分为以下两大类&#xff1a; Error(错误)&#xff1a;Java虚拟机无法解决的严重问题&#xff0c;是严重错误&#xff0c;程序…...

HormonyOS: 图形变换之Rotate

官网地址&#xff1a;rotate 1. 概述 rotate是鸿蒙系统为组件提供的旋转属性&#xff0c;通过rotate属性&#xff0c;可实现组件的旋转效果 2. rotate属性 2.1. 语法参数 rotate(value: RotateOptions) 参数&#xff1a; 参数名 类型 必填 说明 value RotateOptions…...

【Solidity】入门指南:智能合约开发基础

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Solidity入门指南&#xff1a;智能合约开发基础引言1. 开发环境搭建1.1 Remix I…...

HTMLHTML5革命:构建现代网页的终极指南 - 3. 开发工具选择

HTML&HTML5革命&#xff1a;构建现代网页的终极指南 3. 开发工具选择 大家好&#xff0c;我是莫离老师。 前两节课我们学习了 HTML 的基础概念和 HTML5 的主要特性&#xff0c;为接下来的实际开发奠定了理论基础。 今天&#xff0c;我们将讨论开发工具的选择问题。 选择合…...

智能设备安全隐患:五项关键解决措施

目前&#xff0c;我们的智能设备越来越多&#xff0c;而背后的物联网&#xff08;IoT&#xff09;安全像一面隐形的盾牌&#xff0c;默默地守护着我们周围那些复杂连网的设备。 为了让大家更加明白这些安全协议和操作是如何高效运作的&#xff0c;我们有必要深入探讨物联网安全…...

Android NDK开发 JNI 基础

在android 系统开发中 ndk开发是很重要的内容。ndk开发中 jni 是基础。 目录 一&#xff0e;什么是JNI 二. 如何使用JNI 1.Java 代码如何调用 c/c 代码 2. c/c如何调用 java 函数 一&#xff0e;什么是JNI JNI——Java Native Interface&#xff0c;它是Java平台的一个特…...

嵌入式linux之文件系统管理

嵌入式Linux文件系统的管理涉及多个方面&#xff0c;包括文件系统的创建、配置、维护以及优化。以下是一些关键点和实践技巧&#xff1a; 文件系统的创建与配置 选择合适的文件系统&#xff1a;根据应用需求&#xff08;如读写频率、存储介质类型等&#xff09;选择最合适的文…...

Y20030029 微信+SPRINGBOOT+MYSQL+LW+传统文化展示小程序的设计与实现 源代码 配置 文档

传统文化展示小程序 1.项目描述2. 课题开发的背景与意义3.项目功能4.界面展示5.源码获取 1.项目描述 基于微信小程序的传统文化展示小程序是一个集合了多种传统文化元素与现代化技术的创新平台。它充分利用了微信小程序的便捷性和普及性&#xff0c;为广大用户提供了一个深入了…...

【LC】3232. 判断是否可以赢得数字游戏

题目描述&#xff1a; 给你一个 正整数 数组 nums。 Alice 和 Bob 正在玩游戏。在游戏中&#xff0c;Alice 可以从 nums 中选择所有个位数 或 所有两位数&#xff0c;剩余的数字归 Bob 所有。如果 Alice 所选数字之和 严格大于 Bob 的数字之和&#xff0c;则 Alice 获胜。如果…...

【人工智能基础03】机器学习(练习题)

文章目录 课本习题监督学习的例子过拟合和欠拟合常见损失函数&#xff0c;判断一个损失函数的好坏无监督分类&#xff1a;kmeans无监督分类&#xff0c;Kmeans 三分类问题变换距离函数选择不同的起始点 重点回顾1. 监督学习、半监督学习和无监督学习的定义2. 判断学习场景3. 监…...

C/C++每日一练:合并K个有序链表

本篇博客将探讨如何 “合并K个有序链表” 这一经典问题。本文将从题目要求、解题思路、过程解析和相关知识点逐步展开&#xff0c;同时提供详细注释的代码示例。 链表&#xff08;Linked List&#xff09; 链表是一种线性数据结构&#xff0c;由一系列节点&#xff08;Node&…...

jmeter基础07_组件的层级

课程大纲 1. 优先级/执行顺序&#xff08;一般情况&#xff09; 同级组件&#xff1a;按组件先后顺序执行。如&#xff1a;同一层的线程组、同一层的http请求。 上下级组件&#xff1a;先执行外层&#xff08;上级&#xff09;&#xff0c;再执行内层&#xff08;下级&#xff…...

【QNX+Android虚拟化方案】125 - 如何创建android-spare镜像

【QNX+Android虚拟化方案】125 - 如何创建android-spare镜像 1. Android侧创建 (ext4 / sparse) test_img.img 镜像 方法一2. Android侧创建 (ext4 / sparse) test_img.img 镜像 方法二3. qnx 侧 分区透传Android 配置3.1 配置分区透传3.2 Android 侧分区 rename3.3 创建挂载目…...

大R玩家流失预测在休闲社交游戏中的应用

摘要 预测玩家何时会离开游戏为延长玩家生命周期和增加收入贡献创造了独特的机会。玩家可以被激励留下来&#xff0c;战略性地与公司组合中的其他游戏交叉链接&#xff0c;或者作为最后的手段&#xff0c;通过游戏内广告传递给其他公司。本文重点预测休闲社交游戏中高价值玩家…...

使用Postman搞定各种接口token实战

现在许多项目都使用jwt来实现用户登录和数据权限&#xff0c;校验过用户的用户名和密码后&#xff0c;会向用户响应一段经过加密的token&#xff0c;在这段token中可能储存了数据权限等&#xff0c;在后期的访问中&#xff0c;需要携带这段token&#xff0c;后台解析这段token才…...

【C++】printf 函数详解与格式化输出控制

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;printf 基础用法1.1 printf 的常见占位符1.2 占位符与参数的对应关系1.3 换行控制示例&#xff1a; &#x1f4af;格式化输出控制2.1 输出宽度控制2.1.1 指定最小宽度 2.2 …...

在21世纪的我用C语言探寻世界本质——字符函数和字符串函数(1)

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现四、strcpy的使用和模拟实现五、strcat的使用和模拟实现六、strcmp的使用和…...

【专题】存储器管理

1. 存储器的层次结构 在计算机执行时&#xff0c;几乎每一条指令都涉及对存储器的访问&#xff0c;因此要求对存储器的访问速度能跟得上处理机的运行速度。 存储器的速度必须非常快&#xff0c;能与处理机的速度相匹配&#xff0c;否则会明显地影响到处理机的运行。 此外还要求…...

python股票数据分析(Pandas)练习

需求&#xff1a; 使用pandas读取一个CSV文件&#xff0c;文件内容包括股票名称、价格和交易量。完成以下任务&#xff1a; 找出价格最高的股票&#xff1b; 计算总交易量&#xff1b; 绘制价格折线图。 代码实现&#xff1a; import pandas as pd import matplotlib.pyplot …...

Hadoop生态圈框架部署(八)- Hadoop高可用(HA)集群部署

文章目录 前言一、部署规划二、Hadoop HA集群部署&#xff08;手动部署&#xff09;1. 下载hadoop2. 上传安装包2. 解压hadoop安装包3. 配置hadoop配置文件3.1 虚拟机hadoop1修改hadoop配置文件3.1.1 修改 hadoop-env.sh 配置文件3.3.2 修改 core-site.xml 配置文件3.3.3 修改 …...

抗干扰设计的检查细则

抗干扰设计是确保电子系统或设备在复杂电磁环境中稳定运行的重要环节&#xff0c;涉及多个方面的设计和实施。以下是对抗干扰设计的检查细则的详细归纳&#xff1a; 一、电源线与地线设计 电源线设计&#xff1a;选择合适的电源&#xff0c;尽量加宽电源线&#xff0c;保证电源…...

[Redis#12] 常用类型接口学习 | string | list

目录 0.准备 1.string get | set set_with_timeout_test.cpp set_nx_xx_test.cpp mset_test.cpp mget_test.cpp getrange_setrange_test.cpp incr_decr_test.cpp 2.list lpush_lrange_test.cpp rpush_test.cpp lpop_rpop_test.cpp blpop_test.cpp llen_test.cpp…...

React的ts文件中通过createElement拼接一段内容出来

比如接口返回一个值 const values [23.00, 40.00/kg];想做到如下效果&#xff0c; 如果单纯的用render渲染会很简单&#xff0c; 但是在ts文件中处理&#xff0c;所以采用了createElement拼接 代码如下&#xff1a; format: (values: string[]) > {if (!values || !val…...

【Git系列】Git 提交历史分析:深入理解`git log`命令

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

深度学习笔记——生成对抗网络GAN

本文详细介绍早期生成式AI的代表性模型&#xff1a;生成对抗网络GAN。 文章目录 一、基本结构生成器判别器 二、损失函数判别器生成器交替优化目标函数 三、GAN 的训练过程训练流程概述训练流程步骤1. 初始化参数和超参数2. 定义损失函数3. 训练过程的迭代判别器训练步骤生成器…...

《地球科学与环境学报》

《地球科学与环境学报》报道范围涵盖基础地质、矿产地质、水资源与环境、工程地质、地球物理、地球信息科学等领域&#xff0c;刊载国内外未公开发表的有创新性或意义重大的研究论文和综述文章。   来稿必须包括以下项目&#xff1a;题名&#xff08;尽可能不要超过20字&…...

k8s 1.28 聚合层部署信息记录

–requestheader-client-ca-file –requestheader-allowed-namesfront-proxy-client –requestheader-extra-headers-prefixX-Remote-Extra- –requestheader-group-headersX-Remote-Group –requestheader-username-headersX-Remote-User –proxy-client-cert-file –proxy-cl…...

组件化设计的意义

鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是华为公司开发的一款面向未来、面向全场景的分布式操作系统。它不仅能够支持多种智能终端设备&#xff0c;还能够实现跨设备之间的协同工作。为了满足不同设备的资源能力和业务需求&#xff0c;鸿蒙操作系统采用了组件化的设计方…...

2025 年河北省职业院校大数据应用与 服务(中职组)赛项样题

— 1 — 2025 年河北省职业院校大数据应用与 服务&#xff08;中职组&#xff09;赛项样题 一、背景描述 近年来&#xff0c;随着旅游业的快速发展和社交媒体的普及&#xff0c;一 些目的地因其独特的魅力或者事件而迅速走红&#xff0c;吸引了大量 游客涌入&#xff0c;使得当…...

宏集eXware物联网网关在水务管理系统上的应用

一、前言 水务管理系统涵盖了对城市水网、供水、排水、污水处理等多个环节的监控与管理。随着物联网&#xff08;IoT&#xff09;技术的快速发展&#xff0c;物联网网关逐渐成为水务管理系统中的关键组成部分。 宏集物联网网关以其高效的数据采集、传输和管理功能&#xff0c…...

【看海的算法日记✨优选篇✨】第三回:二分之妙,寻径中道

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出&#xff0c;万山无阻 目录 &#x1f4d6;一、算法思想 细节问题 &#x1f4da;左右临界 &#x1f4da;中点选择 &#x1f4da;…...

yolov5 解决:export GIT_PYTHON_REFRESH=quiet

当我们在第一次运行YOLOv5中的train.py程序时&#xff1a;可能会出现以下报错&#xff1a; This initial warning can be silenced or aggravated in the future by setting the $GIT_PYTHON_REFRESH environment variable. Use one of the following values: - quiet|q|silen…...

MongoDB聚合操作

1.聚合操作 聚合操作处理数据记录并返回计算结果。聚合操作组值来自多个文档&#xff0c;可以对分组数据执行各种操作以返回单个结果。聚合操作包含三类&#xff1a;单一作用聚合、聚合管道、MapReduce。 单一作用聚合&#xff1a;提供了对常见聚合过程的简单访问&#xff0c…...

Apple雷电5到底有多快?

在科技日新月异的今天&#xff0c;苹果公司始终走在技术创新的前沿。2023年9月12日&#xff0c;随着英特尔发布雷电5&#xff08;Thunderbolt 5&#xff09;规范&#xff0c;苹果迅速跟进&#xff0c;将其应用于自家的产品中。雷电5接口以其卓越的性能&#xff0c;彻底颠覆了我…...

项目快过:知识蒸馏 | 目标检测 |FGD | Focal and Global Knowledge Distillation for Detectors

公开时间&#xff1a;2022年3月9号 项目地址&#xff1a;https://github.com/yzd-v/FGD 论文地址&#xff1a;https://arxiv.org/pdf/2111.11837 知识蒸馏已成功地应用于图像分类。然而&#xff0c;目标检测要复杂得多&#xff0c;大多数知识蒸馏方法都失败了。本文指出&#…...

Spring Boot日志总结

文章目录 1.我们的日志2.日志的作用3.使用日志对象打印日志4.日志框架介绍5.深入理解门面模式(外观模式)6.日志格式的说明7.日志级别7.1日志级别分类7.2配置文件添加日志级别 8.日志持久化9.日志文件的拆分9.1官方文档9.2IDEA演示文件分割 10.日志格式的配置11.更简单的日志输入…...

PostgreSQL最常用数据类型-重点说明自增主键处理

简介 PostgreSQL提供了非常丰富的数据类型&#xff0c;我们平常使用最多的基本就3类&#xff1a; 数字类型字符类型时间类型 这篇文章重点介绍这3中类型&#xff0c;因为对于高并发项目还是推荐&#xff1a;尽量使用简单类型&#xff0c;把运算和逻辑放在应用中&#xff0c;…...

androidstudio 最新继承 proto kts 方式

在Android Studio中&#xff0c;如果你使用的是Kotlin DSL&#xff08;.kts文件&#xff09;来配置你的Gradle项目&#xff0c;并且你想集成Protocol Buffers&#xff08;Proto&#xff09;&#xff0c;你需要稍微调整你的配置方式。以下是如何在Kotlin DSL中配置Proto集成的步…...

【STM32学习】TB6612FNG驱动芯片的学习,驱动电路的学习

目录 1、TB6612电机驱动芯片 1.1如下是芯片的引脚图&#xff1a; 1.2如下图是电机的控制逻辑&#xff1a; 1.3MOS管运转逻辑 1.3典型应用电路 2、H桥驱动电路 2.1、单极模式 2.2、双极模式 2.3、高低端MOS管导通条件 2.4、H桥电路设计 2.5、自举电路 3、电气特性 3…...

【AI战略思考13】克服懒惰,保持专注,提升效率,不再焦虑

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 引言 我发现自己最近非常懒惰&#xff0c;浪费了很多时间&#xff0c;也容易分心&#xff0c;不够专注&#xff0c;效率低下&#xff0c;且每天都有点焦虑&#xff0c;因此制定了下面的要求和作息时间表。 目…...

基于Vue3+Element Plus 实现多表单校验

使用场景 表单校验在日常的开发需求中是一种很常见的需求&#xff0c;通常在提交表单发起请求前校验用户输入是否符合规则&#xff0c;通常只需formRef.value.validate()即可校验&#xff0c;但是&#xff0c;例如一些多步骤表单、动态表单、以及不同的用户角色可能看到不同的表…...

“岗位复合化、技能层次化” 高职大数据技术专业人才培养实践

在全球数字化浪潮的推动下&#xff0c;大数据技术已经成为引领社会进步和经济发展的核心动力。随着《关于深化现代职业教育体系建设改革的意见》等系列指导问文件的发布&#xff0c;我国高职大数据技术专业的教育正迎来全新机遇与挑战。这些政策不仅明确了职业教育改革的方向&a…...

Day2 生信新手笔记: Linux基础

一、基础知识 1.1 服务器 super computer 或 server 1.2 组学数据分析 组学数据&#xff1a;如基因组学、转录组学、蛋白质组学等&#xff1b; 上游分析&#xff1a;主要涉及原始数据的获取和初步处理&#xff0c;计算量大&#xff0c;消耗的资源较多&#xff0c;在服务器完…...

AI开发-数据可视化库-Seaborn

1 需求 概述 Seaborn 是一个基于 Python 的数据可视化库&#xff0c;它建立在 Matplotlib 之上。其主要目的是使数据可视化更加美观、方便和高效。它提供了高层次的接口和各种美观的默认主题&#xff0c;能够帮助用户快速创建出具有吸引力的统计图表&#xff0c;用于数据分析和…...

如何把Qt exe文件发送给其他人使用

如何把Qt exe文件发送给其他人使用 1、先把 Debug改成Release2、重新构建项目3、运行项目4、找到release文件夹5、新建文件夹&#xff0c;存放exe文件6、打开qt控制台串口7、下载各种文件8、压缩&#xff0c;发送压缩包给别人 1、先把 Debug改成Release 2、重新构建项目 3、运行…...

力扣103.二叉树的锯齿形层序遍历

题目描述 题目链接103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff…...

MOH: MULTI-HEAD ATTENTION AS MIXTURE-OFHEAD ATTENTION

当前的问题 多头注意力使用多个头部可以提高模型的精度。然而&#xff0c;并不是所有的注意力头都具有同样的重要性。一些研究表明&#xff0c;许多注意力头可以被修剪而不影响准确性。 此外&#xff0c;在多头注意中&#xff0c;每个注意头并行操作&#xff0c;最终输出是所…...