论文阅读(十六):利用线性链条件随机场模型检测阵列比较基因组杂交数据的拷贝数变异
1.论文链接:Detection of Copy Number Variations from Array Comparative Genomic Hybridization Data Using Linear-chain Conditional Random Field Models
摘要:
拷贝数变异(CNV)约占人类基因组的12%。除了CNVs在癌症发展中的固有作用外,它们还被报道是复杂疾病易感性的基础。每个变异的范围可能从大约1000个核苷酸到不到5兆碱基不等。阵列比较基因组杂交(aCGH)允许跨基因组拷贝数的改变。利用aCGH数据分析cnv的关键计算挑战是检测拷贝数变化的段边界,并推断每个段的拷贝数状态。马尔可夫随机和更具体的条件随机为数据预处理、分割和拷贝数状态解码提供了一个框架。
关键词:拷贝数变化,aCGH,条件随机场
为了更多地了解可遗传拷贝数多态性(CNPs)在确定疾病表型中的作用,目前正在对CNPs进行系统的定位和编目。阵列比较基因组杂交(aCGH)允许跨基因组拷贝数的改变。利用aCGH数据分析拷贝数变异(CNVs)的关键计算挑战是检测拷贝数变化的段边界和推断每个段的拷贝数状态。本章提出了一种基于条件随机算法的新型无向图形模型,用于aCGH数据中的CNV检测。该模型将数据预处理、分割和拷贝数状态解码结合到一个统一的框架中。所描述的方法被称为CRF-CNV,在定义有意义的特征函数中提供了极大的存在性。因此,它可以将任意大小的局部空间信息生态型地整合到模型中。对于模型参数的估计,采用共轭梯度(CG)方法对似然值进行了优化,并在CG框架内开发了正向/反向算法。
16.1介绍
DNA序列中的结构变异,如可遗传的拷贝数改变,已被报道与许多疾病有关。还观察到体细胞染色体畸变(即,肿瘤样本中的基因扩增和缺失)在不同的癌症类型或亚型中显示出不同的临床或病理特征[3,6,14]。为了更好地了解遗传拷贝数多态性(CNPs)在确定疾病表型中的作用,需要对CNPs进行系统的定位和分类。在癌症样本中体细胞拷贝数畸变的鉴定可能导致重要癌基因或肿瘤抑制基因的发现。由于现有技术在评估拷贝数变异(CNV)方面的显著能力,最近研究界对研究可遗传的以及体细胞CNV产生了极大的兴趣[1,3,4,6,14,16,23]。
一般来说,CNV检测基本上有三种技术平台:基于阵列的技术(包括阵列比较基因组杂交(aCGH)[13,20],以及许多其他变体),单核苷酸多态性(SNP)基因分型技术[1,14]和下一代测序技术[2]。基于阵列的技术测量疾病/测试样品相对于正常/参考样品的DNA拷贝数改变。原则上,对于每个基因(或基因组片段),每个个体从其父亲继承一个拷贝,从其母亲继承一个拷贝。副本总数为两份。然而,当个体中存在拷贝数突变时,拷贝总数可能是1(即,缺失),或三个或更多。对于每个DNA片段或“克隆”,aCGH可以间接测量通过荧光强度的拷贝数,通过荧光强度的拷贝数,它代表与片段杂交的DNA的丰度。测试和参考样品的强度比,以对数标度测量,预计与测试样品相对于参考样品(假设有两个拷贝)的拷贝数变化成比例,尽管在该过程中可能会从各种来源引入显著的噪声。基于阵列的技术主要用于大片段的扩增和缺失,尽管不同的实验平台和使用不同大小克隆的设计可能会产生非常不同的分辨率和基因组覆盖率[14]。其他两个平台,SNP基因分型和下一代测序,使用不同的技术来测量拷贝数的变化,并在近年来得到普及[2,17]。本章主要介绍aCGH数据分析。
不同的平台有不同的挑战。自然,人们应该通过利用不同数据集的特殊属性来为这些平台使用不同的方法。毫不奇怪,近年来已经提出了各种算法用于不同的数据。另一方面,所有这些研究的主要目标是鉴定共享相同拷贝数的连续片段集。因此,处理来自不同平台的数据的基本计算任务是相同的:将基因组分割成具有相同拷贝数的离散区域。完成上述分割步骤后,将为每个片段分配一个拷贝数。后一项任务被称为“分类”。对来自不同平台的数据进行分割的一个重要共性是克隆之间的空间相关性。许多现有的方法已经利用了这样的属性,通过利用相同的方法,隐马尔可夫模型(HMM),它可以方便地使用链结构建模空间依赖。结果表明,HESTERN的初步成功[1,4,16,23]。然而,所有这些障碍都有一个继承的限制,即,它们都是一阶Hynst,不能考虑长程相关性。
已经证明,在各种领域,条件随机ELD(CRF)始终优于HALTH,主要是因为CRF可以潜在地整合数据中的所有信息[21]。这一特性使得CRF对CNV模型数据特别有吸引力,因为人们可以使用来自一个区域的数据来定义特征函数,而不是使用单个或两个数据点来定义Hyndrome中的排放和转换。我们提出了一种基于CRF的新型无向图形模型,用于aCGH数据的CNV检测[25]。我们的模型有效地结合了数据预处理,分割和拷贝数状态解码到一个统一的艾德框架。我们的方法(称为CRF-CNV)在定义有意义的特征函数方面提供了很大的灵活性,因此它可以有效地将任意大小的局部空间信息集成到模型中。对于模型参数估计,我们采用了共轭梯度(CG)方法进行似然优化,并在CG框架内开发了有效的前向/后向算法。拷贝数解码的最后一步是基于Viterbi算法。该方法使用真实的数据与已知的拷贝数以及模拟数据与现实的假设进行评估,并与两个流行的公开可用的程序进行比较。实验结果表明,CRF-CNV优于基于贝叶斯隐马尔可夫模型的方法在两个数据集的拷贝数分配。当与非参数方法相比时,CRF-CNV在真实的数据上实现了更高的精确度,同时保持了相同的召回水平,并且当应用于模拟数据时,两种方法的性能相当。
本章的其余部分组织如下。在第16.2节中,我们简要概述了aCGH数据和从aCGH数据中检测CNV的现有方法。关于CNV的CRF模型开发和实施的详细信息见第16.3节。我们在两个数据集上的实验结果以及与其他程序的比较见16.4节。我们将在16.5节进行一些讨论,以此结束本章。
16.2 aCGH数据和分析
16.2.1 aCGH数据
虽然从理论上讲,我们的方法可以应用于不同实验平台的数据,但在本分析中,我们主要关注aCGH数据。在数学上,aCGH数据通常由一组克隆的log 2强度比的阵列以及每个克隆沿基因组沿着的物理位置组成。这里,每个克隆是阵列中的一个数据点,所有克隆根据它们在基因组上的物理位置排序。图16.1绘制了人癌细胞系和Snijders等人分析的正常参考DNA [18]。每个数据点代表一个基因组区段/克隆,y轴代表标准化的log 2强度比。基于aCGH的CNV检测的主要目标是将基因组分割成共享相同平均log 2比率模式的离散区域(即,具有相同的拷贝数)。在来自人类的正常样本中,所有常染色体的拷贝数通常为2。理想地,如果测试样品(例如,一个癌细胞系)也有两个DNA拷贝,如果它有一个单拷贝的增加(或单拷贝的丢失),那么这个值应该是0.585(或-1),等等。图16.1中的虚线从下往上分别表示一个、两个和三个拷贝的三个值。一种直接的方法是使用一些全局阈值来基于其log 2比率为每个克隆分配拷贝数。然而,如图16.1所示,aCGH数据可能非常嘈杂,不同片段之间的边界模糊。它还可能具有复杂的局部空间依赖结构。这些属性使得分割问题本质上很难。使用全球阈值的方法在实践中通常效果不佳。
16.2.2现有算法
通常,需要许多步骤来检测aCGH数据的拷贝数变化。首先,原始log2比率数据通常需要一些预处理,包括归一化和平滑。标准化是减少实验因素引起的系统误差的必要步骤。通常,输入数据通过利用测试和参考DNA中没有差异的一些对照数据集进行归一化。标准化的目的是使对照数据集中的中位数或平均log2比值为0。平滑用于减少由于随机误差或突变而产生的噪声。平滑方法通常使用滑动窗口来过滤数据,试图在处理突然变化和减少随机误差的同时对数据进行曲线处理。除了基于滑动窗口的方法之外,还提出了几种其他技术,包括分位数平滑,小波平滑等(参见[5,8])。
分析aCGH数据的第二步称为分段,其目的是识别具有相同平均log 2比的分段。概括地说,有两个相关的估计问题。一是推断变异的数量和统计意义;二是准确定位变异的边界。因此,针对这两个估计问题,提出了几种不同的算法。Olshen等人[12]提出了一种基于递归循环二进制分割(CBS)算法的非参数方法。Hupe等人[9]提出了一种称为GLAD的方法,该方法基于中值绝对偏差模型,将离群值(数值上与其余数据相距甚远的观测值)与其周围的分段分离。Willenbrock和Fridlyand [24]使用真实的模拟模型比较了CBS(在DNACopy中实现)和GLAD的性能,得出的结论是,CBS总体上优于GLAD。在我们的实验研究中,我们采用了文献[24]中的模拟模型。在获得分割结果之后,需要后处理步骤来联合收割机具有相似平均水平的分割,并将其分类为单拷贝增益、单拷贝丢失、正常、多拷贝增益等。诸如GLADMerge [9]和MergeLevels [24]的方法可以对分割结果进行后处理,并相应地对它们进行标记。
正如Willenbrock和Fridlyand [24]所指出的,同时执行分割和分类更可取。合并这两个步骤的一个简单方法是使用线性链HMM。潜在的隐藏状态是真实的拷贝数。给定一个状态,log 2比率可以使用高斯分布来建模。从一种状态到另一种状态的转变揭示了相邻克隆之间拷贝数变化的可能性。给定观察到的数据,标准算法(前向/后向,Baum-Welch和Viterbi)可以用来估计参数和解码隐藏状态。近年来,针对aCGH数据提出了几种HSPs变体[7,16]。Lai等人。[11]已经表明,在给定足够的信噪比的情况下,Hynomial对小像差的表现最好。Guha等人。[7]提出了一种贝叶斯HMM,可以对参数施加生物学意义的先验。Shah等人。[16]通过引入离群值和位置特异性先验,扩展了贝叶斯HMM,可用于对遗传拷贝数多态性进行建模。
请注意,所有这些模型都是一阶Hynomial,无法捕获长期依赖性。直观地说,考虑高阶HHT来捕获信息局部相关性是有意义的,这是从aCGH数据观察到的重要属性。然而,考虑更高的阶数将使HISTORY更加复杂和计算密集。
16.3 aCGH数据的线性链CRF模型
为了克服障碍的局限性,我们提出了一个基于线性链条件随机场(CRF)理论的新模型[10,21]。CRF是无向图模型,设计用于计算给定输入变量X的输出随机变量Y的条件分布。术语“随机场”,相当于图论中的“马尔可夫网络”,已广泛应用于统计物理和计算机视觉。CRF也被称为条件马尔可夫网络[22]。因为CRF是条件模型,变量X之间的依赖关系不需要明确指定艾德。因此,可以通过使用输入变量X来定义有意义的特征函数,这些特征函数可以有效地捕获局部空间依赖性。CRFs已被广泛应用于语言处理、计算机视觉和生物信息学,与包括HPLF在内的有向图模型相比,具有显著的性能。
一般来说,线性链CRF(见图16.2)被定义为条件分布。
其中:
16.3.1特征函数
16.3.2参数估计
边缘分布可以通过组合前向和后向变量获得:
16.3.3评价方法
16.4实验结果
16.4.1真实样本
16.4.2模拟数据
尽管真实数据的结果显示,当匹配范围指数放宽到2时,CRF-CNV的性能优于CBS,并且与CNA-HMMer相当,但由于数据集规模非常小,实验是有限的。为了进一步评估CRF-CNV的性能,我们使用从文献[24]获得的模拟数据集测试了这三种算法。数据集由500个样本组成,每个样本有20条染色体。每条染色体包含100个克隆。每个克隆可能受到六种可能的拷贝数状态的影响。作者通过从原发性乳腺肿瘤组织的数据库中采样片段,并使用几种机制(例如,每个样本中癌细胞的比例,给定拷贝数状态下强度值的变化)来控制噪声水平,从而生成这些样本。通过使用文献中的模拟数据,我们进一步评估了CRF-CNV的性能。
为了训练CRF-CNV,我们像往常一样将500个样本分为三组。这次,训练集第1组包含样本1-50,验证集第2组包含样本51-100,测试集第3组包含样本101-500。我们使用了之前讨论的相同网格搜索方法来获取超参数{aj}、u和σ^2。对于每组固定的超参数,我们使用CG方法来获取参数θ。最后,我们使用Viterbi算法来解码第3组样本中可能的隐藏拷贝数状态标签,并与CNA-HMMer和CBS的结果进行比较。此外,我们还比较了CRF-CNV对第2组和第3组的预测,以查看在新的测试数据下,我们的模型可能会因为从小样本中推断出的次优参数而遭受多大的性能下降。为了便于比较,CBS和CNA-HMMer的结果分别针对这两组进行了展示。我们还使用第1组作为训练数据,为CNA-HMMer分配信息性先验。
表16.3显示了CRF-CNV、CBS和CNA-HMMer分别预测的第2组和第3组的段数总和,并将其与已知的段数总和进行了比较。有趣的是,对于这个模拟数据,CBS和CNA-HMMer预测的段数都较少。CRF-CNV在第2组预测的段数较少,而在第3组预测的段数较多。然而,段数并不能提供完整的情况。因此,我们使用F-measure来检查每种方法在第2组和第3组的边界预测准确性。表16.4显示了不同方法、不同组别和不同匹配范围的F-measure。正如预期的那样,随着D从0增加到4,所有方法和两个数据组的F-measure都有所增加。CBS在第2组和第3组的结果一致,CNA-HMMer在第2组和第3组的结果也一致,这并不奇怪。有趣的是,CRF-CNV在第3组的性能也非常接近其在第2组的性能。这个特性是理想的,因为它说明了CRF-CNV的稳健性。新测试数据的性能几乎与用于选择最佳模型参数的验证数据的性能相同。请注意,训练数据和验证数据的大小也非常小。可以预期,在小规模训练数据集的情况下,我们的方法可以可靠地预测在相同实验条件下生成的其他数据。就三种方法的性能而言,CNA-HMMer比CRF-CNV更准确,而CBS在完全匹配的情况下表现最差。然而,当我们通过增加D的值来放宽匹配标准时,CBS和CRF-CNV都比CNA-HMMer表现得更好。CNA-HMMer和CRF-CNV的结果与真实数据的结果一致。CBS的性能明显高于真实数据观察到的性能。然而,这可能归因于模拟过程,因为CBS被用来分割来自原发性乳腺肿瘤数据集的145个样本[24]。
16.5结论
近年来,检测拷贝数变异的问题引起了广泛关注,并提出了许多计算方法来解决这一问题。在这些计算发展中,CBS获得了极大的流行,并且已被证明在模拟数据上通常比其他算法表现更好[24]。然而,正如原始论文(以及我们的实验重新发现的)所示,CBS在标准的Coriell数据集中通过光谱核型分析识别的拷贝数变化上报告了更多的假阳性[18]。另一种常用的分割技术是隐马尔可夫模型(HMM)。HMM方法的优势在于能够在一个框架内执行参数(即均值和方差)估计和拷贝数解码,并且随着观察次数的增加,其性能有望提高。然而,几乎所有专门用于aCGH的HMM都是一阶马尔可夫模型,因此无法在数据中纳入长距离空间相关性。
我们提出了一种基于条件随机场理论的新计算模型。我们的模型在定义任意邻域上的有意义特征函数方面提供了极大的灵活性。因此,可以纳入更多的局部信息,并期望得到更稳健的结果。在本章中,我们使用能够将平滑有效地纳入我们统一框架的稳健充分统计量定义了特征函数。我们还开发了在共轭梯度方法内的有效前向-后向算法,用于高效计算模型参数。我们使用真实数据以及模拟数据评估了我们的方法,结果表明,当允许小的偏移时,我们的方法在两个数据集上的表现都优于贝叶斯HMM。与CBS相比,我们的方法在真实数据集上的假阳性更少。在模拟数据集上,我们方法的性能与CBS相当,CBS已被证明是三种流行的分割方法中最好的。
与其他条件随机场(CRF)类似,为了训练我们的模型,必须依赖一些训练数据。为了实用,像CNA-HMMer这样的贝叶斯隐马尔可夫模型(HMM)也需要训练数据来正确分配信息性先验。我们认为这个问题并不像最初看起来那么严重,主要有两个原因。首先,正如我们的实验所示,我们的算法确实非常稳健,即使找不到模型参数的最佳估计,也能持续表现良好。例如,我们在模拟数据集的分析中使用了一种简化的程序,通过随机选择一个子集进行训练。从理论上讲,从这种程序估计的参数可能严重依赖于这个特定子集,并且不一定全局最优。然而,表16.4中显示的结果表明,新测试数据的性能几乎与用于调整参数的验证数据相同。目前正在进行10折交叉验证以进一步验证这一观察结果。此外,我们的算法所需的训练规模非常小,这从真实数据和模拟数据中都可以看出。我们的算法在Coriell数据上报告的段数没有假阳性的主要原因是我们通过训练学习了数据中的结构。CNA-HMMer有无训练数据时性能的显著差异也支持这一观察结果。其次,确实存在一些经过实验验证的数据(如Coriell数据集)。随着时间的推移,预计会有越来越多的此类数据,因为最终,对于任何预测方法,都必须通过实验验证其中的一些预测。此外,我们方法的稳健性表明,我们可能只需要为每个特定平台训练我们的算法。然后可以将这些参数用于同一平台上生成的未来数据。
在计算成本方面,CRF-CNV有两个独立的部分:训练时间和预测时间。训练需要密集的计算来优化对数似然并确定超参数。此外,还可以执行k折交叉验证,这将需要更多的计算时间。相比之下,一旦参数被估计,预测阶段就相当高效。幸运的是,我们算法的训练阶段只需要一个小数据集,这使得算法仍然具有实用性。我们的算法的可能扩展和应用可以应用于其他高通量技术以检测拷贝数变化。
参考文献
略
相关文章:
论文阅读(十六):利用线性链条件随机场模型检测阵列比较基因组杂交数据的拷贝数变异
1.论文链接:Detection of Copy Number Variations from Array Comparative Genomic Hybridization Data Using Linear-chain Conditional Random Field Models 摘要: 拷贝数变异(CNV)约占人类基因组的12%。除了CNVs在癌症发展中的…...
7.抽象工厂(Abstract Factory)
抽象工厂与工厂方法极其类似,都是绕开new的,但是有些许不同。 动机 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。 假设案例 假设…...
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(基础组件实现)
目录 基础组件实现 如何将图像和文字显示到OLED上 如何绘制图像 如何绘制文字 如何获取字体? 如何正确的访问字体 如何抽象字体 如何绘制字符串 绘制方案 文本绘制 更加方便的绘制 字体附录 ascii 6x8字体 ascii 8 x 16字体 基础组件实现 我们现在离手…...
负荷预测算法模型
1. 时间序列分析方法 时间序列分析方法是最早被用来进行电力负荷预测的方法之一,它基于历史数据来构建数学模型,以描述时间与负荷值之间的关系。这种方法通常只考虑时间变量,不需要大量的输入数据,因此计算速度快。然而ÿ…...
Flutter Candies 一桶天下
| | | | | | | | 入魔的冬瓜 最近刚入桶的兄弟,有责任心的开发者,对自己的项目会不断进行优化,达到最完美的状态 自定义日历组件 主要功能 支持公历,农历,节气,传统节日,常用节假日 …...
android Camera 的进化
引言 Android 的camera 发展经历了3个阶段 : camera1 -》camera2 -》cameraX。 正文 Camera1 Camera1 的开发中,打开相机,设置参数的过程是同步的,就跟用户实际使用camera的操作步骤一样。但是如果有耗时情况发生时,会…...
HarmonyOS简介:应用开发的机遇、挑战和趋势
问题 更多的智能设备并没有带来更好的全场景体验 连接步骤复杂数据难以互通生态无法共享能力难以协同 主要挑战 针对不同设备上的不同操作系统,重复开发,维护多套版本 多种语言栈,对人员技能要求高 多种开发框架,不同的编程…...
反向代理模块b
1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说,反向代理就相当于…...
C++并发:设计基于锁的并发数据结构
(上一篇主要讲了底层逻辑,比较晦涩难懂,这一章讲解数据结构设计) 对于并发场景,数据保护的形式主要如下: 1 采用独立互斥和外部锁 2 专门为并发访问自行设计的数据结构 1 并发设计的内涵 互斥保护数据结…...
数据分析系列--⑥RapidMiner构建决策树(泰坦尼克号案例含数据)
一、资源下载 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 2.划分训练集和测试集 3.应用模型 4.结果分析 一、资源下载 点击下载数据集 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 虽然决策树已经构建,但对于大多数初学者或…...
leetcode 844 比较含退格的字符串
leetcode 844 比较含退格的字符串 题目描述 给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。 注意:如果对空文本输入退格字符,文本继续为空。 示例 1&#…...
【ArcGIS遇上Python】批量提取多波段影像至单个波段
本案例基于ArcGIS python,将landsat影像的7个波段影像数据,批量提取至单个波段。 相关阅读:【ArcGIS微课1000例】0141:提取多波段影像中的单个波段 文章目录 一、数据准备二、效果比对二、python批处理1. 编写python代码2. 运行代码一、数据准备 实验数据及完整的python位…...
10.6 LangChain提示工程终极指南:从基础模板到动态生成的工业级实践
LangChain提示工程终极指南:从基础模板到动态生成的工业级实践 关键词: LangChain提示模板、动态Prompt生成、少样本学习、结构化输出、Prompt工程 一、Prompt Engineering 的本质:用设计模式重构大模型交互 传统Prompt的局限性: 硬编码文本:修改需求需重构代码缺乏结构…...
DeepSeek-R1 论文解读 —— 强化学习大语言模型新时代来临?
近年来,人工智能(AI)领域发展迅猛,大语言模型(LLMs)为通用人工智能(AGI)的发展开辟了道路。OpenAI 的 o1 模型表现非凡,它引入的创新性推理时缩放技术显著提升了推理能力…...
联想拯救者R720笔记本外接显示屏方法,显示屏是2K屏27英寸
晚上23点10分前下单,第二天上午显示屏送到,检查外包装没拆封过。这个屏幕左下方有几个按键,按一按就开屏幕、按一按就关闭屏幕,按一按方便节省时间,也支持阅读等模式。 显示屏是 :AOC 27英寸 2K高清 100Hz…...
编译安装PaddleClas@openKylin(失败,安装好后报错缺scikit-learn)
编译安装 前置需求: 手工安装swig和faiss-cpu pip install swig pip install faiss-cpu 小技巧,pip编译安装的时候,可以加上--jobs64来多核编译。 注意先升级pip版本:pip install pip -U pip3 install faiss-cpu --config-s…...
传输层协议TCP与UDP:深入解析与对比
传输层协议TCP与UDP:深入解析与对比 目录 传输层协议TCP与UDP:深入解析与对比引言1. 传输层协议概述2. TCP协议详解2.1 TCP的特点2.2 TCP的三次握手与四次挥手三次握手四次挥手 2.3 TCP的流量控制与拥塞控制2.4 TCP的可靠性机制 3. UDP协议详解3.1 UDP的…...
《解码AI大模型涌现能力:从量变到质变的智能跃迁》
在当今科技飞速发展的时代,人工智能大模型的涌现能力成为了众人瞩目的焦点。从ChatGPT与用户的流畅对话,到GPT-4在复杂任务中的出色表现,这些大模型仿佛一夜之间解锁了超乎想象的技能,那么,这种神奇的涌现能力究竟是如…...
【数据结构】_C语言实现带头双向循环链表
目录 1. 单链表与双链表 1.1 单链表的结构及结点属性 1.2 双链表的结构及结点属性 2. 单链表与双链表的区别 3. 双链表的实现 3.1 List.h 3.2 List.c 3.3 Test_List.c 注:部分方法的实现细节注释 1. 双链表结点前驱、后继指针域的初始化 2. 各种增、删结…...
优盘恢复原始容量工具
买到一个优盘,显示32mb,我见过扩容盘,但是这次见到的是缩容盘,把2g的容量缩成32MB了,首次见到。。用芯片查询工具显示如下 ChipsBank(芯邦) CBM2199E 使用以下工具,恢复原始容量。。 其他CMB工具可能不行…...
JVM的GC详解
获取GC日志方式大抵有两种 第一种就是设定JVM参数在程序启动时查看,具体的命令参数为: -XX:PrintGCDetails # 打印GC日志 -XX:PrintGCTimeStamps # 打印每一次触发GC时发生的时间第二种则是在服务器上监控:使用jstat查看,如下所示,命令格式为jstat -gc…...
反转单向链表以及单链表添加节点、遍历单链表
反转1个单向链表 /*** 节点类*/ class ListNode {public int val;public ListNode next;public ListNode(int val) {this.val val;}Overridepublic String toString() {return "ListNode{" "val" val ", next" next };} }借助一个pre来存储每…...
ZZNUOJ(C/C++)基础练习1021——1030(详解版)
目录 1021 : 三数求大值 C语言版 C版 代码逻辑解释 1022 : 三整数排序 C语言版 C版 代码逻辑解释 补充 (C语言版,三目运算)C类似 代码逻辑解释 1023 : 大小写转换 C语言版 C版 1024 : 计算字母序号 C语言版 C版 代码逻辑总结…...
Linux学习笔记——系统维护命令
一、进程管理 1、ps命令(查) 来自process缩写,显示当前的进程状态。包括:进程的号码,发起者,系统资源,使用占比,运行状态等等。 语法格式:ps 参数 实例&#x…...
Harbor 部署
harbor镜像仓库搭建 版本v2.10.3 文章目录 一. docker 安装 harbor1. harbor 配置http访问1.1 下载harbor二进制包1.2 修改配置文件1.3 运行1.4 访问 2.【可选】harbor 配置https访问2.1 自签证书2.1 修改配置文件2.3 修改hosts文件2.4 运行2.5 访问 二. k8s 安装harbor1 .安装…...
three.js+WebGL踩坑经验合集(6.1):负缩放,负定矩阵和行列式的关系(2D版本)
春节忙完一轮,总算可以继续来写博客了。希望在春节假期结束之前能多更新几篇。 这一篇会偏理论多一点。笔者本没打算在这一系列里面重点讲理论,所以像相机矩阵推导这种网上已经很多优质文章的内容,笔者就一笔带过。 然而关于负缩放…...
开源的瓷砖式图像板系统Pinry
简介 什么是 Pinry ? Pinry 是一个开源的瓷砖式图像板系统,旨在帮助用户轻松保存、标记和分享图像、视频和网页。它提供了一种便于快速浏览的格式,适合喜欢整理和分享多种媒体内容的人。 主要特点 图像抓取和在线预览:支持从网页…...
LabVIEW透镜多参数自动检测系统
在现代制造业中,提升产品质量检测的自动化水平是提高生产效率和准确性的关键。本文介绍了一个基于LabVIEW的透镜多参数自动检测系统,该系统能够在单一工位上完成透镜的多项质量参数检测,并实现透镜的自动搬运与分选,极大地提升了检…...
socket实现HTTP请求,参考HttpURLConnection源码解析
背景 有台服务器,网卡绑定有2个ip地址,分别为: A:192.168.111.201 B:192.168.111.202 在这台服务器请求目标地址 C:192.168.111.203 时必须使用B作为源地址才能访问目标地址C,在这台服务器默认…...
反向代理模块jmh
1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说,反向代理就相当…...
安卓(android)实现注册界面【Android移动开发基础案例教程(第2版)黑马程序员】
一、实验目的(如果代码有错漏,可查看源码) 1.掌握LinearLayout、RelativeLayout、FrameLayout等布局的综合使用。 2.掌握ImageView、TextView、EditText、CheckBox、Button、RadioGroup、RadioButton、ListView、RecyclerView等控件在项目中的…...
RubyFPV开源代码之系统简介
RubyFPV开源代码之系统简介 1. 源由2. 工程架构3. 特性介绍(软件)3.1 特性亮点3.2 数字优势3.3 使用功能 4. DEMO推荐(硬件)4.1 天空端4.2 地面端4.3 按键硬件Raspberry PiRadxa 3W/E/C 5. 软件设计6. 参考资料 1. 源由 RubyFPV以…...
解锁维特比算法:探寻复杂系统的最优解密码
引言 在复杂的技术世界中,维特比算法以其独特的魅力和广泛的应用,成为通信、自然语言处理、生物信息学等领域的关键技术。今天,让我们一同深入探索维特比算法的奥秘。 一、维特比算法的诞生背景 维特比算法由安德鲁・维特比在 1967 年提出…...
Unity游戏(Assault空对地打击)开发(2) 基础场景布置
目录 导入插件 文件夹整理 场景布置 山地场景 导入插件 打开【My Assets】(如果你刚进行上篇的操作,该窗口默认已经打开了)。 找到添加的几个插件,点击Download并Import x.x to...。 文件夹整理 我们的目录下多了两个文件夹&a…...
Office / WPS 公式、Mathtype 公式输入花体字、空心字
注:引文主要看注意事项。 1、Office / WPS 公式中字体转换 花体字 字体选择 “Eulid Math One” 空心字 字体选择 “Eulid Math Two” 使用空心字时,一般不用斜体,取消勾选 “斜体”。 2、Mathtype 公式输入花体字、空心字 2.1 直接输…...
代码随想录算法训练营第三十九天-动态规划-213. 打家劫舍 II
与上一题基本一样,只不过房间形成一个环,就需要在首尾考虑状况多一些这不是多一些状况的问题,是完全不知道如何选择的问题这种状况详细分析一下就是要分成三种情况 第一种:不考虑首元素,也不考虑尾元素,只考…...
自然语言处理-词嵌入 (Word Embeddings)
词嵌入(Word Embedding)是一种将单词或短语映射到高维向量空间的技术,使其能够以数学方式表示单词之间的关系。词嵌入能够捕捉语义信息,使得相似的词在向量空间中具有相近的表示。 📌 常见词嵌入方法 基于矩阵分解的方…...
Redis 数据备份与恢复
Redis 数据备份与恢复 引言 Redis 是一款高性能的键值对存储系统,广泛应用于缓存、消息队列、分布式锁等领域。为了保证数据的安全性和可靠性,定期对 Redis 数据进行备份与恢复是至关重要的。本文将详细介绍 Redis 数据备份与恢复的方法,帮助您更好地管理和维护 Redis 数据…...
【leetcode】T541 (两点反思)
解题反思 闷着头往,往往会写成一团浆糊,还推倒重来,谋划好全局思路再开始很重要。 熟悉C的工具库很重要,一开始看到反转就还想着用stack来着,后面突然想起来用reverse函数刚好可以用哇,这题也就迎刃而解了…...
《STL基础之vector、list、deque》
【vector、list、deque导读】vector、list、deque这三种序列式的容器,算是比较的基础容器,也是大家在日常开发中常用到的容器,因为底层用到的数据结构比较简单,笔者就将他们三者放到一起做下对比分析,介绍下基本用法&a…...
嵌入式系统|DMA和SPI
文章目录 DMA(直接内存访问)DMA底层原理1. 关键组件2. 工作机制3. DMA传输模式 SPI(串行外设接口)SPI的基本原理SPI连接示例 DMA与SPI的共同作用 DMA(直接内存访问) 类型:DMA是一种数据传输接口…...
LevelDB 源码阅读:写入键值的工程实现和优化细节
读、写键值是 KV 数据库中最重要的两个操作,LevelDB 中提供了一个 Put 接口,用于写入键值对。使用方法很简单: leveldb::Status status leveldb::DB::Open(options, "./db", &db); status db->Put(leveldb::WriteOptions…...
寒假刷题Day18
一、16. 最接近的三数之和 这一题有负数,没有单调性,不能“大了右指针左移,小了左指针右移,最后存值域求差绝对值”。 class Solution { public:int threeSumClosest(vector<int>& nums, int target) {ranges::sort(n…...
力扣219.存在重复元素每日一题(大年初一)
以一道简单题开启全新的一年 哈希表:我们可以使用 哈希表 来存储数组元素及其对应的索引。通过遍历数组,我们可以检查当前元素是否已经存在于哈希表中,并判断索引差是否满足条件。 具体步骤如下: 创建一个哈希表 map,…...
Midjourney中的强变化、弱变化、局部重绘的本质区别以及其有多逆天的功能
开篇 Midjourney中有3个图片“微调”,它们分别为: 强变化;弱变化;局部重绘; 在Discord里分别都是用命令唤出的,但如今随着AI技术的发达在类似AI可人一类的纯图形化界面中,我们发觉这样的逆天…...
Blazor-选择循环语句
今天我们来说说Blazor选择语句和循环语句。 下面我们以一个简单的例子来讲解相关的语法,我已经创建好了一个Student类,以此类来进行语法的运用 因为我们需要交互性所以我们将类创建在*.client目录下 if 我们做一个学生信息的显示,Gender为…...
根据每月流量和市场份额排名前20 的AI工具列表
ChatGPT:由Open AI研发,是一款对话式大型语言模型。它能够理解自然语言输入,生成连贯且符合逻辑的回复。可用于文本创作,如撰写文章、故事、诗歌;还能解答各种领域的知识问题,提供翻译、代码解释等服务&…...
关于安卓greendao打包时报错问题修复
背景 项目在使用greendao的时候,debug安装没有问题,一到打包签名就报了。 环境 win10 jdk17 gradle8 项目依赖情况 博主的greendao是一个独立的module项目,项目目前只适配了java,不支持Kotlin。然后被外部集成。greendao版本…...
前端面试笔试题目(一)
以下模拟了大厂前端面试流程,并给出了涵盖HTML、CSS、JavaScript等基础和进阶知识的前端笔试题目,以帮助你更好地准备面试。 面试流程模拟 1. 自我介绍(5 - 10分钟):面试官会请你进行简单的自我介绍,包括…...
网络工程师 (10)设备管理
前言 设备管理中的数据传输控制方式是确保设备与内存(或CPU)之间高效、准确地进行数据传送的关键。 一、程序直接控制方式 1.工作原理: 由CPU发出I/O指令,直接控制数据的传输过程。CPU需要不断查询外设的状态,以确定数…...