【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-Turbo编码原理

目录

 

Turbo码:无线通信中的革命性技术

引言

一、Turbo码的基本原理

1.1 卷积码基础:

1.2 Turbo码的构造:

1.2.1 分量编码器

1.2.2 随机交织器

1.2.3 穿刺和复接单元

1.3 编码器结构的重要性和影响

1.4 迭代解码:

1.4.1 迭代思想

1.4.2 BCJR算法流程

二、Turbo码的应用场景

2.1 无线通信

2.2 卫星通信

2.3 深空通信

三、Turbo码的优缺点分析

3.1 优点:

3.2 缺点:

四、Turbo码与其他译码技术的比较

4.1 性能比较

4.2 复杂度和实现难度比较

4.3 应用场景比较

五 Matlab实现

结语


 

Turbo码:无线通信中的革命性技术

引言

Turbo码是一种在通信领域具有里程碑意义的纠错编码技术,以其优异的性能在现代无线通信中占据了重要地位。本文将介绍Turbo码的基本原理、应用场景、优缺点分析,并与其他译码技术进行比较,旨在帮助读者更好地理解Turbo码及其在通信技术中的作用。

一、Turbo码的基本原理

1.1 卷积码基础

首先回顾卷积码的基本概念和工作原理,作为Turbo码的基础。

【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-卷积码原理

【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-Viterbi译码原理

1.2 Turbo码的构造

Turbo码的译码器有两个分量码译码器,译码在两个分量译码器之间进行迭代译码,因整个译码过程类似涡轮turbo工作,共称为Turbo码。

Turbo码编码器结构如下图所示:

959aa7623a8b42aca7bcf9f880c6c866.png

图一、Turbo码编码器结构框图

Turbo码的核心在于其编码器结构,这种结构由两个或多个分量编码器(卷积编码器)并行组合而成。每个分量编码器都是传统的卷积码编码器,能够独立地对输入数据进行编码,生成具有一定冗余度的编码数据。

1.2.1 分量编码器

在Turbo码中,原始数据先经过一个卷积编码器(通常称为分量编码器1),然后再经过一个随机交织器进行数据的重新排列。这个交织后的数据再进入第二个卷积编码器(分量编码器2)进行编码。通过这样的方式,原始数据被两次编码,每次编码都增加了不同的冗余信息。

通过并行组合,Turbo码能够在不同的时间和频率上提供冗余,使得在传输过程中即使某一部分数据丢失或受到干扰,也能通过解码过程中的迭代算法来恢复这部分数据。这种冗余的增加显著提高了Turbo码的纠错能力。

1.2.2 随机交织器

随机交织器是Turbo码中的另一个关键组件,它在编码过程中起着至关重要的作用。

交织器的定义:交织器是一个将原始数据重新排列的装置。它并不改变数据的内容,只是按照某种规则重新排列数据的顺序。

交织器的目的:交织器的目的是使两个卷积编码器之间的数据相互独立。这是因为在实际的通信过程中,数据在传输时可能会受到连续的错误干扰。如果没有交织器,这些连续的错误可能会同时影响两个卷积编码器,导致无法恢复原始数据。而通过交织器的重新排列,连续的错误被分散开,降低了对两个编码器同时产生影响的可能性。

交织器的实现:交织器的实现通常采用一个固定的伪随机序列,这个序列决定了原始数据如何被重新排列。在解码过程中,接收端会使用相同的伪随机序列对接收到的数据进行逆交织,以恢复出原始的数据顺序。

1.2.3 穿刺和复接单元

穿刺单元在Turbo编码中的主要作用是减少编码后的冗余信息,以提高编码效率。由于Turbo码在编码过程中会引入大量的冗余比特,这些冗余比特虽然能够提高解码时的可靠性,但也会占用更多的带宽。穿刺单元的目标就是在保持一定纠错能力的同时,尽可能地减少这些冗余比特。穿刺单元按照一定的模式或算法,从编码后的比特流中选择性地删除一部分比特。这个过程是可控的,即可以通过调整穿刺率来控制保留和删除的比特数量。穿刺率定义为被删除的比特数与原始编码比特数的比例。例如,如果穿刺率为1/2,则意味着每两个编码比特中就有一个被删除。穿刺模式的选择对Turbo码的性能至关重要。一个好的穿刺模式应该能够在减少冗余的同时,保持足够的纠错能力。在实际应用中,通常会通过仿真或实验来确定最佳的穿刺模式。

