尼德曼-翁施算法

新手指南

本算法可以用于比较任意两个序列。本指南将会使用两个短小的DNA序列作为例子来演示该算法
GCATGCU
GATTACA

初始化得分矩阵

首先建立如图一的得分矩阵。从第一列第一行的位置起始。计算过程从d 0 , 0开始，可以是按行计算，每行从左到右，也可以是按列计算，每列从上到下。当然，任何计算过程，只要满足在计算d i , j时d i-1 , j、d i-1 , j-1和d i, j-1都已经被计算这个条件即可。在计算d i , j后，需要保存d i , j是从d i-1 , j、d i-1 , j-1或di, j-1中的哪一个推进的，或保存计算的路径，以便于后续处理。上述计算过程到d m , n结束。

间隔补偿

当比对序列往往存在差距（即插入缺失），有时路数。生物学上，有很大的差距更容易，而不是多个单一缺失的发生为一体的大型删除。因此，我们应该进球两个小的插入缺失是有过之而无不及一个大的。简单和常见的方式做，这是通过一个大的差距，比分开始一个新的插入缺失和一个较小的间隙延伸得分为每个扩展了插入缺失信。例如，新插入缺失可能会花费-5和扩展，插入缺失可能会花费-1。以这种方式取向，例如：
GAAAAAAT
G--A-A-T
该序列有多种匹配方式，类似的匹配方式有：
GAAAAAAT
GAA----T
或者任意有四个间隔的匹配方式

历史与算法发展

通过Needleman和Wunsch的描述的算法的最初目的是找到在两种蛋白质的氨基酸序列的相似性。
Needleman和Wunsch的描述他们的算法为明确的情况下，当对准被匹配和不匹配仅仅惩罚，并差距没有惩罚（D =0）。从1970年最初发布提示递归。.
对应的动态规划算法需要立方时间。该报还指出，递归可容纳任意差距处罚公式：
惩罚因子，减去对于由每个间隙，可被评估为阻挡在允许的间隙。惩罚因子可以是间隙的大小和/或方向的函数。 [页444]
一个更好的动态规划算法二次运行时间为同样的问题（无间隙罚款）最早是由大卫Sankoff1972年类似的二次时间算法推出了由TK Vintsyuk于1968年独立发现了一种语音处理（“时间扭曲”），由罗伯特·瓦格纳和迈克尔·J·菲舍尔在1974年的字符串匹配。
Needleman和Wunsch的配制最大化相似性的问题。另一种可能性是最小化序列之间的编辑距离，弗拉基米尔的Levenshtein引入。彼得·塞勒斯在1974年发现的两个问题是等价的。
Needleman-Wunsch算法仍是广泛使用的最佳全局比对，特别是当全局比对的质量即结果是最重要的。然而，该算法是相对于时间和空间的昂贵，正比于两个序列，因而不适合长度特别长的序列比对。
最近的发展一直专注于提高算法的时间和空间成本，同时保持质量。例如，在2013年，快速优化整体序列比对算法（FOGSAA）, 建议比其他最佳全局比对的方法，其中包括中的Needleman-Wunsch算法更快核苷酸/蛋白质序列的比对。纸张声称相比中的Needleman-Wunsch算法时，FOGSAA达到70-90％为高度相似核苷酸序列的时间增益（具有>80％的相似性），并且对于具有30-80％的相似性的序列54-70％。
全局性配对和局部性配对的比较
全局性配对和局部性配对的基本区别是在局部性配对中，你将尝试用你诉求的序列的片段或局部来进行配对。而在全局性配对中，你将尝试使用整个序列（从起始端到结束端）来进行配对，也即是说，在全局性配对中，当你的比对序列长度不一致时，在配对过程中可能会产生间隔或者不匹配的情况。注意，在局部性配对中也有可能产生间隔。
局部性配对
全局性配对

以下是些基于两种算法不同点的比较。
在Needleman-Wunsch（全局性）算法中，分数跟踪系统是基于得分矩阵的右下角开始的。然而在Smith-Waterman（局部性）算法中，得分矩阵的起始点是基于分数最高的坐标位置。
全局性配对主要应用于比较同源性的基因的相似性而局部性配对主要应用于在非同源性的基因序列中寻找具有相似性的同源的基因域。
全局性配对是当你将全部的序列纳入考虑范围之内后进行的序列配对，而局部性配对则是将序列的一小部分进行优先比对。以下是为了帮助理解该概念而举得一个例子：

