深入理解 PyTorch 激活函数:从基础到高效实用技巧(3)

目录

torch.nn.functional激活层详解

logsigmoid

1. 函数用途

2. 参数详解

3. LogSigmoid函数的定义及数学解释

4. 使用示例

hardshrink

1. 函数用途

2. 参数详解

3. Hardshrink函数的定义及数学解释

4. 使用示例

tanhshrink

1. 函数用途

2. 参数详解

3. Tanhshrink函数的定义及数学解释

4. 使用示例

softsign

1. 函数用途

2. 参数详解

3. SoftSign函数的定义及数学解释

4. 使用示例

softplus

1. 函数用途

2. 参数详解

3. Softplus函数的定义及数学解释

4. 使用示例

softmin

1. 函数用途

2. 参数详解

3. Softmin函数的定义及数学解释

4. 使用示例

softmax

1. 函数用途

2. 参数详解

3. Softmax函数的定义及数学解释

4. 使用示例

softshrink

1. 函数用途

2. 参数详解

3. Softshrink函数的定义及数学解释

4. 使用示例

gumbel_softmax

1. 函数用途

2. 参数详解

3. 返回值

4. 注意事项

5. 使用示例

log_softmax

1. 函数用途

2. 参数详解

3. 函数特点

4. 使用示例

总结


torch.nn.functional激活层详解

logsigmoid

torch.nn.functional.logsigmoid 是 PyTorch 框架中的一个函数,用于逐元素应用对数 Sigmoid(LogSigmoid)激活函数。

1. 函数用途

LogSigmoid 激活函数是 Sigmoid 函数的对数版本。它常用于将输入压缩到 (0, 1) 区间内的对数空间,从而提供了一种平滑的激活方式。这种激活函数特别适合于处理概率估计问题,例如在二元分类中将输出解释为概率。

2. 参数详解

  • input(Tensor):输入的张量。

3. LogSigmoid函数的定义及数学解释

LogSigmoid 激活函数的数学表达式是:

  • LogSigmoid(x) = log(1 / (1 + exp(-x)))

在数学上,这相当于取 Sigmoid 函数的输出并对其应用自然对数。对数 Sigmoid 函数平滑地将每个元素映射到负无穷大到零的区间,提供了一种平滑的方式来处理接近于0和1的极端值。

4. 使用示例

import torch
import torch.nn.functional as F# 创建一个示例张量
input_tensor = torch.tensor([-2.0, 0.0, 2.0])# 应用LogSigmoid激活函数
output_tensor = F.logsigmoid(input_tensor)# 输出结果
print("原始张量:", input_tensor)
print("LogSigmoid处理后的张量:", output_tensor)## 原始张量: tensor([-2.0000,  0.0000,  2.0000])
## LogSigmoid处理后的张量: tensor([-2.1269, -0.6931, -0.1269])

在这个示例中,LogSigmoid 函数将输入张量的每个元素转换为其在对数空间中的表示。 

hardshrink

torch.nn.functional.hardshrink 是 PyTorch 框架中的一个函数,用于逐元素应用硬收缩(Hard Shrinkage)函数。

1. 函数用途

Hardshrink 激活函数主要用于稀疏化数据,它可以将输入张量中的小值(绝对值小于某个阈值)直接设为零。这种方法在处理噪声数据或进行特征选择时特别有用,因为它可以有效地去除不重要的小值。

2. 参数详解

  • input(Tensor):输入的张量。
  • lambd(float,默认为0.5):硬收缩函数的阈值。

3. Hardshrink函数的定义及数学解释

Hardshrink 激活函数的数学表达式是:

  • 如果 |x| > lambd,则保持 x 不变。
  • 如果 |x| <= lambd,则将 x 设为 0。

这种方法通过硬阈值将输入张量中绝对值较小的元素设置为零,而保持其它元素不变。

4. 使用示例

