理解如何利用偏序比对法进行多序列比对

生物信息学 之 序列比对 针对DNA、RNA以及蛋白质序列,我们需要对其进行序列相似性搜索,来研究分析不同序列在结构和功能上相同与差异 相似性【similarity】/一致性【identity】 <==> 双序列比对( Pairwise sequence Alignment ) 同源性【homology】 <==> 多序列比对 (Multiple Sequence Alignmen... 阅读详情

本文翻译自 Understanding Partial Order Alignment for Multiple Sequence Alignment,原文链接在

http://simpsonlab.github.io/2015/05/01/understanding-poa/

Jared 开发的 Nanopolish 工具使用 poaV2 工具来对测序序列进行错误修正,poaV2 则使用了偏序比对的算法,其算法描述详见 Lee,Grasso 和 Sharlow 的文章1,2,3,该方法和 PacBio 的 PBDagCon 使用的方法类似。

基础知识

首篇介绍 POA 的文章指出,序列比对算法有时会产生一些没有生物学意义的结果,这些结果对双序列比对(pairwise alignment)以及高度保守序列之间的多序列比对(multiple alignment)是无害的,但是对更为一般性的多序列比对却会引起很多问题。比如说,考虑如下这些序列:

>seq1
CCGCTTTTCCGC
>seq2
CCGCAAAACCGC

上面的两条序列在选择最佳比对结果时有很多种选择,考虑如下情形,

CCGC----TTTTCGCG   CCGCTTTT----CCGC  CCGC-TT-TT--CGCG   CCGC-T-T-T-TCCGC
CCGCAAAA----CGCG   CCGC----AAAACCGC  CCGCA--A--AACCGC   CCGCA-A-A-A-CCGC

在不考虑生物学意义的情况下,中间的 8 个碱基之间可以任意匹配,那么对于每一条序列来说,就有 C 8 4 C_{8}^{4} C84​ 种选择(译者注:将 gap - 看成 4 个球,放到 8 个不同的抽屉里,有 C 8 4 C_{8}^{4} C84​ 种放法,gap 位置固定以后,T 或者 A 的位置也固定了),那么两条序列之间就共有 C 8 4 ∗ C 8 4 C_{8}^{4} * C_{8}^{4} C84​∗C84​ 种选择(译者注:原文说有 105 种接近等价的比对选择,没看懂怎么算出来的,有明白的读者请赐教)。对于最佳的比对结果,则依赖具体的 gap 罚分方案。

对于双序列比对,上面不同的比对方案可能相差不大,但对于多序列比对,不同的选择则对最后的结果有比较大的影响。那么,除了上面这种线性的表示方法,是否有更好方法来表达真实的情况?很自然的,我们想到可以用图来表示:
在这里插入图片描述
偏序比对图(partial order alignment graph)和字符串表示的比对不同,对于同一个碱基,会有确定的上下游关系。偏序比对图中的每个节点表示一个碱基,和字符串表示的比对类似,图中也会有隐含的上下游顺序关系,每个节点有零个或者多个上游节点和零个或多个下游节点。图中不允许有自连接和环,也就是说,偏序比对图是有向无环图(Directed Acyclic Graph,DAG)。

重复和重排序都可能有生物学意义,有多种比对会考虑这些情况,这样会将问题更一般化,并且有助于组装4,5。对于以修正测序错误的 Naonpolish 来说,这样的一般化是非必须的。

Smith-Waterman

在考虑如何对偏序图进行比对之前,让我们先回忆一下我们如何对字符串序列进行比对。

对于 Needleman-Wunsh 算法和其变体,我们先假设有两个光标在碱基上,每条序列上有一个光标。让我们考虑光标在每个比对步骤中的位置,如何移动光标使得我们能够得到最佳比对结果?由于全局最优的比对路径必定来自局部最优的“移动”,这样我们就只需将问题转化为如何为光标选择以下三种移动方式:

  • 两个光标同时向前移动,表明光标位置上的碱基互相匹配(match)
  • 光标 1 向前移动,光标 2 保持不动,将序列 1 中的光标所在位置碱基添加到比对中
  • 光标 2 向前移动,光标 1 保持不动,将序列 2 中的光标所在位置碱基添加到比对中

参考下图,对于每一步移动,我们会将该步移动的得分加上之前所有步骤的得分,设置成该位置的得分。
在这里插入图片描述
我们可以按照任何喜欢的顺序来计算得分——沿着矩阵的行、列或者对角线——只要我们能够保证所需的上一个步骤的得分被计算在内就可以。

从字符串比对到图比对(String to Graph Alignment)

在这里插入图片描述
可能超乎你的想象,将序列比对到 DAG 图上,只会对(序列比对所使用的)动态规划算法增加很小的复杂性。最初的 POA 文章中将动态规划矩阵加上了 3D 的“突起”(来表示节点有多个上游或者下游的情况),这可能导致问题看上去比实际更加复杂。

字符串比对和图比对的动态规划算法的主要不同在于,一个碱基在序列中只有一个上游,而在图中可能有两个或者更多个上游碱基。这样,图比对中光标移动的时候就要考虑上一个步骤中光标有可能来自多个上游中的一个,计算分数的时候要同时考虑这些来自不同上游的分数。

再重申一遍,图比对和字符串序列比对的唯一区别就在与图比对的动态规划算法循环中要考虑多个上游分数的情形以选择合适的插入或者碱基匹配。这就需要为当前碱基增加一个循环来遍历其所有上游碱基,算法的其他部分保持不变。

拓扑排序(Topological Sort)

在开始动态规划循环之前,还有一个需要考虑的步骤。

当对两个序列进行比对时,可以顺序的来对序列的索引进行遍历,这样对于任何正在计算的新位置,必要的上游分数就已经确定了。

但是对于图上的节点来说,并没有序列这样的固有顺序关系。例如,如果考虑节点插入图中的先后顺序,那么插入一个带有新序列的最新节点的时候——该节点有可能成为之前插入的某个节点的上游节点——下游节点开始计算的时候该节点的分数可能还没有准备好。

因此,使用拓扑排序来生成节点的顺序关系,这样可以保证每个节点都在其确定上游节点之后。对于一个有向无环图来说,这样的顺序关系总能找得到,而且事实上可能还能找到不只一套这样的顺序关系。拓扑排序是 make 和类似的工具如何决定在工作流中执行任务的顺序,以及有多少个6电子表格程序决定单元格是否需要更新(译者注:这半句不是很懂 … …)。

拓扑排序有两类主要的算法,Kahn(1962)算法和重复深度优先搜索算法。两种算法均适合我们的动态规划算法问题。

如此以来,将一个序列比对到图上就变得简单了:

  • 如果图更新了,执行拓扑排序
  • 照常运行动态规划步骤:
    • 以拓扑排序顺序访问图上的节点,
    • 考虑对齐/插入移动的所有有效上游节点

序列的插入(Insertion of aligned sequence)

Consider that we have a graph that so far only contains the sequence CGCTTAT, and our dynamic programming calculation aligning the sequence CGATTACG has given us an alignment that looks like this:
假设我们现在有一个只包含序列 CGCTTAT 的图,利用动态规划算法将该序列和序列 CGATTACG 进行比对会得到类似下面这样的结果:

C G A T T A C G
| | . | | | .
C G C T T A T -

也就是说,序列中的每个碱基,要么和图中的一个碱基进行配对(可能是匹配或者错配),要么就将其插入图中。

我们期望将新的序列插入图中会得到如下图这样的结果:
在这里插入图片描述
在上图中我们第一次见到有两种类型的边,加粗的边是有向的(方向未在图中标注,默认未从左到右),表示节点的上下游关系;从左数第三个节点 A 和 C 之间的虚线边表示这两个碱基被比对到了一起,但是是个错配(mismatch),快到结尾处的 C 和 T 之间的虚线边也是这个意思。

我们来同时跟踪上下游节点和所有比对到一起的节点。沿着我们正在插入的序列往前并进行比对计算。如果序列中的某个碱基没有比对到任何地方,或者他直接或间接比对上的节点都没有相同的碱基,那我们就将这个碱基插入图中形成一个新的节点,否则我们直接使用已有的节点并在必要时添加一条边。

更具体的说,我们采取的步骤如下:

  • 首先在图中为序列创建一个起始节点
  • 将前置位置(previous position)设置为这个起始节点
  • 对于比对计算的序列中的每个碱基
    • 如果当前的碱基没有比对到图中的任何一个节点,或者该碱基比对到的节点以及其他的节点都不和该碱基相同
      • 那么就为这个碱基在图中创建一个新节点,并将该节点设置为当前节点
      • 将这个新节点与其比对到的节点(如果有的话)对齐(译者注:按照上一个图片的说明,这里应该是在这两个节点之间添加一条虚线边),其他所有比对到的节点也更新为与这个新节点对齐(译者注:应该也是增加新的虚线边)
    • 否则,
      • 当前碱基比对到的节点被设置为当前节点
    • 如果在前置位置和当前节点之间没有边,那么新添加一条(译者注:这个边应该是加粗边,有方向,从前置位置指到当前节点)
    • 将当前序列的标签添加到(前置位置和当前节点之间的)边上;该条边上的标签数依赖与包含这条边和两个节点的所有序列的数目

尽可能的对节点进行融合,以保证 motif 的信息,即在几个序列中类似位置的多次出现的 motif 的信息不被图中的多个路径所掩盖(译者注:这句没太看明白是什么意思)

值得一提的是,通过找到插入图中某序列的起始节点,并沿着标有该序列标签的边遍历图,可以重构插入图中的任何单独序列。

一旦被比对的序列完成插入,并且对图中的节点重新进行拓扑排序,就可以开始进行下一个比对。

公共路径(Consensus paths)

现在你所有的序列都已经被插入到图中,那么怎样从图中得到类似像公共序列(consensus sequence)这样的信息呢?这是另一篇论文2中讨论的内容。

在图中找到单个的最佳路径相对比较简单。事实上,这仍然是一个动态规划问题。现将所有的节点分数置为零,并逐节点对图进行遍历。对于每个节点,选择最佳的边进入该节点——也即被最多序列所包含的边——并且将边的权重和其指向的节点分数相加来得到打分;如果有多条边平行,选择指向得分最高节点的边。

通过最高得分和边的选择会得到图中的最大权重路径。论文中指出,如果边的权重依赖与该边被遍历的概率,那么这就是一个最大似然路径。

然而,你也许想从比对中提取多个公共序列,该序列出现了多次但仍然是一个相对少数的序列(译者注:可能是相对于最佳路径而言)。寻找剩余公共序列的方法需要基于启发式的算法,该论文中有大部分篇幅讨论这个问题。

最基本的想法是去除已经提取的公共序列的边或者降低其权重,然后重复上述发现最佳路径的步骤来寻找其他的公共序列。在该论文中建议的步骤为:

  • 通过部分的边或者节点,以及一些其他可能的条件,查找到对应与公共序列的那些序列
  • 把和这些序列相关的边的权重降低,一种可能是将权重降至零
  • 继续前述的公共序列查找算法

在描述该算法的简单实现里,我们简单的选取了所有大部分碱基都在当前公共序列中的序列,并将相应的边的权重全部去除,重复这个步骤直到没有剩余的序列或者无法找到显著的公共序列。

该论文发现了一中极端的情形,这种情形下公共序列会提早终止,我们允许这种情况的发生。

比对字符串(Alignment strings)

最终,为了交流比对结果,生成一个输入和公共序列的“扁平”比对结果仍然是有用的。

一旦对图进行了拓扑排序,这也是相当简单的。图中的每个节点会按照拓扑排序的顺序,被分配到最终生成表的一列中,彼此对齐的节点被分配到同一列,没有比对到其他节点的节点单独一列。然后把碱基填入,每一条序列(包括公共序列)一行。

因为我们是按照拓扑排序的顺序来将节点分配到列中,那么生成拓扑排序(非唯一)的方法就会影响到比对结果最终的字符串表示形式,即使他们是功能上等同的。Kahn 排序会倾向于将结果序列交替排列,而深度优先排序则必然会按照顺序访问长字符串。这样的话,深度优先生成的比对字串更易读,因此我们在后面的实现中采用的是这种方法。

简单实现

可以在这里找到上述算法的一个简单但是功能完整的实现。在比对阶段,我们给出了两种实现;一种非常容易理解但是运行速度很慢;另外一种用到了 numpy 的向量化来提高效率,这显著的提升了速度,但是读起来更花功夫。

即使是更快的那个实现版本运行起来仍然很慢——比用 C 语言实现的 poaV2 要慢 10 倍,如果 poaV2 使用 -O3 选项进行优化编译,则要慢上 20 倍——但不管怎么说它对于小规模的问题还是有用的。

上述的简单实现可以生成一个 HTML 文件,可以交互式的方式图形化的浏览最终的偏序图;可视化工具在有高性能实现的浏览器上工作良好,但是不支持超过一千个节点的图。

结论

偏序图比对是一个非常有力的工具,它能够生成包含序列比对结构的丰富信息的图,但是相比于其他方法,缺少相关的在线文档和便于浏览的实现。我们希望这个工作能有助于更为广泛的受众更深入的理解这个方法。

References

  1. Multiple sequence alignment using partial order graphs (2002) by Lee, Grasso, and Sharlow
  2. Generating consensus sequences from partial order multiple sequence alignment graphs (2003) by Lee
  3. Combining partial order alignment and progressive multiple sequence alignment increases alignment speed and scalability to very large alignment problems (2004), Grasso and Lee
  4. Multiple alignment of protein sequences with repeats and rearrangements (2006) Phouong et al.
  5. Cactus: Algorithms for genome multiple sequence alignment (2011) Paten et al.
  6. Later versions of excel actually allow circular dependencies in cell calculations.
【信息科学与工程学】计算机科学与自动化——第三篇 计算理论基础04 大规模计算与并行计算理论 电路板(主板)是高度集成、为可靠性和扩展性设计的复杂系统平台。电容尤其是固态电容,是保障这个平台电力“洁净”和“稳定”的幕后英雄。它们通过滤波、去耦,确保了CPU、内存等核心部件在极端负载下的稳定工作,是服务器实现高可用性不可或缺的基石。如果把服务器CPU比作一个对饮食质量要求极高的运动员,那么主板供电电路就是“厨房系统”,而电容就是一组高效的“净水器和食物储备器”。 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作01

编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景 (100+条)集合运算​1集合运算关系代数并集 (Union)集合运算归并排序去重合并两个集合,去除重复元素。时间复杂度 O(n+m),n,m为两集合大小。输入:集合A, B。输出:A∪B。数据集成、多表结果合并、去重后的全量数据提取。2集合运算关系代数交集 (Intersection)集合运算哈希交集找出同时属于两个集合的元素。平均时间复杂度 O(min(n,m)),最坏 O(n*m)。输入:集合A, B。输出:A∩

weixin_49199313的博客 1389

探索Spoa:高效序列比对与共识序列生成的利器

探索Spoa:高效序列比对与共识序列生成的利器 在生物信息学领域,高效的序列比对和共识序列生成是不可或缺的基本工具。今天,我们要向您推荐一个卓越的开源项目——Spoa。这个C++实现的 Partial Order Alignment (POA) 算法库,不仅提供了多种模式的比对算法,还支持现代处理器的向量化优化,使得处理大规模数据时性能出众。 1. 项目介绍 Spoa 是一款由 R. Vaser ...

gitblog_00074的博客 703

smoothxg:使用封闭的偏序对齐来线性化和简化变异图

光滑的 使用偏序对齐的变异图局部重建 从原始比对组构建的Pangenome图可能具有复杂的局部结构,这些结构是由基因组变异的常见模式生成的。这些局部非线性会给下游分析,可视化和解释变化图带来困难。 smoothxg查找变化图smoothxg线的路径块。它将部分顺序对齐应用于每个块,从而生成一个非循环变化图。然后,要生成“平滑的”图,它将走原始路径将这些子图连接在一起。生成的图形仅包含大于所选块大小的循环或反相结构,否则为线性线性。除了为图提供线性结构外, smoothxg通过对每条链应用最重的捆绑算法,使用smoothxg来提取共有基因组图。 为了找到块, smoothxg应用了一个贪婪算法,该算法假定根据图节点在图的嵌入路径中的出现情况对图节点进行排序。在odgi sort -Y实现的基于路径引导的随机梯度下降的一维排序旨在提供这种排序。 建筑 smoothxg使用cmake构建自身及

浅谈偏序关系和全序关系

偏序关系是全序关系的子集,某集合上的一个全序关系一定是一个偏序关系,反之这不一定成立。 偏序关系满足自反、反对称、传递,而全序关系多了一个total,我的理解就是,集合中任意两元素都具有该关系,如≥、≤就是全序关系 全序是指,集合中的任意两元素之间可以进行比较的关系,而偏序是指,集合中部分元素之间有可以比较的关系。如实数中的任意两个数能比较大小,那么“大小”就是实数集的一个全序关系;复数集中并不是所有数都可以比较大小,那么“大小就是复数集上的一个偏序关系” ...

qq_60907716的博客 6056

spoa:SIMD偏序对齐方式

斯波亚 Spoa(SIMD POA)是偏序对齐(POA)算法(如10.1093 / bioinformatics / 18.3.452中所述)的c ++实现,用于生成共有序列(如10.1093 / bioinformatics / btg109中所述)。 它支持三种对齐方式:局部(史密斯-沃特曼),全局(Needleman-Wunsch)和半全局对齐(重叠),以及三种间隙模式:线性,仿射和凸(逐段仿射)。 它还支持Intel SSE4.1 +和AVX2矢量化(由于高延迟变化,速度快), 和调度。 用法 要构建spoa,请运行以下命令: git clone https://github.com/rvaser/spoa && cd spoa && mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Release .. && make 这将创

progressiveCactus:分发包装,用于“仙人掌”多基因组比对仪。 依赖关系链接为子模块

重要说明:渐进式仙人掌已移至此处: 这个版本a)是积极维护和开发的,并且b)通过使用Toil代替JobTree支持云计算平台 渐进仙人掌手册 Glenn Hickey的 ( ) Progressive Cactus是一个全基因组比对软件包。 安装 要求 吉特 gcc 4.2或更高版本 python 2.7 get ping 64位处理器和构建环境 排列哺乳动物大小的基因组时,至少在一台机器上具有150GB以上的内存; 较小的基因组需要较少的内存。 用于集群支持的阳伞或SGE。 750M磁盘空间 指示 正在安装 重要说明:Progressive Cactus当前不支持安装到包含空格的路径中。 在解决此问题之前,您可以使用软链接作为解决方法:ln -s“带空格的路径”“无空格的安装路径” 在您要安装Progressive Cactus的父目录中: git clone git:

专题解读 |「知识图谱」领域近期值得读的 6 篇顶会论文

本期内容选编自微信公众号「开放知识图谱」。CIKM 2017 ■ 论文 | Hike: A Hybrid Human-Machine Method for Entity Alignmentin Large-Scale Knowledge Bases■ 链接 | https://www.paperweekly.site/papers/1528■ 解读 | 罗丹,浙江大学硕士1. Motivation

Paper weekly 2312

AXI VIP配置全指南:从报错到成功仿真的完整流程(Vivado 2023版)

本文详细解析了在Vivado 2023环境中配置AXI Verification IP(VIP)进行协议仿真的完整流程。针对常见的include和import报错问题,提供了具体的解决方案和代码示例,指导用户从IP核创建、参数化配置,到构建可工作的仿真测试平台,最终实现成功仿真。

gpt4scribbler的博客 234

多序列比对要多久时间_多序列比对算法探讨

借此机会做个小review,也算我个人给的一个小总结。先给几篇paper,我的话不过是进一步意译大牛们的说法:http://www.genome.org/cgi/content/abstract/15/2/330http://nar.oxfordjournals.org/cgi/content/full/32/5/1792?ijkey=48Nmt1tta0fMg&keytype=refht...

weixin_36326053的博客 781

libero烧录信号抓取