假设你有一个较长的序列作为参考，假设该序列长为2000碱基。你所要配对的序列长度较短，约为100碱基左右。假设在你的参考序列中有与配对序列极为接近的碱基序列片段出现，当你进行局部性配对时，你将得到一个非常好的匹配结果和相当高的匹配分数。然而，当你进行全局性配对时，匹配程度将会很低。因为该配对方法要求将两个序列的所有碱基都进行配对，所以当两序列长度相差很大时，将会造成配对结果含有很长的间隔。尽管在某处你的配对序列和参考序列的匹配程度相当高，在全局性配对时，将不会把这两个片段直接进行配对，而是尽量尝试让参考序列内的所有碱基都参与匹配，造成结果与局部性配对方法有极大差别。

因此，在选择配对算法的时候，必须参考两序列的具体长度和配对的实际意义和需要，选择适当的方法，才能得到有生物学意义的结果。

程序代码

本算法可以在多个平台上实现运算，常见的编程语言均有公开的代码可以参考使用。
以下提供在C语言中算法的实现usage: ./bin/needleman_wunsch [OPTIONS] [seq1 seq2]
     Needleman-Wunsch optimal global alignment (maximises score).  
     Takes a pair of sequences on the command line, or can read from a
     file and from sequence piped in.  Can read gzip files, FASTA and FASTQ.
     OPTIONS:
       --file <file>        同时读取比对的两序列文件--files <f1> <f2>    
       --stdin              读取标准文件头       --case_sensitive     使用大小写字母区分--match <score>      [默认: 1]
       --mismatch <score>   [默认: -2]
       --gapopen <score>    [默认: -4]
       --gapextend <score>  [默认: -1]
       --scoring <PAM30|PAM70|BLOSUM80|BLOSUM62>
       --substitution_matrix <file>  
       --substitution_pairs <file>   
       freestartgap       间隔不扣分freeendgap         序列结束不扣分       printscores        打印优化后的比对分数zam               
       printmatrices      打印动态矩阵printfasta         打印fasta格式的文件头pretty             打印描述行colour             打印颜色     可选优化项：
       nogapsin1          被比对序列不允许有间隔nogapsin2          比对序列不允许有间隔nogaps             所有序列均不允许有间隔nomismatches       不允许有误差配对

三维立体画

三维立体画是利用人眼立体视觉现象制作的绘画作品。普通绘画和摄影作品，包括电脑制作的三维动画，只是运用了人眼对光影、明暗、虚实的感觉得到立体的感觉，而没有利用双眼的立体视觉，一只眼看和两只眼看都是一样的。充分利用双眼立体视觉的立体画，将使你看到一个精彩的世界。人有两只眼，两只眼有一定距离，这就造成物体的影象在两眼中有一些差异，见右图，由图可见，由于物体与眼的距离不同，两眼的视角会有所不同，由于视角的不同所看到是影象也会有一些差异，大脑会根据这种差异感觉到立体的景象。三维立体画就是利用这个原理，在水平方向生成一系列重复的图案，当这些图案在两只眼中重合时，就看到了立体的影象。参见下图，这是一幅不能再简单的立体画了。图中最上一行圆最远，最下一行圆最近，请注意：最上一行圆之间距离最大，最下一行圆之间距离最小。重复图案的距离决定了立体影象的远近，生成三维立体画的程序就是根据这个原理，依据三维影象的远近，生成不同距离的重复图案。
立体画有两种形式：第一种是由相同的图案在水平方向以不同间隔排列而成，看起来是远近不同的物体。　另一种立体画较复杂，在这种立体画上你不能直接看到物体的形象，画面上只有杂乱的图案，制作这样的立体画只有使用程序了。两种作品看法是一样的，原理都是使左眼看到左眼的影象，让右眼看到右眼的影象。

电脑立体视觉效果

立体匹配是从一对立体图像的三维重建进程的一个重要步骤。当图像已被纠正，打个比方可以对准核苷酸/蛋白序列和匹配像素属于扫描线，因为这两个任务，着眼于人物的两个字符串之间建立最佳的对应关系绘制。实际上，一对立体声的“正确”的图像可以被看作是“左”图像的突变版本：噪声和单个摄像机的灵敏度改变的像素值（即字符取代）;和不同的视角揭示以前闭塞的数据，并引入新的闭塞（即插入和字符删除）。作为结果，中的Needleman-Wunsch算法的小的修改，使其适合于立体匹配。 尽管该算法在准确性方面性能都不算是最先进的，该但算法的相对简单性允许其在嵌入式系统上执行，使其有广泛的应用.
.