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

机器学习 - 理论和定理

在机器学习中,有一些非常有名的理论或定理,对理解机器学习的内在特性非常有帮助。本文列出机器学习中常用的理论和定理,并举出对应的举例子加以深化理解,有些理论比较抽象,我们可以先记录下来,慢慢啃,慢慢理解。

一、没有免费午餐定理

没有十全十美的人,也没有十全十美的算法

是由 Wolpert 和 Mac- erday 在最优化理论中提出的.

“没有免费午餐定理”(No Free Lunch Theorem)是机器学习和优化理论中的一个基本观点,其核心思想是:不存在一种算法能在所有问题上都表现最好。换句话说,一个在某些问题上表现优秀的算法,在其他问题上可能表现平平甚至较差。如果对所有可能的数据分布进行平均,所有算法的表现其实是一样的。

直观解释

  • 针对不同问题的适应性
    假设你有很多不同类型的学习任务,每个任务都有不同的数据分布和特性。某个算法在处理图像识别时可能表现得非常出色,但当应用于文本情感分析或时间序列预测时,其性能可能就不尽如人意。没有一种通用的算法能在所有任务上都达到最优表现。

  • 平均性能一致
    从理论上讲,如果我们把所有可能的数据分布都考虑进去,任何算法的平均性能都会是相同的。这就是说,一个算法能在某些特定问题上“赚取免费午餐”(即取得高性能),必然会在其他问题上“赔钱”,从而总体上达到平衡。

举例说明

假设有两个算法:算法 A 和算法 B。

  • 算法 A 在图像分类问题上可能表现非常好,但在处理复杂文本任务时可能效果平平。
  • 而算法 B 在文本处理任务上表现优异,但在图像任务上则不及算法 A。
    如果我们对所有可能的问题进行平均,两者的总体表现会趋于相同。这就是“没有免费午餐”的意思:没有一个算法可以在所有问题上都优于其他算法,选择合适的算法必须根据具体任务的数据特性和需求来定。

实际意义

  • 算法选择
    在实际应用中,我们需要根据具体任务和数据特点选择最适合的算法,而不是盲目追求一种“万能”的算法。

  • 模型优化
    在开发过程中,往往需要结合领域知识、数据预处理、特征工程和调参等手段,对算法进行定制化优化,而不能依赖于单一算法解决所有问题。

  • 理论指导
    “没有免费午餐定理”提醒我们,任何算法都存在局限性,因此需要不断探索、比较和改进模型,从而找到最适合当前任务的方法。

总之,“没有免费午餐定理”强调了在机器学习中算法与问题之间的匹配关系,没有一种算法能够在所有情况下都优于其他算法,只有根据具体的应用场景和数据分布来选择和调优模型,才能获得最佳效果。

二、奥卡姆剃刀原理

本来无一物,何处惹尘埃

奥卡姆剃刀(Occam’s Razor)原理是由 14 世纪逻辑学家 William of Occam 提出的一个解决问题的法则:“如无必要,勿增实体”.

“奥卡姆剃刀原理”是一个哲学和科学中的基本原则,其核心思想是:在所有能够解释数据的假设中,应该选择最简单的那个。在机器学习中,这一原理被用来指导模型选择和复杂度控制。下面从几个角度来解释这一原理在机器学习中的含义,并举例说明。

1. 基本含义

  • 简单优先
    当多个模型都能很好地拟合数据时,奥卡姆剃刀原理建议选择结构更简单的模型。这通常意味着模型的参数较少、假设较少,易于解释和维护。

  • 防止过拟合
    复杂模型虽然在训练数据上可能表现得更好,但往往容易捕捉数据中的噪声,从而导致过拟合。简单模型因为结构简洁,通常更具有泛化能力,在新数据上表现更稳健。