复接单元的主要作用是将多个编码器的输出合并成一个单一的比特流,以便在信道中传输。在Turbo编码中,由于存在多个并行工作的卷积编码器,它们的输出需要通过复接单元进行合并。
复接单元按照预定的顺序或模式,将不同编码器的输出比特交织在一起。这个过程需要确保每个编码器的输出比特在最终的比特流中都有合适的位置,以便在解码时能够正确地分离和识别。复接单元还需要处理由于穿刺而产生的空位。当某些比特被穿刺单元删除后,复接单元需要相应地调整其余比特的位置,以确保输出的比特流在长度和格式上都是正确的。

1.3 编码器结构的重要性和影响

Turbo码的编码器结构是其卓越性能的关键所在。这种结构通过并行组合和随机交织,实现了强大的纠错能力和对连续错误的抵抗能力。在实际应用中,即使在复杂的通信环境下,如低信噪比、高干扰或高速数据传输等情况下,Turbo码也能保持较高的数据传输可靠性和效率。

1.4 迭代解码

Turbo码的解码过程是其编码过程的一个逆向操作,但这个过程远比编码复杂。解码的核心在于迭代解码算法,其中最著名的就是BCJR算法(Bahl-Cocke-Jelinek-Raviv算法)。这种算法通过迭代的方式,逐步逼近最佳的解码结果。

1.4.1 迭代思想

迭代解码的基本思想是利用软输入软输出(Soft-Input Soft-Output, SISO)解码器进行多次迭代,每次迭代都会更新对每个比特的可靠性估计。在Turbo码的解码过程中,每个分量编码器(卷积编码器)的输出都被视为一个独立的信道,而迭代解码就是在这些信道之间传递和更新信息。

每次迭代,解码器都会根据当前的信息(包括接收到的信号和其他解码器提供的信息)对每个比特做出最佳的判断。然后,这个判断会以概率的形式(即软输出)传递给下一个解码器。下一个解码器会利用这个信息,结合自己的判断,再次更新对每个比特的可靠性估计。这个过程会一直重复,直到达到预设的迭代次数或满足一定的收敛条件。

1.4.2 BCJR算法流程

BCJR算法是Turbo码解码中最常用的算法之一。它是一种最大后验概率(Maximum A Posteriori, MAP)算法,旨在找到最可能的原始信息序列。BCJR算法的基本流程如下:

  1. 初始化:设置迭代次数、初始状态概率等参数。对于每个比特,初始化其前向和后向状态概率。
  2. 前向递归:从时间0开始,逐步计算每个时间点上所有可能状态的前向概率。前向概率表示在给定接收序列的条件下,到达某个状态的概率。
  3. 后向递归:从最后一个时间点开始,逐步计算每个时间点上所有可能状态的后向概率。后向概率表示在给定接收序列和某个状态的条件下,后续序列的概率。
  4. 计算比特概率:结合前向和后向概率,计算每个比特为0或1的概率。这些概率就是软输出,将作为下一次迭代的输入。
  5. 迭代更新:将计算得到的比特概率传递给下一个解码器,并重复步骤2-4。每次迭代后,都会更新对每个比特的可靠性估计。
  6. 判决和输出:达到预设的迭代次数或满足收敛条件后,根据最后的比特概率做出硬判决(即确定每个比特是0还是1),并输出解码结果。

BCJR算法通过充分利用Turbo码的结构特点和迭代解码的思想,实现了优异的纠错性能。然而,它也存在计算复杂度高、实现难度大等问题。因此,在实际应用中,通常会采用一些简化的算法或优化方法来降低复杂度和提高解码效率。

二、Turbo码的应用场景