import torch
import torch.nn.functional as F# 创建一个示例张量
input_tensor = torch.tensor([-0.6, -0.2, 0.0, 0.2, 0.6])# 应用Hardshrink激活函数
output_tensor = F.hardshrink(input_tensor, lambd=0.5)# 输出结果
print("原始张量:", input_tensor)
print("Hardshrink处理后的张量:", output_tensor)## 原始张量: tensor([-0.6000, -0.2000,  0.0000,  0.2000,  0.6000])
## Hardshrink处理后的张量: tensor([-0.6000,  0.0000,  0.0000,

在这个示例中,绝对值小于或等于0.5的元素被设置为0,其余元素保持不变。Hardshrink 函数在需要进行数据稀疏化或降噪时非常有用。

tanhshrink

torch.nn.functional.tanhshrink 是 PyTorch 框架中的一个函数,用于逐元素应用 Tanhshrink 激活函数。

1. 函数用途

Tanhshrink 激活函数结合了双曲正切函数(Tanh)和原始输入值的差异,从而创建了一种能够保留输入特征同时增加非线性的激活机制。这种函数在某些深度学习模型中用于改善数据表示,特别是在处理需要平滑和饱和特性的场合。

2. 参数详解

  • input(Tensor):输入的张量。

3. Tanhshrink函数的定义及数学解释

Tanhshrink 激活函数的数学表达式是:

  • Tanhshrink(x) = x - tanh(x)

这个公式表示每个元素的值减去其双曲正切值。函数的输出是输入值和其双曲正切的差值,这种设计在输入值较小(接近零)时,输出接近零,而在输入值较大时,输出趋于饱和。

4. 使用示例

import torch
import torch.nn.functional as F# 创建一个示例张量
input_tensor = torch.tensor([-2.0, 0.0, 2.0])# 应用Tanhshrink激活函数
output_tensor = F.tanhshrink(input_tensor)# 输出结果
print("原始张量:", input_tensor)
print("Tanhshrink处理后的张量:", output_tensor)## 原始张量: tensor([-2.0000,  0.0000,  2.0000])
## Tanhshrink处理后的张量: tensor([-1.2382,  0.0000,  1.2382])

在这个示例中,Tanhshrink 函数减少了输入张量的极端值,提供了一种平滑且饱和的输出特性。

Tanhshrink 函数适用于需要平滑激活且避免极端值影响的深度学习模型。

softsign

torch.nn.functional.softsign 是 PyTorch 框架中的一个函数,用于逐元素应用 SoftSign 激活函数。

1. 函数用途

SoftSign 激活函数是一种非线性函数,用于在深度学习模型中处理输入数据。与其他常见的激活函数(如 Sigmoid 或 Tanh)相比,SoftSign 提供了一种更为平滑和自然的方式来处理极端值,它能够有效地将输入值压缩到 (-1, 1) 的范围内。

2. 参数详解

  • input(Tensor):输入的张量。

3. SoftSign函数的定义及数学解释

SoftSign 激活函数的数学表达式是:

  • SoftSign(x) = x / (1 + |x|)

这个公式表示输入值除以(1 加上输入值的绝对值)。该函数的特点是在输入值较小时接近线性,而在输入值较大时趋于饱和,最大和最小值分别为 1 和 -1。

4. 使用示例

import torch
import torch.nn.functional as F# 创建一个示例张量
input_tensor = torch.tensor([-2.0, 0.0, 2.0])# 应用SoftSign激活函数
output_tensor = F.softsign(input_tensor)# 输出结果
print("原始张量:", input_tensor)
print("SoftSign处理后的张量:", output_tensor)## 原始张量: tensor([-2.0000,  0.0000,  2.0000])
## SoftSign处理后的张量: tensor([-0.6667,  0.0000,  0.6667])

在这个示例中,SoftSign 函数将输入张量的每个元素转换为其 SoftSign 值,使得结果被压缩在 (-1, 1) 的范围内。SoftSign 函数适用于需要平滑处理输入且避免极端值的饱和的深度学习模型,特别是在需要平衡激活值范围和计算效率的场景中。