2. 数学与统计视角

  • 贝叶斯模型选择
    在贝叶斯框架下,模型比较时会考虑模型的“证据”(marginal likelihood),其中较简单的模型由于参数空间较小,往往会获得较高的边际似然(这被称为“奥卡姆因子”)。这说明简单模型在解释数据时不会引入过多不必要的复杂度。

  • 模型复杂度与泛化误差
    经验表明,随着模型复杂度的增加,训练误差可能降低,但泛化误差(在新数据上的表现)可能会增加。奥卡姆剃刀原理鼓励我们选择在平衡了训练误差和泛化能力的前提下最简单的模型。

3. 举例说明

例子 1:线性回归 vs. 多项式回归
假设我们有一组数据用于预测房价。

  • 如果简单的线性回归模型(即预测房价与房屋面积呈线性关系)能够达到满意的预测效果,那么根据奥卡姆剃刀原理,我们更倾向于选择这个模型,而不必采用复杂的高阶多项式回归模型。
  • 复杂模型虽然可能在训练数据上拟合得更好,但容易过拟合,且解释性较差,因此在性能相似的情况下,线性模型是更好的选择。

例子 2:决策树深度
在使用决策树进行分类时,深度较大的树可以捕捉到更多细节,可能在训练集上几乎没有错误,但在测试集上可能泛化不佳。

  • 根据奥卡姆剃刀原理,如果一棵浅层决策树与一棵深层决策树在测试集上的性能相差不大,那么我们应选择浅层树,因为它更简单、容易解释,并且不容易过拟合。

4. 总结

  • 直观理解
    就像剃刀只保留必要的刃口一样,在模型选择中,我们只选择能解释数据而不引入额外复杂性的模型。

  • 实际意义
    选择简单模型有助于提高泛化能力,降低计算复杂度,并使模型更容易被人类理解和解释。

通过奥卡姆剃刀原理,我们在机器学习中追求的是在保持模型性能的同时,尽量减少不必要的复杂度,从而构建既高效又稳健的预测模型。

三、机器学习中的丑小鸭定理

沉迷于表象,一定难以捕捉到事情的真相

这 里 的“ 丑小鸭 ”是 指白天鹅的幼雏,而不是 “丑陋的小鸭子”.

是 1969 年由渡边慧提出的 [Watan- abe, 1969].“丑小鸭与白天鹅之间的区别和两只白天鹅之间的区别一样大”.

“丑小鸭定理”在机器学习和模式识别中,常用来说明:如果没有任何先验知识或对特征的重要性进行权重分配,那么在考虑所有可能特征的情况下,任意两个对象都可以被认为在相似性上是等价的。也就是说,没有任何一个分类或聚类是“自然”的,所有的划分在理论上都同样有效。

直观理解

  • 没有偏好
    想象一下,如果你对两个对象的所有可能特征都不加权重地考虑,那么你可以找到很多特征使得它们既相似又不同。换句话说,没有一个特征比另一个特征更重要,那么你就无法客观地说哪个对象更像哪个,因为每对对象都有很多可以比较的方面。

  • 归根结底需要先验知识
    “丑小鸭定理”告诉我们,要区分哪些对象更相似,我们必须事先引入一些领域知识或偏见,告诉模型哪些特征是重要的。否则,在没有额外信息的情况下,所有对象在所有可能的特征组合下都可以看作是等同的。

举例说明

例子:动物的相似性比较
假设我们想比较两只动物:一只鸭子和一只天鹅。如果不考虑先验知识,只是列举它们所有可能的特征(颜色、大小、羽毛数量、叫声频率、是否会游泳、是否会飞、甚至“丑”与“美”的主观评价等),你可能会发现:

  • 在某些特征上(比如都能游泳,都有羽毛),它们是相似的;
  • 在其他特征上(比如体型、颈部长度),它们又有区别。

如果不预先确定哪些特征更重要,那么就无法说鸭子比天鹅更相似或更不同。事实上,在考虑所有特征的情况下,任何两个动物之间都可以找出一些相似之处和不同之处。因此,没有一个“自然”的分类能够自动出现。