Turbo码作为一种高效的纠错编码技术,已经在多种通信系统中得到了广泛的应用。以下是对Turbo码在不同通信系统中的应用场景及其具体使用案例的详细解释。

2.1 无线通信

在无线通信系统中,由于信号传输过程中会受到多种干扰和衰减,因此需要采用纠错编码技术来提高通信的可靠性。Turbo码凭借其接近香农限的性能和灵活的编码结构,在无线通信中得到了广泛应用。

使用案例:在第三代移动通信系统(3G)和第四代移动通信系统(4G)中,Turbo码被用作数据传输的纠错编码方案。例如,在WCDMA(宽带码分多址)和LTE(长期演进)等标准中,Turbo码被广泛用于语音、数据和多媒体业务的传输。通过采用Turbo码,这些系统能够在较低的信噪比下实现可靠的通信,从而提高用户体验和数据传输效率。

2.2 卫星通信

卫星通信是一种重要的远程通信方式,但由于信号在传播过程中需要经过大气层和空间衰减,因此通信质量容易受到影响。Turbo码的高编码增益和接近香农限的性能使其成为卫星通信中的理想选择。

使用案例:在卫星数字视频广播(DVB-S2)标准中,Turbo码被用作主要的纠错编码方案。DVB-S2标准是为了满足高清电视和多媒体业务的高数据传输需求而制定的。通过使用Turbo码,DVB-S2能够在有限的带宽和信噪比条件下提供高质量的视频和数据传输服务,使得卫星通信在广播、数据传输和互联网接入等领域得到了广泛应用。

2.3 深空通信

深空通信是指地球与太空中其他天体(如月球、火星等)之间的通信。由于深空通信距离远、信号衰减大,因此需要采用高效的纠错编码技术来保证通信的可靠性。Turbo码以其出色的性能和灵活性,在深空通信中发挥着重要作用。

使用案例:在国际空间站(ISS)与地球之间的通信中,Turbo码被广泛用于数据传输和语音通信。通过采用Turbo码,这些通信能够在极端恶劣的信道条件下实现可靠的传输,从而确保航天员与地面控制中心之间的顺畅沟通以及科学实验数据的准确传输。

除了上述场景外,Turbo码还在许多其他通信系统中得到了应用,如光纤通信、移动通信网络中的中继传输等。随着通信技术的不断发展,Turbo码在未来仍然具有广阔的应用前景和重要的研究价值。

三、Turbo码的优缺点分析

Turbo码是一种高效的纠错编码技术,它在无线通信领域有着广泛的应用。以下是对Turbo码的优缺点进行的详细分析:

3.1 优点

  1. 高编码增益:Turbo码通过采用迭代解码和软输入软输出(SISO)技术,能够在较低的信噪比(SNR)下实现可靠的通信,提供显著的编码增益。这意味着在相同的传输条件下,Turbo码可以比其他编码方案传输更多的信息或者提供更高的通信质量。

  2. 接近香农限的性能:Turbo码的纠错性能非常接近理论上的香农限。香农限是信息论中描述在给定噪声和带宽条件下,可靠通信所能达到的最大信息速率的理论极限。Turbo码的性能逼近这个极限,使得它在许多高要求的应用中成为首选的编码方案。

  3. 灵活的编码结构:Turbo码由多个分量编码器(通常是卷积编码器)和随机交织器组成,这种结构提供了灵活性和可配置性。编码器的参数(如码率、块大小等)可以根据特定的应用需求进行调整。

  4. 适用于多种场景:Turbo码最初是为无线通信设计的,但由于其出色的性能,它也被应用于其他领域,如深空通信、数据存储和光纤通信等。在这些场景中,Turbo码能够提供必要的纠错能力以确保数据的可靠传输。

  5. 与调制技术兼容:Turbo码可以与多种调制技术(如QPSK、QAM等)结合使用,实现高效的数字通信。这种兼容性使得Turbo码在各种通信系统中都有广泛的应用前景。