提示:如果改了东西需要重新烧录,需要把这两个界面都关闭再libero打开。两个红色的要关闭掉。然后返回libero开始烧录,观测信号(如果只烧录观测从这一步开始就行)等到下面的messige出现以下信息表示run好了。在下图中右侧可以自己设置,设置完之后记得保存一下。run一下,耐心等待,有警告就ok,run完之后。run成功会变绿色,然后点下面的这个看波形。设置抓取信号:在libero打开。打开的就是烧录界面,直接run。

qq_34047965的博客 1423

WPS JS宏智能识别代码段并设置样式(完整可用版)

之前,我们已经经历了多次迭代,解决了许多问题,比如识别代码块、处理多行导入、调整样式等。现在他们需要一份全面的文档来解释整个代码的结构和工作原理。(5)智能行分析(含URL和注解检测优化)function analyzeLineEnhanced(rawText,trimmedText,codeSymbols,codePatterns, singleLinePatterns)该解决方案在保持高性能的同时,提供了良好的可扩展性,能够适应不同组织的代码规范需求,是WPS生态中专业文档处理的创新实践。

搏博的专栏 1826

【生信MOOC】生物序列比对工具——多序列比对

【生信MOOC】生物序列比对工具2——多序列比对 1、多序列比对的定义和用途 2、多序列比对的要求 3、多序列比对工具——EMBL - Clustal Omega 4、多序列比对工具——EMBL - TCOFFEE - Expresso 5、多序列比对的保存格式 6、多序列比对结果编辑——jalview 7、寻找保守区域:序列标识图 WebLogo 8、寻找保守区域:序列基序 MEME 9、寻找保守区域:PRINTS 指纹图谱数据库

