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

什么是信息熵,什么是交叉熵,什么是KL散度?

什么是信息熵?

信息熵(Entropy)是信息论中的一个基本概念,用来衡量一个随机变量不确定性的大小。它反映了对一个事件结果的预测难度,或者说是描述这个事件需要多少“信息量”。信息熵是由香农(Claude Shannon)提出的,信息熵的大小越高,代表事件结果的不确定性越大,反之则越小。

1. 信息熵的定义

给定一个离散的随机变量 X X X,它有 n n n 个可能的取值( x 1 , x 2 , … , x n x_1, x_2, \dots, x_n x1,x2,,xn),每个取值的概率分别为 p ( x 1 ) , p ( x 2 ) , … , p ( x n ) p(x_1), p(x_2), \dots, p(x_n) p(x1),p(x2),,p(xn)。则信息熵 H ( X ) H(X) H(X) 的定义为:

H ( X ) = − ∑ i = 1 n p ( x i ) log ⁡ 2 p ( x i ) H(X) = -\sum_{i=1}^n p(x_i) \log_2 p(x_i) H(X)=i=1np(xi)log2p(xi)

其中:

  • p ( x i ) p(x_i) p(xi) 表示事件 x i x_i xi 发生的概率。
  • log ⁡ 2 p ( x i ) \log_2 p(x_i) log2p(xi) 表示事件发生所带来的“信息量”,它是概率的负对数,概率越低,信息量越大。
  • 信息熵的单位是比特(bit),在公式中使用对数底数为2。

2. 信息熵的直观解释

信息熵描述的是不确定性:如果一个事件的结果很确定,信息熵就会很小;如果事件的结果不确定性很高,则信息熵会较大。以抛硬币和掷骰子为例:

  • 公平的硬币:抛硬币有两种可能结果(正面、反面),概率均为 0.5。此时信息熵为:

H ( X ) = − ( 0.5 log ⁡ 2 0.5 + 0.5 log ⁡ 2 0.5 ) = 1 比特 H(X) = - (0.5 \log_2 0.5 + 0.5 \log_2 0.5) = 1 \text{ 比特} H(X)=(0.5log20.5+0.5log20.5)=1 比特
也就是说对于这枚硬币,我们在没有额外信息的情况下是很难预测到底抛硬币后是正面朝上还是反面朝上。

  • 不公平的硬币:如果硬币不公平,正面概率为 0.9,反面概率为 0.1。此时的信息熵较小,因为我们几乎可以预测结果(总是正面)。计算得:

H ( X ) = − ( 0.9 log ⁡ 2 0.9 + 0.1 log ⁡ 2 0.1 ) ≈ 0.47 比特 H(X) = - (0.9 \log_2 0.9 + 0.1 \log_2 0.1) \approx 0.47 \text{ 比特} H(X)=(0.9log20.9+0.1log20.1)0.47 比特

因此,不公平的硬币的信息熵小于公平硬币,这表明预测其结果的不确定性较低。这枚硬币相较于公平硬币而言,更容易猜出结果(肯定会首先猜测证明朝上),就说明紊乱程度低,自然信息熵就低。

3. 信息熵的特性

信息熵的几个重要特性包括:

  • 非负性:信息熵总是非负的,且 H ( X ) ≥ 0 H(X) \geq 0 H(X)0。当随机变量 X X X 的结果完全确定时,信息熵 H ( X ) = 0 H(X) = 0 H(X)=0
  • 最大化:对于一个有 n n n 个可能取值的离散均匀分布,信息熵最大。也就是说,当每个事件的概率相等时,不确定性达到最大。例如,对于一个6面骰子,每个面出现的概率都是 1 6 \frac{1}{6} 61,此时信息熵最大。
  • 加法性:对于多个独立事件,其联合熵为各个事件的熵的和。即如果 X X X Y Y Y 是两个独立随机变量,那么 H ( X , Y ) = H ( X ) + H ( Y ) H(X, Y) = H(X) + H(Y) H(X,Y)=H(X)+H(Y)

4. 信息熵的计算示例

假设有一个数据集 D D D,包含5个样本,用于预测某人是否会外出。其中有3个样本为“是”(外出),2个样本为“否”(不外出)。计算熵:

  • 样本中“是”事件的概率: p ( 是 ) = 3 5 p(是) = \frac{3}{5} p()=53
  • 样本中“否”事件的概率: p ( 否 ) = 2 5 p(否) = \frac{2}{5} p()=52
    H ( D ) H(D) H(D) 的计算如下:

H ( D ) = − ( 3 5 log ⁡ 2 3 5 + 2 5 log ⁡ 2 2 5 ) H(D) = - \left( \frac{3}{5} \log_2 \frac{3}{5} + \frac{2}{5} \log_2 \frac{2}{5} \right) H(D)=(53log253+52log252)

通过计算,得到:

H ( D ) ≈ 0.971 比特 H(D) \approx 0.971 \text{ 比特} H(D)0.971 比特

这表示在给定数据集 D D D 的情况下,每次对“是否外出”进行预测时,大约需要 0.971 比特的信息来消除不确定性。

KL散度(Kullback-Leibler Divergence),也可以被叫做相对熵,是一种用于衡量两个概率分布之间差异的非对称度量。在信息论和机器学习中,KL散度广泛用于评估一个分布相对于另一个分布的“信息丢失”程度。或者也可以认为,KL散度用于衡量真实分布与近似分布之间的差异,或计算两个分布之间的信息距离。

什么是KL散度?

1. KL散度的定义

给定两个概率分布 P P P Q Q Q,其中 P P P 通常是数据的真实分布 Q Q Q 是用来近似 P P P 的分布(例如模型分布或者预测分布),KL散度 D K L ( P ∥ Q ) D_{KL}(P \parallel Q) DKL(PQ) 的数学表达式为:

D K L ( P ∥ Q ) = ∑ x P ( x ) log ⁡ P ( x ) Q ( x ) D_{KL}(P \parallel Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)} DKL(PQ)=xP(x)logQ(x)P(x)

或对于连续分布,则为积分形式:

D K L ( P ∥ Q ) = ∫ P ( x ) log ⁡ P ( x ) Q ( x ) d x D_{KL}(P \parallel Q) = \int P(x) \log \frac{P(x)}{Q(x)} \, dx DKL(PQ)=P(x)logQ(x)P(x)dx

其中:

  • P ( x ) P(x) P(x) Q ( x ) Q(x) Q(x) 分别是两个分布在点 x x x 的概率值。
  • log ⁡ P ( x ) Q ( x ) \log \frac{P(x)}{Q(x)} logQ(x)P(x) 表示 P P P 相对于 Q Q Q 的信息增益。(信息增益表示在某个条件下,数据的熵(不确定性)减少的量。)

2. KL散度的直观解释

KL散度可以理解为:在给定分布 Q Q Q 的情况下,使用分布 P P P 需要多大的“信息量”或“信息代价”来描述或编码数据。KL散度越大,表示分布 P P P 和分布 Q Q Q 越不相似。

例如:

  • P P P Q Q Q 完全一致时,KL散度 D K L ( P ∥ Q ) = 0 D_{KL}(P \parallel Q) = 0 DKL(PQ)=0
  • P P P Q Q Q 有明显差异时,KL散度会是一个较大的正值。
  • 由于 KL 散度不对称,所以 D K L ( P ∥ Q ) ≠ D K L ( Q ∥ P ) D_{KL}(P \parallel Q) \neq D_{KL}(Q \parallel P) DKL(PQ)=DKL(QP)

3. KL散度的特性

  • 非负性 D K L ( P ∥ Q ) ≥ 0 D_{KL}(P \parallel Q) \geq 0 DKL(PQ)0。当且仅当 P = Q P = Q P=Q 时, D K L ( P ∥ Q ) = 0 D_{KL}(P \parallel Q) = 0 DKL(PQ)=0。这称为信息论中的 Gibbs 不等式。
  • 非对称性:KL散度并不对称,即 D K L ( P ∥ Q ) ≠ D K L ( Q ∥ P ) D_{KL}(P \parallel Q) \neq D_{KL}(Q \parallel P) DKL(PQ)=DKL(QP)。这也意味着它不能作为真正的“距离度量”,因为距离度量一般要求对称性。
  • 信息增益:KL散度度量的是当用分布 Q Q Q 来替代分布 P P P 时,信息的额外损失。它描述了我们在使用 Q Q Q 来代替 P P P 时,丢失的“信息量”。

4. KL散度的计算实例