3.2 缺点

  1. 高解码复杂度:Turbo码的迭代解码过程涉及大量的计算,尤其是在处理长码块时。这增加了接收机的复杂性和功耗,可能不适用于资源受限的设备或需要低延迟的应用。

  2. 解码延迟:由于Turbo码需要迭代解码以达到最佳性能,这通常会导致一定的解码延迟。对于实时性要求较高的应用(如语音通信或实时视频流),这种延迟可能是不可接受的。

  3. 对信道条件敏感:虽然Turbo码在多种信道条件下都能表现出良好的性能,但在某些极端条件下(如深衰落或高干扰环境),其性能可能会受到严重影响。在这些情况下,可能需要采取额外的措施来提高通信的可靠性。

  4. 交织器设计挑战:Turbo码中的随机交织器对于其性能至关重要。设计一个适用于特定应用场景且性能优良的交织器是一个具有挑战性的问题。不当的交织器设计可能会导致性能下降或甚至无法正常工作。

  5. 专利和许可问题:Turbo码作为一项重要的通信技术,可能受到专利和许可的限制。这可能会增加使用Turbo码的成本和复杂性,尤其是在商业应用中。

综上所述,Turbo码以其卓越的纠错性能和接近香农限的表现而著称,在无线通信和其他领域都有广泛的应用。然而,其高解码复杂度、解码延迟以及对特定信道条件的敏感性等问题也需要在实际应用中予以考虑和权衡。

四、Turbo码与其他译码技术的比较

在数字通信系统中,译码技术的选择对系统的整体性能有着至关重要的影响。Turbo码、低密度奇偶校验码(LDPC)和卷积码是三种常见的译码技术,它们各自在不同的应用场景中具有独特的优势和劣势。本报告将对这三种译码技术在性能、复杂度、实现难度和应用场景等方面进行深入的比较分析。

4.1 性能比较

  1. Turbo码:Turbo码以其接近香农限的性能而著称,它通过迭代解码和软输入软输出(SISO)技术实现了高编码增益。在信噪比(SNR)较低的情况下,Turbo码仍能保持可靠的通信质量。

  2. LDPC码:LDPC码是一种具有稀疏校验矩阵的线性分组码,其性能也非常接近香农限。LDPC码通过稀疏的校验矩阵和高效的迭代解码算法实现了优异的纠错性能。与Turbo码相比,LDPC码在长码长和低信噪比条件下具有更好的性能。

  3. 卷积码:卷积码是一种具有记忆性的纠错码,它通过卷积运算将输入信息序列编码为输出序列。与Turbo码和LDPC码相比,卷积码的性能较差,尤其是在高数据传输速率和低信噪比条件下。然而,卷积码具有较低的解码复杂度和延迟,因此在一些对实时性要求较高的应用中仍有使用。

4.2 复杂度和实现难度比较

  1. Turbo码:Turbo码的编码过程相对简单,但解码过程涉及迭代解码和大量的计算,因此具有较高的解码复杂度。此外,Turbo码的性能对交织器的设计非常敏感,设计一个性能优良的交织器是一个具有挑战性的问题。

  2. LDPC码:LDPC码的编码过程需要构建稀疏校验矩阵,这可能需要一定的计算资源和存储空间。然而,LDPC码的解码过程相对简单且高效,尤其是当采用硬件实现时。因此,LDPC码在实现难度和复杂度上相对较为平衡。

  3. 卷积码:卷积码的编码和解码过程都相对简单且易于实现。卷积码的性能虽然不如Turbo码和LDPC码,但其低复杂度和低延迟的特点使得它在一些特定应用中具有优势。

4.3 应用场景比较

  1. Turbo码:Turbo码广泛应用于无线通信系统,如3G、4G和某些5G场景中。由于其出色的纠错性能和灵活性,Turbo码也适用于卫星通信和深空通信等远距离通信场景。

  2. LDPC码:LDPC码在无线通信、数据存储和光纤通信等领域都有广泛的应用。特别是在需要长码长和高数据传输速率的场景中,如高清视频传输和大规模数据存储,LDPC码表现出色。

  3. 卷积码:卷积码主要用于语音通信、实时视频流等对实时性要求较高的应用。此外,在一些资源受限的设备或低复杂度要求的场景中,卷积码也是一个合适的选择。