softplus

torch.nn.functional.softplus 是 PyTorch 框架中的一个函数,用于逐元素应用 Softplus 激活函数。

1. 函数用途

Softplus 函数是一个平滑的、非线性的激活函数,它可以被视为 ReLU 函数的平滑版本。Softplus 函数在深度学习中常用于添加非线性,同时避免了 ReLU 函数中的“死神经元”问题。这种激活函数特别适用于需要平滑激活且避免负输出的场景。

2. 参数详解

  • input(Tensor):输入的张量。
  • beta(float,默认为1):控制 Softplus 平滑程度的参数。
  • threshold(float,默认为20):为了数值稳定性,当输入乘以 beta 大于此阈值时,激活函数将近似为线性函数。

3. Softplus函数的定义及数学解释

Softplus 激活函数的数学表达式是:

  • Softplus(x) = 1 / β * log(1 + exp(β * x))

这个公式表示将输入值乘以

β,然后计算其指数,加1后取自然对数,并最终除以 β。这个函数的特点是,对于较大的输入值,它的输出接近于线性函数,而对于较小的输入值,它提供了一个平滑的非线性变换。

对于数值稳定性,当 β * x 的值超过设定的 threshold 时,函数的输出接近于 x 本身,从而避免了数值上的不稳定。

4. 使用示例

import torch
import torch.nn.functional as F# 创建一个示例张量
input_tensor = torch.tensor([-2.0, 0.0, 2.0])# 应用Softplus激活函数
output_tensor = F.softplus(input_tensor, beta=1, threshold=20)# 输出结果
print("原始张量:", input_tensor)
print("Softplus处理后的张量:", output_tensor)## 原始张量: tensor([-2.0000,  0.0000,  2.0000])## Softplus处理后的张量: tensor([0.1269, 0.6931, 2.1269])

 在这个示例中,Softplus 函数为输入张量的每个元素提供了平滑的非线性激活。

softmin

torch.nn.functional.softmin 是 PyTorch 框架中的一个函数,用于应用 softmin 函数。Softmin 函数可以被视为 Softmax 函数的反向版本,它在提供概率分布时会赋予较小的值更高的概率。

1. 函数用途

Softmin 函数常用于多类别分类问题中,特别是当需要强调较小数值的重要性时。它通过对输入应用负指数然后归一化,将较小的输入值转化为较高的概率。

2. 参数详解

  • input(Tensor):输入的张量。
  • dim(int):计算 softmin 的维度。在此维度上的每个切片将总和为1。
  • dtype(torch.dtype, 可选):返回张量的期望数据类型。如果指定,在操作执行前将输入张量转换为该数据类型。这有助于防止数据类型溢出。默认为 None。

3. Softmin函数的定义及数学解释

Softmin 函数的数学表达式是:

  • Softmin(x) = Softmax(-x)

对于给定的输入张量,Softmin 首先取每个元素的负值,然后在指定维度上应用 Softmax 函数。

4. 使用示例

import torch
import torch.nn.functional as F# 创建一个示例张量
input_tensor = torch.tensor([[1.0, 2.0, 3.0]])# 应用Softmin激活函数
output_tensor = F.softmin(input_tensor, dim=1)# 输出结果
print("原始张量:", input_tensor)
print("Softmin处理后的张量:", output_tensor)
# 输出将是:
# 原始张量: tensor([[1.0000, 2.0000, 3.0000]])
# Softmin处理后的张量: tensor([[0.6652, 0.2447, 0.0900]])

在这个示例中,Softmin 函数将输入张量中的每个元素转换为一个概率,其中较小的值获得了较高的概率。Softmin 函数适用于需要强调较小输入值重要性的深度学习应用,例如在某些特定的多类别分类问题中。

softmax

torch.nn.functional.softmax 是 PyTorch 框架中的一个函数,用于逐元素应用 Softmax 函数。