weixin_40695088的博客 2万+

android mtk camera如何自定义默认拍照与录像分辨率

本文详细解析了在Android MTK平台上自定义相机默认拍照与录像分辨率的方法。通过分析Camera2应用默认选择逻辑,定位并修改PictureSize.java与VideoQualityCaptureRequestConfig.java中的关键代码,实现绕过系统智能选择,强制指定最高或特定分辨率。文章还提供了进阶的可配置化方案与验证避坑指南,帮助开发者精准控制相机行为。

weixin_29194817的博客 434

共有序列(Consensus Sequence)

共有序列(Consensus Sequence)的概念用来描述一组 DNA 或者蛋白质序列,通常这组序列互相之间非常相似但又不完全相同,共有序列就由这组相似序列中每个位置最常出现的碱基或者氨基酸组成。 ...

klcola的专栏 1万+

YOLOv11 改进 - 特征融合 | SSFF+TPE+CPAM 协同,ASF-YOLO 三重模块破解密集小目标分割难题

本文介绍了基于注意力尺度序列融合的ASF - YOLO模型在YOLOv11中的结合应用。ASF - YOLO旨在实现准确快速的细胞实例分割,结合空间和尺度特征,引入SSFF模块增强多尺度信息提取能力,TFE模块融合不同尺度特征图,CPAM整合前两者以关注信息丰富通道和小物体。我们将ASF - YOLO相关模块集成进YOLOv11,替代原有的部分特征融合模块,实现更高效的特征提取与融合。实验证明,YOLOv11 - ASFYOLO在细胞实例分割任务中表现出色,展现了该模型在深度学习中的广泛应用前景。