五 Matlab实现

下面是一段实现Turbo码编码的Matlab程序。

function encodedBits = turboEncode(inputBits, codeRate)  % turboEncode - Turbo码编码函数  %  % 输入参数:  %   - inputBits: 输入数据比特流,应为二进制0和1的向量  %   - codeRate: 编码速率,例如1/3, 1/2等  %  % 输出参数:  %   - encodedBits: 编码后的比特流  % 参数检查  if codeRate <= 0 || codeRate >= 1  error('Invalid encoding rate. It should be a fraction like 1/3, 1/2, etc.');  end  % 定义分量编码器的生成多项式(以八进制表示)  g1 = [1 3 1]; % 对应于 (1+D^2+D^3)  g2 = [1 5 1]; % 对应于 (1+D+D^3)  % 创建分量编码器  trellis1 = poly2trellis(g1);  trellis2 = poly2trellis(g2);  % 创建交织器(行列置换交织器)  N = length(inputBits);  blockSize = ceil(sqrt(N)); % 假设交织块大小接近sqrt(N)  interleaver = reshape(1:N, blockSize, [])'; % 行列置换交织矩阵  interleavedBits = inputBits(interleaver); % 执行交织  % 分量编码  encodedBits1 = convenc(inputBits, trellis1);  encodedBits2 = convenc(interleavedBits, trellis2);  % 穿刺(删除一些编码比特以达到所需的码率)  puncturePattern = [1; 1; 0]; % 简单的穿刺模式,每3个比特删除1个  puncturedBits1 = puncture(encodedBits1, puncturePattern);  puncturedBits2 = puncture(encodedBits2, puncturePattern);  % 复接器(将两个分量编码器的输出合并)  encodedBits = [puncturedBits1; puncturedBits2];  % 由于交织和穿刺,最终编码长度可能与输入长度不匹配  % 这里简单地对编码后的比特进行截断或填充以达到期望长度  expectedLength = ceil(length(inputBits) / codeRate);  if length(encodedBits) > expectedLength  encodedBits = encodedBits(1:expectedLength);  elseif length(encodedBits) < expectedLength  encodedBits = [encodedBits; zeros(expectedLength - length(encodedBits), 1)];  end  
end  function encodedBits = convenc(inputBits, trellis)  % convenc - 卷积编码函数  %  % 输入参数:  %   - inputBits: 输入数据比特流  %   - trellis: 卷积码的trellis结构  %  % 输出参数:  %   - encodedBits: 卷积编码后的比特流  convEncoder = comm.ConvEncoder('TrellisStructure', trellis, ...  'TerminationMethod', 'Truncated', 'InitialConditions', 0);  encodedBits = step(convEncoder, inputBits);  
end  function puncturedBits = puncture(encodedBits, puncturePattern)  % puncture - 穿刺函数  %  % 输入参数:  %   - encodedBits: 编码后的比特流  %   - puncturePattern: 穿刺模式,1表示保留,0表示删除  %  % 输出参数:  %   - puncturedBits: 穿刺后的比特流  N = length(encodedBits);  punctureLength = length(puncturePattern);  puncturedBits = zeros(ceil(N / sum(puncturePattern)), 1);  idx = 1;  for i = 1:punctureLength:N  for j = 1:punctureLength  if puncturePattern(j)  puncturedBits(idx) = encodedBits(i + j - 1);  idx = idx + 1;  end  end  end  
end

请注意,这个程序是一个简化的Turbo编码示例,它没有考虑一些实际应用中可能需要的特性,如动态调整编码速率、更复杂的交织和穿刺策略、迭代解码等。此外,convencpuncture函数是辅助函数,用于执行卷积编码和穿刺操作。

在实际应用中,你可能需要使用Matlab的Communications Toolbox中的更高级的函数来实现Turbo编码,这些函数提供了更多的配置选项和更高的性能。

使用这个程序之前,请确保你了解Turbo码的基本原理,并根据你的具体需求对程序进行修改和优化。

结语