这就是“丑小鸭定理”想表达的意思:
在没有先验知识的情况下,所有的对象在所有可能的特征下都是“丑小鸭”,它们的相似性是无区别的。

结论

“丑小鸭定理”提醒我们,机器学习中的分类、聚类等任务必须依赖于领域知识或者对特征的重要性进行合理的权重分配。否则,仅仅依靠数据本身而不区分哪些特征更有意义,所有的划分都可能同样有效,这使得模型无法自动找到“自然”的分类边界。

四、归纳偏置

在机器学习中,很多学习算法经常会对学习的问题做一些假设,这些假设就 称为归纳偏置(Inductive Bias)[Mitchell, 1997].比如在最近邻分类器中,我们 会假设在特征空间中,一个小的局部区域中的大部分样本同属一类.在朴素贝叶 斯分类器中,我们会假设每个特征的条件概率是互相独立的.

归纳偏置在贝叶斯学习中也经常称为先验(Prior).

归纳偏置(Inductive Bias)是指机器学习算法在从有限的训练数据中归纳出一般规律时,所依赖的先验假设或倾向。也就是说,为了使算法能够对未见过的数据做出合理的预测,它必须在设计时引入一些假设或偏好,从而缩小可能的假设空间。下面详细解释这一概念:

1. 为什么需要归纳偏置?

  • 泛化的必要性
    训练数据往往是有限且部分代表性的。如果不做任何假设,一个学习算法在面对全新的、未见的数据时就无从推断正确的预测。归纳偏置提供了一种“猜测”机制,让算法在数据不足的情况下也能推广出一般规律。

  • 无免费午餐定理
    根据无免费午餐定理,没有一种算法能够在所有可能的问题上都表现优异。因此,每个算法必须具备一定的归纳偏置来适应特定类型的问题。如果算法对所有情况一视同仁,就无法有效泛化。

2. 归纳偏置的表现形式

不同的学习算法有不同的归纳偏置,例如:

  • 线性模型
    线性回归或逻辑回归假设数据之间存在线性关系。这个假设就是它们的归纳偏置,意味着它们只能很好地处理近似线性的问题。

  • 决策树
    决策树假设数据可以通过一系列的规则或阈值进行划分,其归纳偏置体现在通过树形结构捕捉特征的重要性和条件关系。

  • 神经网络
    深度神经网络通过层次结构和激活函数捕捉数据的复杂非线性关系,其归纳偏置包括假设存在某种层次化的表示,以及利用大量数据可以学到这种表示。

3. 如何理解归纳偏置

  • 简化问题空间
    归纳偏置帮助我们限制假设空间,使得在无限可能的模型中,我们只考虑那些符合先验假设的模型。这就像是对模型的“先天筛选”,使得算法能够更快、更准确地找到适合当前问题的模型。

  • 先验知识的体现
    归纳偏置可以看作是将领域知识或经验融入到算法中。例如,如果你知道某个问题中变量之间呈线性关系,那么选择线性模型(其归纳偏置就是线性关系)就更合适。

  • 权衡泛化与拟合
    归纳偏置在一定程度上限制了模型的复杂度,帮助防止过拟合,但同时也可能使模型无法捕捉更复杂的模式。选择合适的归纳偏置,就是在模型的表达能力和泛化能力之间找到平衡。

4. 简单例子

例子:预测房价

假设你要预测房价,并且有少量数据。如果你选择了线性回归模型:

  • 归纳偏置:你假设房价与房屋面积等特征之间存在线性关系。
  • 效果:如果实际关系接近线性,那么这种归纳偏置就能帮助你从有限数据中学到有效的预测规则;如果实际关系非常复杂,则这种简单的归纳偏置可能导致模型表现不佳。

另一种情况是使用高阶多项式模型:

  • 归纳偏置:假设房价与特征之间有更复杂的非线性关系。
  • 效果:这种偏置可能在训练数据上拟合得非常好,但如果数据量不足,可能会过拟合,泛化能力下降。