假设有两个离散分布 P P P Q Q Q

  • P P P: P ( x = 1 ) = 0.4 P(x=1)=0.4 P(x=1)=0.4, P ( x = 2 ) = 0.6 P(x=2)=0.6 P(x=2)=0.6
  • Q Q Q: Q ( x = 1 ) = 0.5 Q(x=1)=0.5 Q(x=1)=0.5, Q ( x = 2 ) = 0.5 Q(x=2)=0.5 Q(x=2)=0.5
    KL散度计算如下:
    D K L ( P ∥ Q ) = 0.4 log ⁡ 0.4 0.5 + 0.6 log ⁡ 0.6 0.5 D_{KL}(P \parallel Q) = 0.4 \log \frac{0.4}{0.5} + 0.6 \log \frac{0.6}{0.5} DKL(PQ)=0.4log0.50.4+0.6log0.50.6
    通过计算可以得到:
    D K L ( P ∥ Q ) = 0.4 × ( − 0.263 ) + 0.6 × 0.176 = − 0.1052 + 0.1056 ≈ 0.0004 D_{KL}(P \parallel Q) = 0.4 \times (-0.263) + 0.6 \times 0.176 = -0.1052 + 0.1056 \approx 0.0004 DKL(PQ)=0.4×(0.263)+0.6×0.176=0.1052+0.10560.0004
    说明分布 P P P Q Q Q 的差异很小。
    其实就好比两个数字比较差异,我们会将他们相减,如果减出来=0说明二者相等,而KL散度就是把数字的差异放在了分布的差异上,两个分布(两个数字)差异性越大,那么KL散度(数字的差值)越大,代表二者越不相似。

什么是交叉熵?

讲完KL散度和信息熵,我们再引入交叉熵(Cross Entropy),它是用来度量两个概率分布之间的相似性的。在机器学习和深度学习中,交叉熵损失函数是用于分类任务的常用损失函数,通过计算真实分布和预测分布之间的差异,帮助模型更好地拟合数据。

1. 交叉熵的定义

给定两个概率分布 P P P Q Q Q

  • P P P 表示真实分布(例如,数据的标签分布)。
  • Q Q Q 表示预测分布(例如,模型的输出概率分布)。
    交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 的定义是:

H ( P , Q ) = − ∑ x P ( x ) log ⁡ Q ( x ) H(P, Q) = -\sum_{x} P(x) \log Q(x) H(P,Q)=xP(x)logQ(x)

在这个公式中:

  • x x x 表示数据样本的取值。
  • P ( x ) P(x) P(x) 是样本在真实分布中的概率。
  • Q ( x ) Q(x) Q(x) 是样本在预测分布中的概率。
    交叉熵度量了真实分布 P P P 下观测到数据点时的“平均信息量”,而这种信息量是基于模型提供的预测分布 Q Q Q 来计算的。交叉熵越小,表示 Q Q Q P P P 越接近;交叉熵越大,表示 Q Q Q P P P 越不接近。

2. 交叉熵与熵和KL散度的关系

交叉熵可以拆解为熵和KL散度之和:

H ( P , Q ) = H ( P ) + D K L ( P ∥ Q ) H(P, Q) = H(P) + D_{KL}(P \parallel Q) H(P,Q)=H(P)+DKL(PQ)

其中:

  • H ( P ) H(P) H(P) 是数据真实分布 P P P 的熵,表示在真实分布下系统的不确定性。
  • D K L ( P ∥ Q ) D_{KL}(P \parallel Q) DKL(PQ) 是KL散度,表示分布 Q Q Q 相对于分布 P P P 的“信息损失”或“信息差异”。
    这说明交叉熵实际上是熵和KL散度的组合。当 Q Q Q P P P 越接近时,KL散度 D K L ( P ∥ Q ) D_{KL}(P \parallel Q) DKL(PQ) 越小,交叉熵也就越接近 H ( P ) H(P) H(P) 的最小值。

3. 交叉熵在分类中的应用

在机器学习中,交叉熵损失函数用于二分类和多分类任务:

(1)二分类交叉熵

对于一个二分类问题,真实标签 y y y 可以是0或1,模型的预测概率为 y ^ \hat{y} y^,则二分类的交叉熵损失为:

H ( y , y ^ ) = − [ y log ⁡ ( y ^ ) + ( 1 − y ) log ⁡ ( 1 − y ^ ) ] H(y, \hat{y}) = -[y \log(\hat{y}) + (1 - y) \log(1 - \hat{y})] H(y,y^)=[ylog(y^)+(1y)log(1y^)]

  • 当真实标签 y = 1 y = 1 y=1 时,损失为 − log ⁡ ( y ^ ) -\log(\hat{y}) log(y^),即预测值 y ^ \hat{y} y^ 越接近1,损失越小。
  • 当真实标签 y = 0 y = 0 y=0 时,损失为 − log ⁡ ( 1 − y ^ ) -\log(1 - \hat{y}) log(1y^),即预测值 y ^ \hat{y} y^ 越接近0,损失越小。
    这种损失函数逼迫模型输出的概率接近真实标签,从而提升模型的分类效果。