1. 函数用途

Softmax 函数在深度学习中广泛用于多类别分类问题。它将输入张量的元素转换为概率分布,使得每个元素的值落在 [0, 1] 区间内,并且所有元素的和为1。这对于输出层的设计尤其重要,可以将其解释为概率分布,从而进行分类决策。

2. 参数详解

  • input(Tensor):输入的张量。
  • dim(int):计算 softmax 的维度。在此维度上的每个切片将总和为1。
  • dtype(torch.dtype, 可选):返回张量的期望数据类型。如果指定,在操作执行前将输入张量转换为该数据类型。这有助于防止数据类型溢出。默认为 None。

3. Softmax函数的定义及数学解释

Softmax 函数的数学表达式是:

  • Softmax(xi) = exp(xi) / ∑j exp(xj)

这个公式表示将每个元素的指数与其所在维度的所有元素指数之和的比值进行计算。结果是一个概率分布,每个元素的值介于0和1之间,所有元素的总和为1。

4. 使用示例

import torch
import torch.nn.functional as F# 创建一个示例张量
input_tensor = torch.tensor([[1.0, 2.0, 3.0]])# 应用Softmax激活函数
output_tensor = F.softmax(input_tensor, dim=1)# 输出结果
print("原始张量:", input_tensor)
print("Softmax处理后的张量:", output_tensor)
# 输出将是:
# 原始张量: tensor([[1.0000, 2.0000, 3.0000]])
# Softmax处理后的张量: tensor([[0.0900, 0.2447, 0.6652]])

在这个示例中,Softmax 函数将输入张量中的每个元素转换为一个概率分布。 需要注意的是,当使用与 torch.nn.NLLLoss 结合时,建议使用 torch.nn.functional.log_softmax,因为 NLLLoss 需要在 Softmax 和自身之间计算对数。log_softmax 函数不仅运行速度更快,而且具有更好的数值属性。

softshrink

torch.nn.functional.softshrink 是 PyTorch 框架中的一个函数,用于逐元素应用软收缩(Soft Shrinkage)函数。

1. 函数用途

Softshrink 函数是一种非线性激活函数,主要用于数据的稀疏表示和噪声抑制。它通过减少输入张量中的小幅度值(在指定的阈值内)来实现数据的压缩和简化,这对于处理包含小的噪声或非重要信息的数据特别有用。

2. 参数详解

  • input(Tensor):输入的张量。
  • lambd(float,默认为0.5):软收缩操作的阈值。

3. Softshrink函数的定义及数学解释

Softshrink 激活函数的数学表达式是:

  • 如果 x > lambd,则 Softshrink(x) = x - lambd
  • 如果 x < -lambd,则 Softshrink(x) = x + lambd
  • 如果 `|x| <= lambd

,则 Softshrink(x) = 0`。

这个公式表示输入值 x 在超过阈值 lambd 的绝对值时,会被相应减去或加上 lambd。若 x 的绝对值小于或等于 lambd,则输出为零。这种方法有效地将输入张量中的较小值压缩为零,而保留较大的值。

4. 使用示例

import torch
import torch.nn.functional as F# 创建一个示例张量
input_tensor = torch.tensor([-1.5, -0.5, 0.0, 0.5, 1.5])# 应用Softshrink激活函数
output_tensor = F.softshrink(input_tensor, lambd=0.5)# 输出结果
print("原始张量:", input_tensor)
print("Softshrink处理后的张量:", output_tensor)
# 输出将是:
# 原始张量: tensor([-1.5000, -0.5000,  0.0000,  0.5000,  1.5000])
# Softshrink处理后的张量: tensor([-1.0000,  0.0000,  0.0000,  0.0000,  1.0000])

 在这个示例中,Softshrink 函数减少了输入张量的小值,并保留了较大的值。

gumbel_softmax

torch.nn.functional.gumbel_softmax 是 PyTorch 框架中的一个函数,用于从 Gumbel-Softmax 分布中采样,并可选择性地离散化样本。