总结

归纳偏置是机器学习中不可避免的,它体现在算法对数据的先验假设中。它的存在使得算法能够从有限的数据中归纳出一般规律,并对新数据做出预测。理解归纳偏置有助于我们选择合适的算法和模型,从而在具体问题中取得更好的泛化性能。

五、贝叶斯模型如何理解?获得较高的边际似然是什么意思?以及奥卡姆因子是什么意思 ?

贝叶斯模型是一种基于贝叶斯定理构建的统计模型,其核心在于利用先验知识和观测数据来更新对模型参数或假设的信念。下面逐步解释相关概念:

1. 贝叶斯模型的理解

在贝叶斯模型中,我们关心的是给定数据 D 后,模型参数或假设 θ的后验概率:

  • 先验概率 P(θ):在没有观察数据之前,我们对参数 θ的信念或预期。
  • 似然函数 P(D∣θ):在假设参数为 θ 的条件下,数据 D 出现的概率。
  • 边际似然 P(D):又称为证据(Evidence),是对所有可能参数取值的似然函数和先验的积分:  它衡量了数据在整个模型下出现的概率。
  • 后验概率 P(θ∣D):结合先验和数据后,我们对参数 θ的更新信念。

贝叶斯模型的优势在于能够将先验知识与数据结合,并且在模型选择时,通过比较后验概率或边际似然来做出决策。

2. 获得较高的边际似然是什么意思?

边际似然(Marginal Likelihood) P(D) 表示在整个参数空间上数据 D 的总概率。对于不同模型或假设,我们可以计算它们对数据的“解释能力”,这通常用于模型比较或选择。

  • 较高的边际似然
    如果一个模型的边际似然较高,说明在对所有可能的参数取值加权后,该模型对数据的整体解释能力较好。换句话说,数据在该模型下出现的概率较大。

  • 直观理解
    想象两个模型,一个简单、参数少,一个复杂、参数多。虽然复杂模型可能在某些特定参数下拟合数据得很好,但在整个参数空间中,由于参数空间大且不容易同时对所有参数都“对齐”,其加权后的边际似然可能较低。而简单模型因为参数空间较小,更容易在整体上解释数据,因此其边际似然较高。

3. 奥卡姆因子(Occam Factor)

奥卡姆因子源自奥卡姆剃刀原理,用于在贝叶斯模型选择中平衡模型复杂度与拟合能力。其主要思想是:

  • 简单优先:在多个能够解释数据的模型中,简单模型(参数少、假设少)更受青睐,因为它们对数据的解释更“高效”。
  • 数学体现
    在贝叶斯模型中,边际似然 P(D) 包括对整个参数空间的积分。较复杂的模型由于参数空间大,会有更多“低似然”区域,从而使得整体积分值(即边际似然)受到惩罚。这个惩罚效应就是所谓的“奥卡姆因子”。
  • 直观理解
    奥卡姆因子可以看作是对模型复杂度的一种惩罚,帮助我们选择既能很好拟合数据又不过度复杂的模型。简单的模型在边际似然计算中往往获得“额外加分”,从而在模型比较中占优势。

总结

  • 贝叶斯模型:利用先验和数据的似然,计算后验概率,对模型参数进行更新和推断。
  • 边际似然:是数据在整个参数空间上的加权似然,反映了模型对数据整体解释能力。较高的边际似然说明模型整体上更适合数据。
  • 奥卡姆因子:是贝叶斯模型选择中隐含的对模型复杂度的惩罚,帮助选择简单且解释力强的模型,体现了“没有免费的午餐”的原则。

简单例子
假设我们有两个模型 A 和 B 用于预测房价。

  • 模型 A 是简单的线性模型,只有两个参数;
  • 模型 B 是高阶多项式模型,有很多参数。