(2)多分类交叉熵

对于一个有 k k k 类的多分类问题,使用 softmax 函数输出每个类别的概率预测 y ^ i \hat{y}_i y^i,真实标签用 one-hot 编码表示,交叉熵损失为:

H ( y , y ^ ) = − ∑ i = 1 k y i log ⁡ ( y ^ i ) H(y, \hat{y}) = -\sum_{i=1}^k y_i \log(\hat{y}_i) H(y,y^)=i=1kyilog(y^i)

其中 y i y_i yi 是真实类别的 one-hot 编码(即正确类别对应的概率为1,其余类别为0), y ^ i \hat{y}_i y^i 是模型对第 i i i 类的预测概率。

4. 交叉熵的直观理解

交叉熵可以理解为一个度量模型预测与真实标签之间相似度的指标。当模型预测接近真实分布 P P P 时,交叉熵的值较小;当模型预测偏离真实分布 P P P 时,交叉熵的值较大。因此,通过最小化交叉熵损失,模型能够更好地匹配真实标签的分布。

例如,在图像分类任务中:

  • 如果图像真实类别为“猫”,且模型预测也为“猫”且概率接近1,则交叉熵损失较小,表明预测准确。
  • 如果图像真实类别为“猫”,但模型预测为“狗”且概率较高,则交叉熵损失较大,表明预测不准确,模型需要优化。

5. 交叉熵的性质

  • 非负性:交叉熵总是非负的。
  • 最小化:交叉熵最小化目标就是让预测分布 Q Q Q 尽量接近真实分布 P P P
  • 非对称性:交叉熵对 P P P Q Q Q 的顺序敏感, H ( P , Q ) ≠ H ( Q , P ) H(P, Q) \neq H(Q, P) H(P,Q)=H(Q,P)

交叉熵和KL散度都可以用于衡量两个概率分布之间差异,那到底有什么区别?

1. 定义和公式上的差异

  • 交叉熵 H ( P , Q ) H(P, Q) H(P,Q)
    交叉熵衡量的是在真实分布 P P P 下,使用预测分布 Q Q Q 来编码数据所需要的信息量。其公式为:

H ( P , Q ) = − ∑ x P ( x ) log ⁡ Q ( x ) H(P, Q) = -\sum_{x} P(x) \log Q(x) H(P,Q)=xP(x)logQ(x)

  • KL散度 D K L ( P ∥ Q ) D_{KL}(P \parallel Q) DKL(PQ)
    KL散度表示的是真实分布 P P P 与预测分布 Q Q Q 之间的相对熵,或说 Q Q Q 相对 P P P 的信息损失。其公式为:

D K L ( P ∥ Q ) = ∑ x P ( x ) log ⁡ P ( x ) Q ( x ) D_{KL}(P \parallel Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)} DKL(PQ)=xP(x)logQ(x)P(x)

2. 数学关系

交叉熵和KL散度通过以下关系联系起来:

H ( P , Q ) = H ( P ) + D K L ( P ∥ Q ) H(P, Q) = H(P) + D_{KL}(P \parallel Q) H(P,Q)=H(P)+DKL(PQ)

其中:

  • H ( P ) H(P) H(P) 是真实分布 P P P 自身的熵,表示在没有近似分布时,描述数据本身所需的最少信息量
  • KL散度 D K L ( P ∥ Q ) D_{KL}(P \parallel Q) DKL(PQ) 表示的是用 Q Q Q 替代 P P P 带来的额外信息量

因此,交叉熵可以看作是“熵 + KL散度”,即在使用分布 Q Q Q 进行编码时所需要的额外信息量,而 KL散度单独度量的是使用 Q Q Q 而非 P P P 带来的信息丢失。

3. 意图和用途的差异

  • 交叉熵用于度量模型的预测效果。它不仅仅关注两个分布的差异,而是考虑整个预测分布 Q Q Q 对真实分布 P P P 的匹配程度。交叉熵在模型训练时常用作损失函数,通过最小化交叉熵,使得模型输出的预测分布尽可能接近真实分布。
  • KL散度关注的是“差异性”本身,用于量化两个分布之间的“相对距离”或“信息损失”。它在变分推断、贝叶斯方法、信息理论等场景中广泛应用,以便衡量模型分布(如 Q Q Q)和目标分布(如 P P P)的相似性,帮助约束模型参数。

