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

【机器学习】 奇异值分解 (SVD) 和主成分分析 (PCA)

一、说明

        在机器学习 (ML) 中,一些最重要的线性代数概念是奇异值分解 (SVD) 和主成分分析 (PCA)。收集到所有原始数据后,我们如何发现结构?例如,通过过去 6 天的利率,我们能否了解其构成以发现趋势?

        对于高维原始数据,这变得更加困难。这就像大海捞针。SVD允许我们提取和解开信息。在本文中,我们将详细介绍 SVD 和 PCA。我们假设您具有基本的线性代数知识,包括秩和特征向量。如果您在阅读本文时遇到困难,我建议您先刷新这些概念。在文章的最后,我们将回答上面的利率示例中的一些问题。本文还包含可选部分。请根据您的兴趣水平随意跳过它。

二、误解(初学者可选)

        我意识到非初学者可能会问的一些常见问题。让我先谈谈房间里的大象。PCA尺寸是否减小?PCA减少了尺寸,但它远不止于此。我喜欢 Wiki 的描述(但如果你不知道 PCA,这只是胡言乱语):

主成分分析 (PCA) 是一种统计过程,它使用正交变换将一组可能相关的变量(每个实体都具有各种数值)的观测值转换为一组线性不相关的变量值,称为主成分。

        从简化的角度来看,PCA 将数据线性转换为彼此不相关的新属性。对于ML,将PCA定位为特征提取可能使我们能够比降维更好地探索其潜力。

        SVD 和 PCA 有什么区别?SVD 为您提供了将矩阵对角化为易于操作和分析的特殊矩阵的整个九码。它为将数据解开为独立组件奠定了基础。PCA 跳过不太重要的组件。显然,我们可以使用 SVD 通过截断原始 SVD 矩阵中不太重要的基向量来查找 PCA。

四、矩阵对角化

        在关于特征值和特征向量的文章中,我们描述了一种将 n × n 方阵 A 分解为

例如

        如果 A 是方阵,A 具有 n 个线性独立的特征向量,则矩阵可以对角化。现在,是时候使用 SVD 为所有矩阵开发解决方案了。

五、奇异向量和奇异值

        矩阵AATATA在线性代数中非常特殊。考虑任何m×n矩阵A,我们可以将其与AT相乘,分别形成AATATA。这些矩阵是

  • 对称
  • 广场
  • 至少为正半定(特征值为零或正),
  • 两个矩阵具有相同的正特征值,并且
  • 两者都具有与 A 相同的等级 r

        此外,我们在 ML 中经常使用的协方差矩阵采用这种形式。由于它们是对称的,我们可以选择其特征向量是正交的(以单位长度彼此垂直)——这是对称矩阵的基本属性。

        让我们介绍一些SVD中经常使用的术语。我们将 AAT 的特征向量命名为 ui  ATA 为 vi,并将这些特征向量集 u 和 称为 A 的奇异向量。两个矩阵具有相同的正特征值。这些特征值的平方根称为奇异值

        到目前为止没有太多的解释,但让我们先把所有东西放在一起,接下来会解释。我们将向量 ui 连接成 U将 vi 连接到 以形成正交矩阵。

        由于这些向量是正交的,因此很容易证明 U 和 V 服从

六、SVD

        让我们先从困难的部分开始。SVD 指出任何矩阵 A 都可以分解为:

        其中 U 和 V 是正交矩阵,正交特征向量分别从 AAT 和 ATA 中选择。S 是一个对角矩阵,其中 r 元素等于 AAT 或 AT A 的正特征值的根(无论如何,两个矩阵具有相同的正特征值)。对角线元素由奇异值组成。

i.e. an m× n matrix can be factorized as:

        我们可以按不同的顺序排列特征向量以产生 U 和 V。为了标准化解决方案,我们对特征向量进行排序,使特征值较高的向量优先于特征值较小的向量。

        与特征分解相比,SVD 适用于非平方矩阵。U 和 V 对于 SVD 中的任何矩阵都是可逆的,它们是我们喜欢的正交矩阵。如果没有证据,我们还告诉您奇异值比特征值更稳定。

示例(示例来源)

在走得太远之前,让我们用一个简单的例子来演示它。这将使事情变得非常容易理解。

我们计算:

这些矩阵至少是正半定的(所有特征值都是正数或零)。如图所示,它们具有相同的正特征值(25 和 9)。下图还显示了它们对应的特征向量。