虽然模型 B 在某些参数设定下可能拟合训练数据非常好,但在整个参数空间中,由于复杂性高,其边际似然(对所有参数可能性的加权积分)可能比模型 A 低。这样,贝叶斯模型选择倾向于选择模型 A,因为它获得了较高的边际似然,这种情况正体现了奥卡姆因子——简单模型在解释数据时更“高效”。

相关文章:

机器学习 - 理论和定理

在机器学习中,有一些非常有名的理论或定理,对理解机器学习的内在特性非常有帮助。本文列出机器学习中常用的理论和定理,并举出对应的举例子加以深化理解,有些理论比较抽象,我们可以先记录下来,慢慢啃&#…...

2025.2.11——一、[极客大挑战 2019]PHP wakeup绕过|备份文件|代码审计

题目来源:BUUCTF [极客大挑战 2019]PHP 目录 一、打开靶机,整理信息 二、解题思路 step 1:目录扫描、爆破 step 2:代码审计 1.index.php 2.class.php 3.flag.php step 3:绕过__wakeup重置 ​编辑 三、小结…...

读取本地excel删除第一行,并生成List数组

在 pom.xml 里添加如下依赖&#xff1a; <dependencies><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version></dependency><dependency><groupId>org.ap…...

Vivado生成edif网表及其使用

介绍如何在Vivado中将模块设为顶层&#xff0c;并生成相应的网表文件&#xff08;Verilog文件和edif文件&#xff09;&#xff0c;该过程适用于需要将一个模块作为顶层设计进行综合&#xff0c;并生成用于其他工程中的网表文件的情况。 例如要将fpga_top模块制作成网表给其它工…...

JAVA生产环境(IDEA)排查死锁

使用 IntelliJ IDEA 排查死锁 IntelliJ IDEA 提供了强大的工具来帮助开发者排查死锁问题。以下是具体的排查步骤&#xff1a; 1. 编写并运行代码 首先&#xff0c;我们编写一个可能导致死锁的示例代码&#xff1a; public class DeadlockExample {private static final Obj…...

Mac 下使用多版本 Node

一、导读 使用 n 实现 Mac 下 Nodejs 的多版本切换&#xff0c;需要先安装一个版本的 Node.js&#xff0c;然后使用 npm 安装 n&#xff0c;再通过 n 管理 node 的多版本切换。 二、使用 npm 全局安装 n sudo npm install -g n 三、根据需求安装指定版本的 node sudo -E n…...

AI学习记录 - 最简单的专家模型 MOE

代码 import torch import torch.nn as nn import torch.nn.functional as F from typing import Tupleclass BasicExpert(nn.Module):# 一个 Expert 可以是一个最简单的&#xff0c; linear 层即可# 也可以是 MLP 层# 也可以是 更复杂的 MLP 层&#xff08;active function 设…...

【2025深度学习系列专栏大纲:深入探索与实践深度学习】

第一部分:深度学习基础篇 第1章:深度学习概览 1.1 深度学习的历史背景与发展轨迹 1.2 深度学习与机器学习、传统人工智能的区别与联系 1.3 深度学习的核心组件与概念解析 神经网络基础 激活函数的作用与类型 损失函数与优化算法的选择 1.4 深度学习框架简介与选择建议 第2…...

DDD聚合在 ASP.NET Core中的实现

目录 工作单元&#xff08;UnitOfWork&#xff09;的实现 聚合与聚合根的实现 实现 聚合与DbContext的关系 区分聚合根实体和其他实体 跨表查询 实现实体不要面向数据库建模 工作单元&#xff08;UnitOfWork&#xff09;的实现 EFCore的DbContext&#xff1a;跟踪对象状…...

数据治理双证通关经验分享 | CDGA/CDGP备考全指南

历经1个月多的系统准备&#xff0c;本人于2024年顺利通过DAMA China的CDGA&#xff08;数据治理工程师&#xff09;和CDGP&#xff08;数据治理专家&#xff09;双认证。现将备考经验与资源体系化整理&#xff0c;助力从业者高效通关。 &#x1f31f; 认证价值与政策背景 根据…...