4. 总结

  • 交叉熵:偏向实际模型的优化,通过衡量预测结果相对于真实标签的“信息量”来训练模型。
  • KL散度:偏向分析两个分布之间的差异性,用来度量模型分布与目标分布的接近程度,通常作为“相对差异”的参考指标。

总结一下:交叉熵更关注信息量的实际消耗,而KL散度更关注两个分布之间的相对信息损失。

相关文章:

什么是信息熵,什么是交叉熵,什么是KL散度?

什么是信息熵? 信息熵(Entropy)是信息论中的一个基本概念,用来衡量一个随机变量不确定性的大小。它反映了对一个事件结果的预测难度,或者说是描述这个事件需要多少“信息量”。信息熵是由香农(Claude Shan…...

开发者的福音:PyTorch 2.5现已支持英特尔独立显卡训练

《PyTorch 2.5重磅更新:性能优化新特性》中的一个新特性就是:正式支持在英特尔独立显卡上训练模型! PyTorch 2.5 独立显卡类型 支持的操作系统 Intel 数据中心GPU Max系列 Linux Intel Arc™系列 Linux/Windows 本文将在IntelCore™…...

Deep InfoMax(DIM)(2019-02-ICLR)

论文:LEARNING DEEP REPRESENTATIONS BY MUTUAL INFORMATION ESTIMATION AND MAXIMIZATION ABSTRACT 研究目标 研究通过最大化输入和深度神经网络编码器输出之间的互信息来进行无监督表示学习目的是学习到对下游任务有用的特征表示 核心发现:结构很重…...

2024年10月中国数据库排行榜:TiDB续探花,GaussDB升四强

10月中国数据库流行度排行榜如期发布,再次印证了市场分层的加速形成。国家数据库测评结果已然揭晓,本批次通过的产品数量有限,凸显了行业标准的严格与技术门槛的提升。再看排行榜,得分差距明显增大,第三名与后续竞争者…...

css边框修饰

一、设置线条样式 通过 border-style 属性设置,可选择的一些属性如下: dotted:点线 dashed:虚线 solid:实线 double:双实线 效果如下: 二、设置边框线宽度 ① 通过 border-width 整体设置…...

利用Python进行数据可视化:实用指南与推荐库

利用Python进行数据可视化:实用指南与推荐库 数据可视化是将数据转化为图形和图表的过程,它能够帮助我们更直观地理解数据的趋势、模式和关系。在Python中,有许多强大的库可用于数据可视化,从简单的折线图到复杂的交互式图表,应有尽有。本文将详细介绍Python数据可视化的…...

MobileNetv2网络详解

背景: MobileNet v1中DW卷积在训练完之后部分卷积核会废掉,大部分参数为“0” MobileNet v2网络是由Google团队在2018年提出的,相比于MobileNet v1网络,准确率更高,模型更小 网络亮点: Inverted Residu…...

惊了!大模型连这样的验证码都能读懂_java_识别验证码

最近在看视觉大模型的能力,然后用了某网站的一个验证码试了试,竟然连这样的验证码都能认识,这个有点夸张,尤其是这个9和6颠倒的都能理解,现在的能力已经这么牛了么 具体就是用了通义最新的qwen vl模型spring ai alibab…...

【小白学机器学习26】 极大似然估计,K2检验,logit逻辑回归(对数回归)(未完成----)

目录 1 先从一个例题出来,预期值和现实值的差异怎么评价? 1.1 这样一个问题 1.2 我们的一般分析 1.3 用到的关键点1 1.4 但是差距多远,算是远呢? 2 极大似然估计 2.1 极大似然估计的目的 2.1.1 极大似然估计要解决什么问题…...

【日常记录-Java】SLF4J扫描实现框架的过程

1. 简介 SLF4J(Simple Logging Facade for Java)作为一种简单的门面或抽象,服务于其他各种日志框架,例如JUL、log4j、logback等,核心作用有两项: 提供日志接口;提供获取具体日志对象的方法; 2. 扫描过程 …...

uni-app 获取 android 手机 IMEI码

1、需求来源 最近项目上需要获取手机的IMEI码,并且在更换手机号登录后,需要提示重新更新IMEI码。 2、需求拆分 2.1 获取 IMEI 码 查阅 uni-app 官网发现在android 10 已经无法获取imei码,所以对于这个需求拆分成两种情况。 第一种情况&am…...

后台管理系统的通用权限解决方案(八)认证机制介绍、JWT介绍与jjwt框架的使用

文章目录 1 认证机制介绍1.1 HTTP Basic Auth1.2 Cookie-Session Auth1.3 OAuth1.4 Token Auth 2 JWT2.1 JWT介绍2.2 JWT的数据结构2.2.1 JWT头2.2.2 JWT有效载荷2.2.3 JWT签名 3 jjwt3.1 jjwt介绍3.2 jjwt案例 1 认证机制介绍 1.1 HTTP Basic Auth HTTP Basic Auth 是一种简…...

接口测试 —— Postman 变量了解一下!

Postman变量是在Postman工具中使用的一种特殊功能,用于存储和管理动态数据。它们可以用于在请求的不同部分、环境或集合之间共享和重复使用值。 Postman变量有以下几种类型: 1、环境变量(Environment Variables): 环境变量是在…...

鸿蒙系统:核心特性、发展历程与面临的机遇与挑战

好动与不满足是进步的第一必需品 文章目录 前言重要特点和组成部分核心特性主要组件发展历程 机遇挑战总结 前言 鸿蒙系统(HarmonyOS)是由华为技术有限公司开发的一款面向全场景的分布式操作系统。它旨在为用户提供更加流畅、安全且高效的数字生活体验&…...

从0到1,用Rust轻松制作电子书

我之前简单提到过用 Rust 做电子书,今天分享下如何用Rust做电子书。制作电子书其实用途广泛,不仅可以用于技术文档(对技术人来说非常方便),也可以制作用户手册、笔记、教程等,还可以应用于文学创作。 如果…...

半天入门!锂电池剩余寿命预测(Python)

往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享! EMD变体分解效果最好算法——CEEMDAN(五)-CSDN博客 拒绝信息泄露!VMD滚动分…...

学生党头戴式耳机哪款音质更胜一筹?TOP4好音质头戴式耳机推荐

在挑选头戴式耳机时,市场上琳琅满目的品牌和型号常常让人目不暇接。究竟哪个学生党头戴式耳机哪款音质更胜一筹?这已成为许多人面临的难题。由于每个人对耳机的偏好各有侧重——一些人追求音质的纯净,一些人重视佩戴的舒适性,而另…...

数据结构 ——— 二叉树的概念及结构

目录 二叉树的概念 特殊的二叉树 一、满二叉树 二、完全二叉树 二叉树的概念 二叉树树示意图: 从以上二叉树示意图可以看出: 二叉树每个节点的度不大于 2 ,那么整个二叉树的度也不大于 2 ,但是也不是每个节点都必须有 2 个…...

【React】React 的核心设计思想

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 React 的核心设计思想引言声明式编程声明式 vs 命令式示例 组件化组件的优势组件…...

C++ 二叉树进阶:相关习题解析

目录 1. 二叉树创建字符串。 2. 二叉树的分层遍历1 3. 二叉树的分层遍历2 4. 二叉树的最近公共祖先 5. 将二叉搜索树转换为排序的双向链表 6. 从前序与中序遍历序列构造二叉树 7. 从中序与后序遍历序列构造二叉树 8. 二叉树的前序遍历,非递归迭代实现 9.…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...

算术操作符与类型转换:从基础到精通

目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...

如何把工业通信协议转换成http websocket

1.现状 工业通信协议多数工作在边缘设备上,比如:PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发,当设备上用的是modbus从站时,采集设备数据需要开发modbus主站;当设备上用的是西门子PN协议时&#xf…...

验证redis数据结构

一、功能验证 1.验证redis的数据结构(如字符串、列表、哈希、集合、有序集合等)是否按照预期工作。 2、常见的数据结构验证方法: ①字符串(string) 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...

【Zephyr 系列 16】构建 BLE + LoRa 协同通信系统:网关转发与混合调度实战

🧠关键词:Zephyr、BLE、LoRa、混合通信、事件驱动、网关中继、低功耗调度 📌面向读者:希望将 BLE 和 LoRa 结合应用于资产追踪、环境监测、远程数据采集等场景的开发者 📊篇幅预计:5300+ 字 🧭 背景与需求 在许多 IoT 项目中,单一通信方式往往难以兼顾近场数据采集…...