奇异值是正特征值的平方根,即 5 和 3。因此,SVD 组成是

七、证明(可选)

        为了证明 SVD,我们希望用以下公式求解 U、S  V

我们有 3 个未知数。希望我们能用上面的 3 个方程来解决它们。A 的转置是

会意

我们计算 ATA

最后一个方程等效于矩阵 (ATA) 的特征向量定义。 我们只是将所有特征向量放在一个矩阵中。

与 VS² 等于

V 保存 ATA 的所有特征向量 viS 保存 ATA 所有特征值的平方根。我们可以对AAT重复相同的过程,并返回类似的等式。

        现在,我们只需求解 U、V  S

        并证明定理。

八、回顾

        以下是 SVD 的回顾。

哪里

九、重新制定 SVD

        由于矩阵 V 是正交的,因此 VTV 等于 I。我们可以将 SVD 方程重写为:

        这个等式在uivi之间建立了重要的关系。

        召回

应用 AV = US

这可以概括为

等同于

SVD分解可以识别为ui和vi的一系列外积

SVD的这种公式化是理解A的组成部分的关键。它提供了一种将 m × n 个纠缠数据数组分解为 r 个组件的重要方法。由于 ui 和 vi 是单位向量,我们甚至可以忽略奇异值 σi 非常小的项 (σiuiviT)。(我们稍后会回到这个问题。

让我们首先重用之前的示例并展示它是如何工作的。

上面的矩阵 A 可以分解为

十、列空间、行空间、左空空间和空空间(可选 - 适用于高级用户)

        接下来,我们将看看U&V由什么组成。假设 A 是秩 r 的 m × n 矩阵。ATA 将是一个 n×n 对称矩阵。所有对称矩阵都可以选择 n 个正交特征向量 vj。由于 Avi = σiui  vj 是 ATA 的正交特征向量,我们可以将 uiTuj 的值计算为

        它等于零。即 UI  uj 彼此正交。如前所述,它们也是AAT的特征向量。

        从 Avi = σui,我们可以认识到 ui 是 A 的列向量

        因为 A 的秩为 r,我们可以选择这些 r ui 向量作为正交向量。那么AAT剩余的m-r正交特征向量是什么?由于 A 的左零空间与列空间正交,因此选择它们作为剩余的特征向量是很自然的。(左边的零点 NAT) 是 ATx=0 中 x 的空间跨度。类似的参数也适用于 ATA 的特征向量。因此

        回到以前的 SVD 方程,从

        我们只是将特征向量放回左零空间和零空间中。

十一、摩尔-彭罗斯伪逆

        对于线性方程组,我们可以计算方阵 A 的逆函数来求解 x

        但并非所有矩阵都是可逆的。此外,在 ML 中,在数据中存在噪声的情况下,不太可能找到精确的解决方案。我们的目标是找到最适合数据的模型。为了找到最合适的解决方案,我们计算了一个伪逆

        这最大限度地减少了下面的最小二乘误差。

        x的解可以估计为,

        在线性回归问题中,x 是我们的线性模型,A 包含训练数据,b 包含相应的标签。我们可以通过以下方式解决 x

下面是一个示例。

十二、方差和协方差

        在 ML 中,我们识别模式和关系。我们如何识别数据中属性的相关性?让我们从一个例子开始讨论。我们对 12 人的身高和体重进行抽样并计算他们的平均值。我们通过用其平均值减去原始值来将其归零。例如,下面的矩阵 A 保存调整后的零中心高度和体重。

        当我们绘制数据点时,我们可以认识到身高和体重是正相关的。但是,我们如何量化这种关系呢?

        首先,房产有何不同?我们可能从高中开始学习差异。让我们介绍一下它的表弟。样本方差定义为:

        请注意,它在方差中除以 n-1 而不是 n。在样本大小有限的情况下,样本均值存在偏差并与样本相关。与该均值的平均平方距离将小于与一般总体的平均平方距离。样本协方差 S² 除以 n-1 补偿较小的值,并且可以证明是方差 σ² 的无偏估计。(证明不是很重要,所以我在这里简单地提供一个证明的链接。

十三、协方差矩阵

        方差衡量变量在自身之间如何变化,而协方差在两个变量(a 和 b)之间变化。

        我们可以将所有这些可能的协方差组合保存在一个称为协方差矩阵 Σ 的矩阵中。

我们可以用简单的矩阵形式重写它。

对角元素保存各个变量(如高度)的方差,非对角元素保存两个变量之间的协方差。现在让我们计算样本协方差。

正样本协方差表示体重和身高呈正相关。如果它们负相关,则为负,如果它们是独立的,则为零。

协方差矩阵和SVD

我们可以使用 SVD 来分解样本协方差矩阵。由于σ₂与σ相比相对较小,我们甚至可以忽略σ₂项。当我们训练 ML 模型时,我们可以对体重和身高执行线性回归以形成一个新属性,而不是将它们视为两个分离且相关的属性(纠缠数据通常会使模型训练更加困难)。

U₁ 具有一个重要的重要性。它是 S 的主要成分。

SVD 上下文中的样本协方差矩阵有几个属性:

  • 数据的总方差等于样本协方差矩阵 S 的迹线,该迹线等于 S 奇异值的平方和。有了这个,我们可以计算如果我们去掉较小的σi项,损失的方差比率。 这反映了如果我们消除它们会丢失多少信息。

  • S 的第一个特征向量 u₁ 指向数据最重要的方向。在我们的示例中,它量化了体重和身高之间的典型比例。

垂直最小二乘法

  • 误差计算为从采样点到 u₁ 的垂直平方距离之和,是使用 SVD 时的最小值。

财产

协方差矩阵不仅是对称的,而且是正半定的。由于方差为正或零,因此下面的uTVu始终大于或等于零。通过能量测试,V是正半定的。

因此

通常,在一些线性变换 A 之后,我们想知道转换后数据的协方差。这可以使用转换矩阵 A 和原始数据的协方差来计算。

相关矩阵

相关矩阵是协方差矩阵的缩放版本。相关矩阵将变量标准化(缩放)为标准差为 1。

如果变量的尺度非常不同,则将使用相关矩阵。不良缩放可能会损害梯度下降等 ML 算法。

十四、可视化

        到目前为止,我们有很多方程式。让我们可视化 SVD 的作用并逐步开发洞察力。SVD 将矩阵 A 分解为 USVT。 将 A 应用于矢量 x (Ax) 可以可视化为在 x 上执行旋转 (VT)、缩放 (S) 和另一个旋转 (U)。

如上所示,V 的特征向量 vi 转换为:

或以全矩阵形式

演示 r = m < n

十五、SVD的见解

如前所述,SVD 可以表述为

由于 ui 和 vi 具有单位长度,因此决定每个项的重要性的最主要因素是奇异值 σi。我们特意按降序对σi进行排序。如果特征值变得太小,我们可以忽略剩余的项(+σiuiviT + ...)。

这种公式化有一些有趣的含义。例如,我们有一个矩阵,其中包含不同投资者交易的股票收益率的回报。

作为基金经理,我们可以从中得到什么信息?寻找模式和结构将是第一步。也许,我们可以确定收益率最高的股票和投资者的组合。SVD 将 n × n 个矩阵分解为 r 个分量,奇异值 σi 表明其显著性。将此视为一种将纠缠和相关属性提取到较少的主方向上且没有相关性的方法。

如果数据高度相关,我们应该期望许多σi值很小并且可以忽略。

在我们前面的示例中,体重和身高高度相关。如果我们有一个包含 1000 人的体重和身高的矩阵,SVD 分解中的第一个分量将占主导地位。u₁ 矢量确实展示了我们之前讨论过的这 1000 人中体重和身高之间的比率。

十六、主成分分析

        从技术上讲,SVD 分别在方差最大的方向上提取数据。PCA 是将 m 维输入特征映射到 k 维潜在因子(k 个主成分)的线性模型。如果我们忽略不太重要的项,我们将删除不太关心的组件,但保留具有最高方差(最大信息)的主方向。

考虑下面显示为蓝点的三维数据点。它可以很容易地用飞机近似。

您可能很快意识到,我们可以使用 SVD 来查找矩阵 W。考虑下面位于二维空间上的数据点。

SVD 选择最大化其输出方差的投影。因此,如果方差较高,PCA 将选择蓝线而不是绿线。

As indicated below, we keep the eigenvectors that have the top kth highest singular value.

利率

让我们通过追溯来自美国财政部的利率数据来更深入地说明这个概念。9种不同利率的基点(从3个月,6个月,...至 20 年)收集连续 6 个工作日以上,A 存储与前一个日期的差额。在此期间,A 的元素也已经减去其平均值。即它是以零为中心的(跨其行)。

样本协方差矩阵等于 S = AAT/(5–1)。

现在我们有了想要分解的协方差矩阵 S。SVD 分解为

从 SVD 分解中,我们意识到我们可以专注于前三个主组件。

        如图所示,第一个主成分与所有到期期限的每日变化的加权平均值相关。第二个主成分调整对债券到期期限敏感的每日变化。(第三个主成分可能是曲率——二阶导数。

        我们在日常生活中非常了解利率变化与到期日之间的关系。因此,主要成分再次证实了我们对利率行为的看法。但是,当我们看到不熟悉的原始数据时,PCA对于提取数据的主要组成部分以找到底层信息结构非常有帮助。这可能会回答一些关于如何在大海捞针中找到针的问题。

十七、技巧

        在执行 SVD 之前缩放要素。

        比如说,我们想保留 99% 的方差,我们可以选择 k 这样

相关文章:

【机器学习】 奇异值分解 (SVD) 和主成分分析 (PCA)

一、说明 在机器学习 &#xff08;ML&#xff09; 中&#xff0c;一些最重要的线性代数概念是奇异值分解 &#xff08;SVD&#xff09; 和主成分分析 &#xff08;PCA&#xff09;。收集到所有原始数据后&#xff0c;我们如何发现结构&#xff1f;例如&#xff0c;通过过去 6 天…...

如何用logging记录python实验结果?

做python实验有时候需要打印很多信息在控制台(console&#xff09;&#xff0c;但是控制台的信息不方便回顾和保存&#xff0c;故而可以采用logging将信息存储起来。 先新建一个文件message.log代码如下&#xff1a; import logging logging.basicConfig(filename"messa…...

C语言假期作业 DAY 03

目录 题目 一、选择题 1、已知函数的原型是&#xff1a; int fun(char b[10], int *a); &#xff0c;设定义&#xff1a; char c[10];int d; &#xff0c;正确的调用语句是&#xff08; &#xff09; 2、请问下列表达式哪些会被编译器禁止【多选】&#xff08; &#xff09; 3、…...

使用serverless实现从oss下载文件并压缩

公司之前开发一个网盘系统, 可以上传文件, 打包压缩下载文件, 但是在处理大文件的时候, 服务器遇到了性能问题, 主要是这个项目是单机部署.......(离谱), 然后带宽只有100M, 现在用户比之前多很多, 然后所有人的压缩下载请求都给到这一台服务器了, 比如多个人下载的时候带宽问…...

从上到下打印二叉树

题目描述 从上到下打印出二叉树的每个节点&#xff0c;同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回&#xff1a; [3,9,20,15,7] 算法思想 建立一个vector数组ret用来当做返回的结果数组&#xff0c;建立一个队列用来接收二叉树…...

【推荐】排序模型的调优

【推荐】排序模型的调优 排序模型的选择 排序模型常见的训练方式 样本类别不均衡处理尝试 欠拟合 过拟合 其他问题 排序模型的选择 LR&#xff0c;GBDT&#xff0c;LRGBDT&#xff0c;FM/FFM&#xff0c; 深度模型&#xff08;wide & deep&#xff0c;DeepFM&#x…...

负载均衡安装配置详解

负载均衡&#xff08;Load Balancing&#xff09;是一种将网络流量分布到多个服务器上的技术&#xff0c;以提高系统的性能、可靠性和可扩展性。 在负载均衡中&#xff0c;有一个负载均衡器&#xff08;Load Balancer&#xff09;&#xff0c;它充当了传入请求的前置接收器。当…...

Java-逻辑控制

目录 一、顺序结构 二、分支结构 1.if语句 2.swich语句 三、循环结构 1.while循环 2.break 3.continue 4.for循环 5.do while循环 四、输入输出 1.输出到控制台 2.从键盘输入 一、顺序结构 按照代码的书写结构一行一行执行。 System.out.println("aaa"); …...

UE 透明渲染次序

附加顺序 用最外面的球, 依次附加里面的球 最后附加的物体优先级最高 附加顺序 用最里面的球, 依次附加外面的球 这样渲染顺序就对了...

【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout

author&#xff1a;&Carlton tag&#xff1a;C topic&#xff1a;【C】多态原理剖析&#xff0c;Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout website:黑马程序员C tool&#xff1a;Visual Studio 2019 date&#xff1a;2023年7月24日 目…...

vue实现flv格式视频播放

公司项目需要实现摄像头实时视频播放&#xff0c;flv格式的视频。先百度使用flv.js插件实现&#xff0c;但是两个摄像头一个能放一个不能放&#xff0c;没有找到原因。&#xff08;开始两个都能放&#xff0c;后端更改地址后不有一个不能放&#xff09;但是在另一个系统上是可以…...

iptables安全技术和防火墙

防火墙&#xff1a;隔离功能 位置&#xff1a;部署在网络边缘或主机边缘&#xff0c;在工作中&#xff0c;防火墙的主要作用是决定哪些数据可以被外网访问以及哪些数据可以进入内网访问&#xff0c;主要在网络层工作 其他类型的安全技术&#xff1a;1、入侵检测系统 2、入侵…...

微信小程序开发5

一、自定义组件-插槽 1.1、什么是插槽 在自定义组件的wxml结构中&#xff0c;可以提供一个<slot>节点(插槽)&#xff0c;用于承载组件使用者提供的wxml结构 1.2、单个插槽 在小程序中&#xff0c;默认每个自定义组件中允许使用一个<slot>进行占位&#xff0c;这种…...

【算法题】2681. 英雄的力量

题目&#xff1a; 给你一个下标从 0 开始的整数数组 nums &#xff0c;它表示英雄的能力值。如果我们选出一部分英雄&#xff0c;这组英雄的 力量 定义为&#xff1a; i0 &#xff0c;i1 &#xff0c;… ik 表示这组英雄在数组中的下标。那么这组英雄的力量为 max(nums[i0],n…...

fastutil简单测试下性能

前言 简单测试一下fastutil的实现和Java类库实现的速率。 使用jmh进行测试。 简单解释一下&#xff0c;每轮测试预热2次&#xff0c;每次1s&#xff1b;实测2次&#xff0c;每次1秒。 进行5轮测试。数组大小3种。 package fastutil;import it.unimi.dsi.fastutil.ints.IntArr…...

【FAQ】关于无法判断和区分用户与地图交互手势类型的解决办法

一&#xff0e; 问题描述 当用户通过缩放手势、平移手势、倾斜手势和旋转手势与地图交互&#xff0c;控制地图移动改变其可见区域时&#xff0c;华为地图SDK没有提供直接获取用户手势类型的API。 二&#xff0e; 解决方案 华为地图SDK的地图相机有提供CameraPosition类&…...

腾讯云裸金属服务器CPU型号处理器主频说明

腾讯云裸金属服务器CPU型号是什么&#xff1f;标准型BMSA2裸金属服务器CPU采用AMD EPYC ROME处理器&#xff0c;BMS5实例CPU采用Intel Xeon Cooper Lake处理器&#xff0c;腾讯云服务器网分享落进书房武器CPU型号、处理器主频说明&#xff1a; 裸金属服务器CPU处理器说明 腾讯…...

工程安全监测无线振弦采集仪在建筑物中的应用

工程安全监测无线振弦采集仪在建筑物中的应用 工程安全监测无线振弦采集仪是一种用于建筑物结构安全监测的设备&#xff0c;它采用了无线传输技术&#xff0c;具有实时性强、数据精度高等优点&#xff0c;被广泛应用于建筑物结构的实时监测和预警。下面将从设备的特点、应用场…...

【iOS】isKindOfClass和isMemberOfClass方法

前言 这个归根结底还是在考察我们对isa走向图和类的继承的理解&#xff0c;也就是苹果官方这幅图&#xff1a; 接下来的函数调用流程请参考这张图。 1 isKindOfClass方法 1.1 objc_opt_isKindOfClass C函数 查看源码可发现&#xff0c;无论是谁调用isKindOfClass方法都会…...

李飞飞「具身智能」VoxPoser:0预训练完成复杂指令

机器人接入大模型听懂人话 论文地址&#xff1a; https://voxposer.github.io/voxposer.pdf 项目主页&#xff1a; https://voxposer.github.io/ 参考链接&#xff1a; [1]https://twitter.com/wenlong_huang/status/1677375515811016704 [1]https://www.amacad.org/publicatio…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

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

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

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...

P10909 [蓝桥杯 2024 国 B] 立定跳远

# P10909 [蓝桥杯 2024 国 B] 立定跳远 ## 题目描述 在运动会上&#xff0c;小明从数轴的原点开始向正方向立定跳远。项目设置了 $n$ 个检查点 $a_1, a_2, \cdots , a_n$ 且 $a_i \ge a_{i−1} > 0$。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时&#xff0…...