1. 函数用途

Gumbel-Softmax 提供了一种在离散分布上进行连续近似的方式,常用于生成模型和强化学习中。它特别适用于需要梯度反向传播的场合,比如在生成对抗网络(GANs)或变分自编码器(VAEs)中进行分类决策。

2. 参数详解

  • logits(Tensor):未归一化的对数概率,形状为 [..., num_features]
  • tau(float):非负标量温度,控制 softmax 的平滑程度。
  • hard(bool):如果为 True,则返回的样本将被离散化为 one-hot 向量,但在自动微分时会被当作软样本处理。
  • dim(int):计算 softmax 的维度,默认为 -1。

3. 返回值

  • 返回与 logits 形状相同的张量,样本来自 Gumbel-Softmax 分布。如果 hard=True,返回的样本将是 one-hot 编码,否则它们将是在指定维度上总和为 1 的概率分布。

4. 注意事项

  • 这个函数可能会在未来从 nn.Functional 中移除。
  • 对于 hard=True 的情况,主要技巧是进行 y_hard - y_soft.detach() + y_soft 操作。这样做既确保输出值精确为 one-hot(因为我们添加然后减去 y_soft 值),又使梯度等于 y_soft 梯度(因为我们去除了所有其他梯度)。

5. 使用示例

import torch
import torch.nn.functional as F# 创建一个示例 logits 张量
logits = torch.randn(20, 32)# 使用重参数化技巧采样软分类
soft_sample = F.gumbel_softmax(logits, tau=1, hard=False)# 使用 "Straight-through" 技巧采样硬分类
hard_sample = F.gumbel_softmax(logits, tau=1, hard=True)# 打印结果
print("Soft Sample:", soft_sample)
print("Hard Sample:", hard_sample)

这个示例展示了如何使用 Gumbel-Softmax 从 logits 中生成软分类样本和硬分类样本。这种方法在需要生成离散数据但又想保留连续梯度的场景下非常有用。 

log_softmax

torch.nn.functional.log_softmax 是 PyTorch 框架中的一个函数,用于应用 softmax 函数后接一个对数操作。

1. 函数用途

log_softmax 函数结合了 softmax 和对数操作,常用于多类别分类问题的输出层。这个函数特别适用于需要计算交叉熵损失的情况,因为它提供了更稳定和高效的方式来计算 softmax 的对数。

2. 参数详解

  • input(Tensor):输入的张量。
  • dim(int):计算 log_softmax 的维度。在此维度上的输出将总和为1。
  • dtype(torch.dtype, 可选):返回张量的期望数据类型。如果指定,在操作执行前将输入张量转换为该数据类型。这有助于防止数据类型溢出。默认为 None。

3. 函数特点

  • 数学上,尽管 log(softmax(x))log_softmax(x) 等价,但分开进行这两个操作会更慢且数值上不稳定。log_softmax 函数使用另一种公式来正确计算输出和梯度。

4. 使用示例

import torch
import torch.nn.functional as F# 创建一个示例张量
input_tensor = torch.tensor([[1.0, 2.0, 3.0]])# 应用log_softmax函数
output_tensor = F.log_softmax(input_tensor, dim=1)# 输出结果
print("原始张量:", input_tensor)
print("Log Softmax处理后的张量:", output_tensor)
# 输出将是:
# 原始张量: tensor([[1.0000, 2.0000, 3.0000]])
# Log Softmax处理后的张量: tensor([[-2.4076, -1.4076, -0.4076]])

在这个示例中,log_softmax 函数对输入张量进行了 softmax 操作并取了对数,生成了一个新的张量,其元素值为 softmax 值的自然对数。log_softmax 函数适用于分类问题和任何需要用到 softmax 对数的场景,特别是在计算交叉熵损失时。

总结

