Needleman–Wunsch algorithm

本文介绍了一种用于比较两个序列相似性的算法——尼德曼-翁施算法,并通过实例展示了如何构建矩阵并计算两个序列(如基因或蛋白质序列)之间的匹配度。该算法能够找出最长的匹配子串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

尼德曼-翁施算法

这是一种对两个序列的相似性进行对比的算法(比如基因序列对比、蛋白质序列对比)

偶尔看到一个硬件spec上有写对smith-waterman算法的优化,然后好奇学习了一下,结果就看到了它的爷爷needleman-wunsch算法。简单记录一下

1. 对于两个序列首先形成如下带空行、空列矩阵,头一个空格置0

GCATGCG
GATTACA

GCATGCG
0-1-2-3-4-5-6-7
G-1
A-2
T-3
T-4
A-5
C-6
A-7

2. 按照规则:

        2.1 对于每个点若其行列字符相等则用其左上角分数+1

        2.2 对于每个点若其行列字符相等则对比左、左上、上三个单元格选最大分数-1

3. 得到

GCATGCG
0-1-2-3-4-5-6-7
G-110-1-2-3-4-5
A-20010-1-2-3
T-3-1-10210-1
T-4-2-2-1110-1
A-5-3-3-1000-1
C-6-4-2-2-1-110
A-7-5-3-1-2-200

手算一轮明显感觉到这一段计算是自左上到右下的单向传播;

规则2.1展示出了无论正位(对角线)或是错位(非对角线的左上点)对齐,都能明显放大,特别是连续的对齐(上述字串中的“AT”子串),能轻易制造全局分数最高点(2),这保障了最长子串匹配的成为整个矩阵的峰值点,而后续的计算,都受到此峰值涟漪的影响。围绕2出现扇形的1-0面如下:

210
110
000

4. 自右下向左上进行回溯

        4.0 若矩阵点对应的行列字符相同,则下一步跳到左上点;

        4.1 不相等则跳到“左上/左/上”的高分点,如果“左上/左/上”存在相同高分点,则按左上>左>上的优先级选择点

        4.2 如果回溯到左上角单元格,则行-列各自写自己的字符串

        4.3 如果回溯到上单元格则行取字符,列填空

        4.4 如果回溯到左边单元格,列取字符行填空

最后就会得到

GCATGCG
GATTACA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值