综上所述,Turbo码、LDPC码和卷积码各有其优势和劣势。Turbo码以接近香农限的性能著称,适用于无线通信和远距离通信等场景;LDPC码在长码长和高数据传输速率条件下表现出色,广泛应用于无线通信、数据存储和光纤通信等领域;而卷积码则以其低复杂度和低延迟的特点在某些特定应用中具有优势。在实际应用中,应根据具体的需求和场景选择合适的译码技术。

 

 

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

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

相关文章

接口测试怎么进行,如何做好接口测试

一、什么是接口&#xff1f; 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点&#xff0c;定义特定的交互点&#xff0c;然后通过这些交互点来&#xff0c;通过一些特殊的规则也就是协议&#xff0c;来进行数据之间的交互。 二、 常用接口采用方式&#x…

AI少女/HS2甜心选择2 仿剑三剑灵人物卡全合集打包

AI少女/HS2甜心选择2 仿剑三剑灵人物卡全合集打包 内含&#xff1a;菩提禅音[剑网3]明教晓天喵姐[剑3]明教晓天喵姐无帽版[剑3]茱莉亚[剑灵] 下载地址&#xff1a; https://www.changyouzuhao.cn/12492.html

配置DNS正反向解析服务!!!!

一.准备工作 #关闭防火墙和selinux,或者允许服务通过 [rootnode ~]# nmcli c mod ens32 ipv4.method manual ipv4.address 192.168.32.133/24 ipv4.gateway 192.168.32.2 ipv4.dns 192.168.32.132 [rootnode ~]# nmcli c reload [rootnode ~]# nmcli c up ens32[rootnode ~]# …

three.js 细一万倍教程 从入门到精通(三)

目录 五、详解PBR材质纹理 5.1、详解PBR物理渲染 5.2、标准网格材质与光照物理效果 5.3、置换贴图与顶点细分设置 5.4、设置粗糙度与粗糙度贴图 5.5、设置金属度与金属贴图 5.6、法线贴图应用 5.7、如何获取各种类型纹理贴图 5.8、纹理加载进度情况 单张图片加载 多…

数据结构-并查集

并查集原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个 单元素集合&#xff0c;然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询一 个元素归属于那个集合的运算。适合于描述这类…

Matplotlib Figure与Axes速成:核心技能一网打尽

Matplotlib Figure与Axes速成&#xff1a;核心技能一网打尽 &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333; 一、Figure&#xff08;图形&#xff09;&#x1f333;&#x1f341;1. 创建Figure&#x1f341;&#x1f341;2. 添加Axes&#…

NARF关键点提取原理简介

一、NARF2D边缘点探测的矩形平面的边长s和计算点p和上邻域的距离所用的k值 二、障碍物边缘和阴影边缘 三、NARF边缘点探测 四、NARF借助边缘点信息进行关键点检测 本人也是参考其他博主&#xff0c;以及这份英文文献写的(毕竟是英文文献&#xff0c;部分翻译肯定有些误差&…

一探Lepton Search究竟

2024年1月25日&#xff0c;阿里巴巴原技术副总裁在 Twitter 上称用不到 500 行 Python 代码实现了 AI 对话搜索引擎&#xff0c;并在27日附上了开源地址&#xff1a;https://github.com/leptonai/search_with_lepton&#xff0c;截止春节期间已经5.8K的Star。 Twitter截图 Comm…

Spring Security学习(四)——登陆认证(包括自定义登录页)

前言 和前面的文章隔了很长时间才更新Spring Security系列&#xff0c;主要原因一个是之前太忙了&#xff0c;把项目都忙完了&#xff0c;赶上春节假期&#xff0c;就慢慢研究。Spring Security的体系非常复杂&#xff0c;一口吃不了热豆腐&#xff0c;没办法速成&#xff0c;…

仰暮计划|“​他们艰苦半生,但真的希望祖国安祥,山河无恙”

自述&#xff0c;自赎 我没有在那个年代生活过&#xff0c;我一出生就是盛世中国&#xff0c;看遍了祖国的大好河山。但我没想到&#xff0c;走了这么远的路&#xff0c;吃了这么多的苦的爷爷会一直跟我说“不是国家不好&#xff0c;只是中国的钱拿去还债了&#xff0c;过了那…