魔改工程师的博客 1257

嵌入式系统开发笔记101:STM32CubeIDE安装过程中的2个错误及其解决方法

STM32CubeIDE在安装过程中,遇到了2个错误,本文阐述其解决方法。产生上述错误的原因,都在于中文。STM32CubeIDE不能很好的支持中文,所以在使用STM32CubeIDE进行项目设计的过程中,不要使用中文,包括项目所在的路径。

snmplink的博客 8559

偏序和全序关系

给定集合和其上的二元关系,如果满足以下三个条件,则称该二元关系自反性(Reflexive):对于任意,都有。反对称性(Antisymmetric):对于任意,如果并且,则。传递性(Transitive):对于任意,如果并且,则。

这个人很懒,没有写简介 1186

2026年1至9月武汉市房地产价格深度分析报告

本报告基于2026年1月至9月武汉市实际成交案例,从成交价格、区域分布、户型结构、价格走势等维度进行深度分析。数据来源包括武汉市住房保障和房屋管理局备案数据、主要中介机构成交记录及典型楼盘网签案例,覆盖全市15个行政区及主要功能板块。

王国平的博客 333

【离散数学】偏序关系,全序关系,良序关系,哈斯图,格

偏序关系,全序关系,良序关系,哈斯图,最大元最小元,格