本篇博客探讨了 PyTorch 框架中多种核心的激活函数,包括 LogSigmoid、Hardshrink、Tanhshrink、SoftSign、SoftPlus、SoftMin、SoftMax、Softshrink、Gumbel Softmax 和 Log Softmax。每个函数都有其独特的特性和应用场景,从 LogSigmoid 的平滑概率转换到 Softmax 的概率分布生成。这些激活函数在提高网络模型的非线性、处理极端值、实现数据稀疏化和噪声抑制等方面扮演着关键角色。通过详细解释每个函数的工作原理、参数和使用示例,本文为读者提供了深入理解和有效应用这些高级激活函数的知识。这些激活函数是构建有效、高效深度学习模型的关键组件,尤其适用于分类、生成模型和多类别识别等领域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/626566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 中实现定时任务(quartz)功能实战

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

电脑锁屏时间怎么设置?跟着这篇教程轻松搞定

在现代社会&#xff0c;我们使用电脑的时间越来越长&#xff0c;为了保护个人隐私和确保信息安全&#xff0c;设置电脑锁屏时间成为一项重要的操作。可是电脑锁屏时间怎么设置呢&#xff1f;本文将介绍三种常见的方法&#xff0c;详细解释如何设置电脑的锁屏时间&#xff0c;以…

Framework定制-在JAVA核心库中移植Android Log

在java核心库中&#xff0c;由于无法导入android的包&#xff0c;要想使用Log&#xff0c;最粗暴的方式就是用反射调用&#xff0c;还有一种方式就是移植Android的Log到java核心库中。 具体实现如下&#xff1a; 创建JLog.java aosp/libcore/ojluni/src/main/java/java/lang…

openssl3.2 - EVP_MD_fetch算法名称字符串(参数2)的有效值列表

文章目录 openssl3.2 - EVP_MD_fetch算法名称字符串(参数2)的有效值列表概述笔记注释版的摘要算法名称列表END openssl3.2 - EVP_MD_fetch算法名称字符串(参数2)的有效值列表 概述 使用摘要算法时, 官方demo都是使用EVP_MD_fetch(), API参数2要指定算法名称字符串. 如下: in…

MySQL 常用字符串函数 SUBSTRING_INDEX、SUBSTRING、LOCATE 和 LENGTH

在 MySQL 中&#xff0c;SUBSTRING_INDEX、SUBSTRING、LOCATE 和 LENGTH 是字符串处理的一些常用函数。下面是它们的基本用法&#xff1a; SUBSTRING_INDEX SUBSTRING_INDEX(str, delim, count) 用于返回字符串 str 中由分隔符 delim 分隔的子字符串。count 参数指定要返回的…

TDengine 如何进行数据建模

小 T 导读&#xff1a;在使用 TDengine 的时候&#xff0c;通过官网的技术文档可以学习到建库&#xff08;database&#xff09;、建表&#xff08;table&#xff09;的各种 SQL 语句&#xff0c;但是一旦要跟自己的具体业务场景结合&#xff0c;经验不足的朋友可能会不知道到底…

指针及其应用

1.定义 指针&#xff1a;也是一个变量&#xff0c;存放所指变量的地址&#xff0c;根据变量定义的不同&#xff0c;指针指向的类型也不同 注意&#xff1a;*是与前面类型一体的 int main(void) {int* p; //等价于int *p;//为了区分变量&#xff0c;C语言中一般将*放置于变量…

国产开源数据库进入生态发展期

作为基础软件“三驾马车”之一&#xff0c;数据库是支撑信息系统安全稳定运行的重要保障。记者从日前在京举行的openGauss Summit 2023获悉&#xff0c;2023年国产数据库openGauss系新增市场份额达21.9%&#xff0c;标志着openGauss已跨越生态拐点&#xff0c;这对于保障数据安…

.NET 8.0 发布到 IIS

如何在IIS&#xff08;Internet信息服务&#xff09;上发布ASP.NET Core 8&#xff1f; 在本文中&#xff0c;我假设您的 Windows Server IIS 上已经有一个应用程序池。 按照步骤了解在 IIS 环境下发布 ASP.NET Core 8 应用程序的技巧。 您需要设置代码以支持 IIS 并将项目配…