代码随想录算法训练营Day56|583. 两个字符串的删除操作、72. 编辑距离

目录 583. 两个字符串的删除操作 前言 思路 算法实现 法二 72. 编辑距离 前言 思路 算法实现 总结 583. 两个字符串的删除操作 题目链接 文章链接 前言 本题与上一题不同的子序列相比&#xff0c;变化就是两个字符串都可以进行删除操作了。 思路 利用动规五部曲进…

【AI视野·今日Robot 机器人论文速览 第七十九期】Thu, 18 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Thu, 18 Jan 2024 Totally 43 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers CognitiveDog: Large Multimodal Model Based System to Translate Vision and Language into Action of Quadruped Robot Aut…

哈希表 ?

哈希表 首先什么是 哈希表&#xff0c;哈希表&#xff08;英文名字为Hash table&#xff0c;国内也有一些算法书籍翻译为散列表&#xff0c;大家看到这两个名称知道都是指hash table就可以了&#xff09;。 哈希表是根据关键码的值而直接进行访问的数据结构。 这么这官方的解释…

【C++初阶:类和对象(下篇)】初始化列表 | static成员 | 友元

目录 一、构造函数构造函数体赋值&#x1f43e;初始化列表&#x1f43e;&#x1f4a6; explicit关键字 二、static成员&#x1f43e;概念**&#x1f4a6; 关于静态的特性** 三、友元&#x1f4a6; **友元函数**&#x1f4a6; **友元类** **四、内部类** 一、构造函数 构造函数…

VM和Linux安装

VM和Linux安装 一、下载VM 1.官网地址&#xff1a;https://www.vmware.com/cn.html 2.其他地址&#xff1a;http://ww7.nocmd.com/windows/740.html 许可证这个&#xff0c;大家可以自己上网搜索&#xff0c;很容易就搜索到就可以使用了 上面内容就是安装VM的步骤 安…

30. 异常

异常 1. 概述2. Throwable 方法2.1 概述2.2 代码示例 3. 异常分类4. 异常处理方式4.1 JVM默认处理异常4.2 自己处理&#xff08;捕获异常&#xff09;try...catch4.2.1 概述4.2.2 灵魂四问 4.3 抛出处理(throw和throws) 5. 自定义异常5.1 概述5.2 代码示例 6. 异常注意事项 文章…

代码随想录算法训练营第三十一天 |基础知识,455.分发饼干,376.摆动序列,53.最大子序和(已补充)

基础知识&#xff1a; 题目分类大纲如下&#xff1a; #算法公开课 《代码随想录》算法视频公开课(opens new window)&#xff1a;贪心算法理论基础&#xff01;(opens new window),相信结合视频再看本篇题解&#xff0c;更有助于大家对本题的理解。 #什么是贪心 贪心的本质…

python分离字符串 2022年12月青少年电子学会等级考试 中小学生python编程等级考试二级真题答案解析

目录 python分离字符串 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python分离字符串 2022年12月 python编程等级考试级编程题 一、题目要…

【数据结构】链表OJ面试题5《链表的深度拷贝》(题库+解析)

1.前言 前五题在这http://t.csdnimg.cn/UeggB 后三题在这http://t.csdnimg.cn/gbohQ 给定一个链表&#xff0c;判断链表中是否有环。http://t.csdnimg.cn/Rcdyc 给定一个链表&#xff0c;返回链表开始入环的第一个结点。 如果链表无环&#xff0c;则返回 NULLhttp://t.cs…

1 月 NFT 市场动态:Polygon 增长,Mooar 崛起,TinFun 掀起文化浪潮

作者&#xff1a;stellafootprint.network 数据源&#xff1a;NFT Research - Footprint Analytics 2024 年 1 月&#xff0c;加密货币与 NFT 市场迎来了重要的转折点&#xff0c;其中美国首批现货比特币 ETF 的亮相尤为引人注目&#xff0c;这一金融一体化的里程碑事件吸引了…