m0_62135915的博客 2万+

手把手教你学 AI芯片 SOC软件开发专栏简介

在AI芯片(如NPU、GPU加速器)爆发式增长的今天,软件栈开发已成为AI应用落地的核心瓶颈。无论是模型推理加速、低延迟部署,还是能效优化,都依赖于对芯片底层软件的深度掌握。然而,许多开发者困于“只会调用API,不懂驱动实现”的困境,导致性能瓶颈难以突破。本专栏《手把手教你学 AI芯片 SOC软件开发》专为AI工程师、嵌入式开发者及系统架构师打造,从零基础切入,系统拆解AI芯片SOC(System on Chip)的完整软件栈,覆盖Runtime(运行时)

MHD0815的博客 172

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

rust-mdbg 一款用于基因组组装的高效率软件

写在前面 rust-mdbg 是一种超快的minimizer-space de Bruijn graphs (mdBG) 实现,适用于组装长而准确的读数,例如PacBio HiFi。 随着18年以来Pacbio HiFi reads的出现,让一些复杂基因组的组装不再复杂,而且有越来越多的课题组也加入到了基因组学的研究中,正是因为有了高精度长读长的reads,目前也产生了很多专门用于HiFi组装的软件,如Hifiasm,当然这篇文章的软件的算法,可以用超短时间,低内存去组装。我相信随着不断的发展,以后做组装的