智算让大模型触手可及

本文整理自2023年 12 月 20 日举办的「2023 百度云智大会智算大会」主论坛&#xff0c;百度智能云 AI 与大数据平台总经理忻舟的主题演讲《智算让大模型触手可及》。 在之前极客公园举办的创新大会上&#xff0c;百度集团董事长兼 CEO 李彦宏先生提到&#xff1a;卷 AI 原生应用…

【Linux】各目录说明

【常见目录说明】 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等)&#xff0c;常用命令一般都在这里。 /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录&#xff0c;是用户主目录的基点&#xff0c;比如用户user的主目录就是/home/user&#xff0c;可以…

智能助手的巅峰对决:ChatGPT对阵文心一言

在人工智能的世界里&#xff0c;ChatGPT与文心一言都是备受瞩目的明星产品。它们凭借先进的技术和强大的性能&#xff0c;吸引了大量用户的关注。但究竟哪一个在智能回复、语言准确性、知识库丰富度等方面更胜一筹呢&#xff1f;下面就让我们一探究竟。 首先来谈谈智能回复能力…

数据结构-排序

这篇文章主要记录各种排序算法的思想及实现代码&#xff0c;最后对各种算法的性能进行了对比。 目录 排序的概念及其运用 排序的概念 排序运用 常见的排序算法 常见排序算法的实现 插入排序 基本思想 直接插入排序 希尔排序 选择排序 基本思想 直接选择排序 堆排序…

C++设计模式-- 2.代理模式 和 外观模式

文章目录 代理模式外观模式角色和职责代码演示一&#xff1a;代码演示二&#xff1a;外观模式适用场景 代理模式 代理模式的定义&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。在某些情况下&#xff0c;一个对象不适合 或不能直接引用另一个对象&#xff0c;而代…

git推送前HOOK pre-push判断版本号增加再推送

我写了一个C程序&#xff0c;然后每次编译后&#xff0c;记不得当时的版本是哪个源代码&#xff0c;对于core dump复现调试很麻烦。 为此我想了一个办法&#xff0c;首先在include/git_version.hpp 创建一个版本的文件 /** Description:* Author: jiangsheng* Date: 2024-01-…

数据结构与算法:快速排序

数据结构与算法&#xff1a;快速排序 快速排序荷兰国旗问题霍尔版本递归优化小区间优化 PartSort优化三数取中 挖坑法前后指针法 非递归法 快速排序 荷兰国旗问题 想要理解快速排序&#xff0c;就先理解这个问题&#xff1a; [LeetCode75.颜色分类] 荷兰国旗是由红白蓝三色组…

10.云原生之在线开发调试

云原生专栏大纲 文章目录 vscode-server介绍VSCode Server 和云开发结合vscode-server安装code-server安装插件在线安装插件离线安装插件安装中文插件 配置开发环境在容器中安装开放环境Dockerfile制作镜像 git拉取项目 vscode-server介绍 VSCode Server&#xff08;Visual S…

动态内存面试的经典题目

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

js includes方法的使用

JavaScript中的数组includes()方法用于判断数组中是否包含指定的元素&#xff0c;并返回一个布尔值。 includes()方法的语法如下&#xff1a; array.includes(searchElement[, fromIndex]) 其中&#xff0c;array是要进行搜索的数组&#xff0c;searchElement是要搜索的元素…

网络安全中的“三高一弱”和“两高一弱”是什么?

大家在一些网络安全检查中&#xff0c;可能经常会遇到“三高一弱”这个说法。那么&#xff0c;三高一弱指的是什么呢&#xff1f; 三高&#xff1a;高危漏洞、高危端口、高风险外连 一弱&#xff1a;弱口令 一共是4个网络安全风险&#xff0c;其中的“高危漏洞、高危端口、弱…