Needleman–Wunsch algorithm
尼德曼-翁施算法
这是一种对两个序列的相似性进行对比的算法(比如基因序列对比、蛋白质序列对比)
偶尔看到一个硬件spec上有写对smith-waterman算法的优化,然后好奇学习了一下,结果就看到了它的爷爷needleman-wunsch算法。简单记录一下
1. 对于两个序列首先形成如下带空行、空列矩阵,头一个空格置0
GCATGCG
GATTACA
G | C | A | T | G | C | G | ||
---|---|---|---|---|---|---|---|---|
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. 得到
G | C | A | T | G | C | G | ||
---|---|---|---|---|---|---|---|---|
0 | -1 | -2 | -3 | -4 | -5 | -6 | -7 | |
G | -1 | 1 | 0 | -1 | -2 | -3 | -4 | -5 |
A | -2 | 0 | 0 | 1 | 0 | -1 | -2 | -3 |
T | -3 | -1 | -1 | 0 | 2 | 1 | 0 | -1 |
T | -4 | -2 | -2 | -1 | 1 | 1 | 0 | -1 |
A | -5 | -3 | -3 | -1 | 0 | 0 | 0 | -1 |
C | -6 | -4 | -2 | -2 | -1 | -1 | 1 | 0 |
A | -7 | -5 | -3 | -1 | -2 | -2 | 0 | 0 |
手算一轮明显感觉到这一段计算是自左上到右下的单向传播;
规则2.1展示出了无论正位(对角线)或是错位(非对角线的左上点)对齐,都能明显放大,特别是连续的对齐(上述字串中的“AT”子串),能轻易制造全局分数最高点(2),这保障了最长子串匹配的成为整个矩阵的峰值点,而后续的计算,都受到此峰值涟漪的影响。围绕2出现扇形的1-0面如下:
2 | 1 | 0 |
1 | 1 | 0 |
0 | 0 | 0 |
4. 自右下向左上进行回溯
4.0 若矩阵点对应的行列字符相同,则下一步跳到左上点;
4.1 不相等则跳到“左上/左/上”的高分点,如果“左上/左/上”存在相同高分点,则按左上>左>上的优先级选择点
4.2 如果回溯到左上角单元格,则行-列各自写自己的字符串
4.3 如果回溯到上单元格则行取字符,列填空
4.4 如果回溯到左边单元格,列取字符行填空
最后就会得到
G | C | A | T | G | C | G | |
---|---|---|---|---|---|---|---|
G | A | T | T | A | C | A |
Needleman–Wunsch algorithm相关推荐
- 文本比较算法Ⅱ——Needleman/Wunsch算法
在"文本比较算法Ⅰ--LD算法"中介绍了基于编辑距离的文本比较算法--LD算法. 本文介绍基于最长公共子串的文本比较算法--Needleman/Wunsch算法. 还是以实例说明: ...
- 文本比较算法--Needleman/Wunsch算法
一.定义: 定义: LCS(A,B)表示字符串A和字符串B的最长公共子串的长度. 很显然,LCS(A,B)=0 表示两个字符串没有公共部分. 例如,字符串A=kitten,字符串B=sitting , ...
- 文本比较算法Ⅴ——回顾贴,对前面几篇文章的回顾与质疑
文本比较算法Ⅰ--LD算法 文本比较算法Ⅱ--Needleman/Wunsch算法 文本比较算法Ⅲ--计算文本的相似度 文本比较算法Ⅳ--Nakatsu算法 在写了本系列的前面几篇文章之后.有些网友质 ...
- C#,深度好文,精致好码,文本对比(Text Compare)算法与源代码
Vladimir I. Levenshtein 一.文本对比的列文斯坦距离(编辑距离)算法 在日常应用中,文本比较是一个比较常见的问题.文本比较算法也是一个老生常谈的话题. 文本比较的核心就是比较两个 ...
- 文本比较算法Ⅲ——计算文本的相似度
在"文本比较算法Ⅰ--LD算法"中,介绍了编辑距离的计算. 在"文本比较算法Ⅱ--Needleman/Wunsch算法"中,介绍了最长公共子串的计算. 在给定的 ...
- 基因序列算法:编辑距离( Levenshtein 距离)和LD算法
一. Levenshtein 距离 许多基因算法(如Wagner-Fischer 算法)基于以下观察计算编辑距离:如果我们构造一个矩阵来保存第一个字符串和第二个字符串的所有前缀,以及所有前缀之间的编辑 ...
- 工控安全PLC固件逆向一
在工控领域,我们会遇到许多协议,为了进行安全研究,经常需要对协议的具体内容进行探索,今天我们就来聊聊关于工控协议逆向的问题. 接下来会简单介绍一下常用的协议逆向方法并配合一些实战,当然,从未知到已知的 ...
- 文本对比。文本编辑距离算法
在日常应用中,文本比较是一个比较常见的问题.文本比较算法也是一个老生常谈的话题. 文本比较的核心就是比较两个给定的文本(可以是字节流等)之间的差异.目前,主流的比较文本之间的差异主要有两大类.一类是基 ...
- centos7上mycat安装_centos7 Mycat/MySQL/MariaDB安装部署
使用yum安装MySQL详细步骤 安装mysql源 centos系统中不包含mysql的源,需要先安装mysql源 1.官网下载源.使用图形界面操作系统进入mysql官网,进入以下界面. 2.在Cen ...
最新文章
- excel修改列名_听说你还在手动合并Excel,看看这个吧!?
- 大数据让远洋捕鱼不再空手而归 这就是马云说的新实体经济
- Linux 给Qt应用软件创建图标启动
- LeetCode 1214. 查找两棵二叉搜索树之和(二叉树迭代器+双指针)
- python 取整_马克的Python学习笔记#数字,日期和时间
- Linux网络编程:原始套接字的魔力【续】
- python怎么用matplotlib_用Matplotlib在Python中绘制时间
- SN战队创造历史,苏宁集团发内部嘉奖令
- 国际音标的显示和输入
- PMP考试只刷题能否通过呢?
- RADIUS协议基础原理
- 重塑企业协同价值链,致远互联将“组织精神”进行到底
- 全国DNS服务器ip地址
- html用360打不开,win7系统使用360安全卫士解决浏览器打不开的方法
- mach ipc 学习
- pythonshell窗口是什么_使用IDLE的Python shell窗口实例详解
- 微信小程序_头像昵称填写
- c语言怎么调用sdl库函数,Go调用SDL2的C语言动态库
- html ios 视频播放不了,html中的video标签在ios微信中无法播放的解决方法之一
- App Zap的非常货币化策略:付费游戏的应用内购买
热门文章
- 【Torch API】pytorch 中torch.ones_like和torch.zeros_like函数详解
- SQLi lab: Equivalent to information schema on Oracle
- AJ-Report 数据源、数据集用法总结
- 凸函数高维性质证明(Jenson不等式)
- 信息论基础——信源熵及其性质研究
- 【计算机毕设之基于springboot的救灾物资管理系统-哔哩哔哩】 https://b23.tv/jtV9Bib
- There is no getter for property named ‘xxx‘ in ‘class com.test.project.entity.
- svn ignore忽略文件
- asp.net ajax1.0基础回顾(三):UpdatePanel的基本用法
- 【转载】Pyramid的权限管理