Xingze_Li 2215

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

全序,偏序

假设A是一个集合 {1,2,3} ;R是集合A上的关系,例如{<1,1>,<2,2>,<3,3>,<1,2>,<1,3>,<2,3>} 自反性:任取一个A中的元素x,如果都有<x,x>在R中,那么R是自反的。 对称性:任取一个A中的元素x,y,如果<x,y> 在关系R上,那么<y,x> 也在关系R上,那么R是对称的。 反对称性:任取一个A中的元素x,y(x!=y),如果<x,y> 在

qq_42824207的博客 1778

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【集合论】序关系 ( 偏序集元素之间的关系 | 可比 | 严格小于 | 覆盖 | 哈斯图 )

一、可比 、 二、严格小于 、 三、覆盖 、 四、哈斯图 、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1万+

常见排序算法

常见排序算法:冒牌排序(选择排序),插入排序,希尔排序,堆排序,快速排序,归并排序,计数排序,桶排序,基数排序

who_I_am__的博客 334

【集合论】序关系 ( 偏序关系 | 偏序集 | 偏序集示例 )

一、偏序关系 、 二、偏序集 、 三、偏序集示例 ( 大于等于、小于等于、整除 | 有序对元素是单个数值 ) 、 四、偏序集示例 2 ( 包含关系 | 有序对元素是集合 ) 、 五、偏序集示例 3 ( 加细关系 | 有序对元素是集族 )

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1万+

Spring源码:动态代理的增强顺序(AOP与事务的先后)

在之前的文章中,我们介绍了AOP与Spring事务的内容(事务管理也是通过AOP的动态代理实现的),包括代理的创建、执行等,但是遗留了一个问题,那就是多个增强的执行顺序是怎样的,本文我们就来进行下梳理。AOP在被设置在了后置处理器中,每个bean创建完后会判断是否需要创建代理类,如果需要则获取所有的通知方法(包括继承了Advisor接口的实现类与@Aspect标注的切面类中的增强方法,包装为Advisor类)并放入缓存中以便下次代理,然后筛选出适用于当前bean的增强并封装为代理对象。

CRUD工程师 2196
上一篇: 如何根据染色体坐标快速得到基因组的 DNA 序列
下一篇: Ubuntu 下 vim 如何对编程语言进行高亮显示?
klcola
博客等级 码龄20年 20粉丝 28原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值