Aitken 逐次线性插值

Aitken 逐次线性插值 用 Lagrange 插值多项式 L n ( x ) L_n(x) Ln​(x)计算函数近似值时&#xff0c;如需增加插值节点&#xff0c;那么原来算出的数据均不能利用&#xff0c;必须重新计算。为克服这个缺点&#xff0c;可用逐次线性插值方法求得高次插值。 令 I i 1 , i 2…...

亚信安全正式接入DeepSeek

亚信安全致力于“数据驱动、AI原生”战略&#xff0c;早在2024年5月&#xff0c;推出了“信立方”安全大模型、安全MaaS平台和一系列安全智能体&#xff0c;为网络安全运营、网络安全检测提供AI技术能力。自2024年12月DeepSeek-V3发布以来&#xff0c;亚信安全人工智能实验室利…...

unet学习(初学者 自用)

代码解读 | 极简代码遥感语义分割&#xff0c;结合GDAL从零实现&#xff0c;以U-Net和建筑物提取为例 以上面链接中的代码为例&#xff0c;逐行解释。 训练 unet的train.py如下&#xff1a; import torch.nn as nn import torch import gdal import numpy as np from torch…...

HTML之JavaScript运算符

HTML之JavaScript运算符 1.算术运算符 - * / %除以0&#xff0c;结果为Infinity取余数&#xff0c;如果除数为0&#xff0c;结果为NaN NAN:Not A Number2.复合赋值运算符 - * / %/ 除以0&#xff0c;结果为Infinity% 如果除数为0&#xff0c;结果为NaN NaN:No…...

CCFCSP第34次认证第一题——矩阵重塑(其一)

第34次认证第一题——矩阵重塑&#xff08;其一&#xff09; 官网链接 时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 相关文件&#xff1a; 题目目录&#xff08;样例文件&#xff09; 题目背景 矩阵&#xff08;二维&#xff09;的重塑&#xff08;reshap…...

探索B-树系列

&#x1f308;前言&#x1f308; 本文将讲解B树系列&#xff0c;包含 B-树&#xff0c;B树&#xff0c;B*树&#xff0c;其中主要讲解B树底层原理&#xff0c;为什么用B树作为外查询的数据结构&#xff0c;以及B-树插入操作并用代码实现&#xff1b;介绍B树、B*树。 &#x1f4…...

【Copilot】Redis SCAN SSCAN

目录 SCAN 命令SSCAN 命令使用示例原理Redis SCAN 和 SSCAN 命令的注意事项及风险注意事项风险 以下内容均由Github Copilot生成。 SCAN 和 SSCAN 命令是 Redis 提供的用于增量迭代遍历键或集合元素的命令。它们的主要优点是可以避免一次性返回大量数据&#xff0c;从而减少对 …...

GRN前沿:DeepMCL:通过深度多视图对比学习从单细胞基因表达数据推断基因调控网络

1.论文原名&#xff1a;Inferring gene regulatory networks from single-cell gene expression data via deep multi-view contrastive learning 2.发表日期&#xff1a;2023 摘要&#xff1a; 基因调控网络&#xff08;GRNs&#xff09;的构建对于理解细胞内复杂的调控机制…...

在软件产品从开发到上线过程中,不同阶段可能出现哪些问题,导致软件最终出现线上bug

在软件产品从开发到上线的全生命周期中&#xff0c;不同阶段都可能因流程漏洞、技术疏忽或人为因素导致线上问题。以下是各阶段常见问题及典型案例&#xff1a; 1. 需求分析与设计阶段 问题根源&#xff1a;业务逻辑不清晰或设计缺陷 典型问题&#xff1a; 需求文档模糊&#…...

Linux 内核架构入门:从基础概念到面试指南*

1. 引言 Linux 内核是现代操作系统的核心&#xff0c;负责管理硬件资源、提供系统调用、处理进程调度等功能。对于初学者来说&#xff0c;理解 Linux 内核的架构是深入操作系统开发的第一步。本篇博文将详细介绍 Linux 内核的架构体系&#xff0c;结合硬件、子系统及软件支持的…...

【竞技宝】PGL瓦拉几亚S4预选:Tidebound2-0轻取spiky

北京时间2月13日,DOTA2的PGL瓦拉几亚S4预选赛继续进行,昨日进行的中国区预选赛胜者组首轮Tidebound对阵的spiky比赛中,以下是本场比赛的详细战报。 第一局: 首局比赛,spiky在天辉方,Tidebound在夜魇方。阵容方面,spiky点出了幻刺、火枪、猛犸、小强、巫妖,Tidebound则是拿到飞…...

C#学习之DateTime 类

目录 一、DateTime 类的常用方法和属性的汇总表格 二、常用方法程序示例 1. 获取当前本地时间 2. 获取当前 UTC 时间 3. 格式化日期和时间 4. 获取特定部分的时间 5. 获取时间戳 6. 获取时区信息 三、总结 一、DateTime 类的常用方法和属性的汇总表格 在 C# 中&#x…...

EasyRTC智能硬件:小体积,大能量,开启音视频互动新体验

在万物互联的时代&#xff0c;智能硬件正以前所未有的速度融入我们的生活。然而&#xff0c;受限于硬件性能和网络环境&#xff0c;许多智能硬件在音视频互动体验上仍存在延迟高、卡顿、回声等问题&#xff0c;严重影响了用户的使用体验。 EasyRTC智能硬件&#xff0c;凭借其强…...

【ESP32指向鼠标】——icm20948与esp32通信

【ESP32指向鼠标】——icm20948与esp32通信 ICM-20948介绍 ICM-20948 是一款由 InvenSense&#xff08;现为 TDK 的一部分&#xff09;生产的 9 轴传感器集成电路。它结合了 陀螺仪、加速度计和磁力计。 内置了 DMP&#xff08;Digital Motion Processor&#xff09;即负责执…...

算法——结合实例了解深度优先搜索(DFS)

一&#xff0c;深度优先搜索&#xff08;DFS&#xff09;详解 DFS是什么&#xff1f; 深度优先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09;是一种用于遍历或搜索树、图的算法。其核心思想是尽可能深地探索分支&#xff0c;直到无法继续时回溯到上一个节点…...

每日温度问题:如何高效解决?

给定一个整数数组 temperatures&#xff0c;表示每天的温度&#xff0c;要求返回一个数组 answer&#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 问题分析 我们需要计算…...

华为FreeBuds Pro4和FreeBuds Pro3区别,相比上一代升级了什么

华为FreeBuds Pro 4于2024年11月26日在华为Mate品牌盛典上正式发布&#xff0c;是华为音频产品线中的旗舰级产品&#xff0c;12月亮相华为海外旗舰产品发布会。华为FreeBuds Pro 4耳机采用入耳式设计&#xff0c;可选曜石黑、雪域白、云杉绿三款配色。 FreeBuds Pro 4 FreeBud…...

读取本地excel并生成map,key为第一列,value为第二列

添加依赖&#xff1a;在 pom.xml 文件中添加以下依赖&#xff1a; <dependencies><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version></dependency><dependency&…...

SpringMVC学习使用

一、SpringMVC简单理解 1.1 Spring与Web环境集成 1.1.1 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件) 方式获取的&#xff0c;但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext(sp…...

运维-自动访问系统并截图

需求背景 因项目甲方要求需要对系统进行巡检&#xff0c;由于系统服务器较多&#xff0c;并且已经采用PrometheusGrafana对系统服务器进行管理&#xff0c;如果要完成该任务&#xff0c;需要安排一个人力对各个系统和服务器进行一一截图等操作&#xff0c;费时费力&#xff0c…...