DNA比对算法:BWT

BWT算法,实质上是前缀树的一种实现。那么什么是前缀树呢?

一、前缀树

对于问题p in S?如果S=rpq,那么p为S前缀rp的一个后缀。

于是,为了判断p in S 是否成立,我们找到S的所有前缀,然后逐一判断p是不是它们的后缀。为了加快效率,我们将所有的前缀建成一颗树,这棵树便是前缀树。下面,我们举例说明前缀树的建立过程和如何使用前缀树进行模式匹配。

前缀树的建立

假设S='acaacg',p='aac',那么我们首先找到S的所有前缀,如下

a

ac

aca

acaa

acaac

acaacg

于是,我们将这些前缀翻转过来,然后建立为一颗字典树,如下图

模式匹配

\(p='aac'\),令\(p'=caa\)(即p的翻转)。显然,现在只需进行一次树的搜索,即可完成匹配。

如果在判断p in S 的同时,还需要得到p 在S 中的位置,那么只需在建树的时候,将每个字符的索引加上,例如

当然,也可以不保存索引,每次模式匹配结束时,沿着当前节点走下去,一直到为S[0]。

在节点中添加数字,有其他用处,详见我的另一篇博文广义后缀树的简介。

评价

我们可以看到,相对于常规的匹配算法,前缀树时间复杂度比较小,但占用空间较大。下面要说的BWT算法,就是解决这个问题的。

二、构建BWT(S)

仍然,以S='acaacg'为例。

令S1=S+'\$'='acaacg\$';

循环左移S1 6次,得到S2,S3,S4,S5,S6,S7;

'acaacg\$'

'caacg\$a'

'aacg\$ac'

'acg\$aca'

'cg\$acaa'

'g\$acaac'

'\$acaacg'

对S1到S7按字典序排序(\$字符的字典序最小),取每个串的最后一个字符,连成一个序列'gc\$aaac'。于是为BWT(S)='gc\$aaac'。

'\$acaacg'

'aacg\$ac'

'acaacg\$'

'acg\$aca'

'caacg\$a'

'cg\$acaa'

'g\$acaac'

也许,到这里,你还不清楚BWT变换和前缀树,有什么关系。那就接着往下看吧。

三、使用BWT,进行模式匹配

我们已经知道BWT(S)='gc\$aaac',对BWT(S)中的字符进行排序得到S'='\$aaaccg',得到下图形式的矩阵。

这个矩阵看起来,有些规律,但是又很奇怪。下面通过复原S的过程,我们来理解以下这个矩阵。

复原S

这个过程用语言描述比较麻烦,直接看图

按照图中(1)到(7)步,我们即可得到'$gcaaca',于是S='acaacg'。

其中,斜线表示是,我们找到最后一列的某个符号,然后跳至这个符号在第一列的位置。比如,在第(2)步中,最后一列为第2个c,我们跳到第一行中第2个c的位置。

模式匹配

p='aac',令\(p'='caa'\),选取c作为起点,由于S中有两个c,因此有两种可能 的匹配。

从第一个c出发

从第二个c出发

因此,在方案2得到p',因此p in S是正确的。

几个问题

问题一:如何得到某个符号,在本列中是第几个?

显然,我们可以使用一个数组来保存。例如,对于'$gcaaca',数组a=[1,1,1,1,2,2,3]。

$ g c a a c a

[1,1,1,1,2,2,3]

但是,还有一种省空间的办法。我们只保存串'$gcaaca'中某些字符的位置,这些字符我们称为checkpoint。

问题二:如何得到模式p在S中的位置?

匹配模式串之后,继续运行,直至\$,但是这样比较耗时。

另一种办法,在BWT串中记录相应的偏移。这种办法空间开销比较大,也可以采取类似于checkpoint的方法,记录部分的偏移。

四、待研究的问题

如何快速得到一个串的BWT编码?

如何允许部分匹配?

题外话

DNA比对还有一类快速的办法——使用哈希。

LeetCode-Repeated DNA Sequences (位图算法减少内存)

Repeated DNA Sequences All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, ...

51nod 1445 变色DNA ( Bellman-Ford算法求单源最短路径)

1445 变色DNA 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有一只特别的狼,它在每个夜晚会进行变色,研究发现它可以变成N种颜色之一,将这些颜色标号为0,1 ...

HDU1560 DNA sequence —— IDA*算法

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560 DNA sequence Time Limit: 15000/5000 MS (Java/Oth ...

算法 - DNA搜索 - Ako Corasick

场景:从很长的字符串(输入字符串.DNA)中搜索大量固定字符串(字典.基因) 题目:Determining DNA Health | HackerRank 算法:Aho–Corasick algori ...

一个简单算法题引发的思考<DNA sorting>(about cin/template/new etc)

首先是昨天在北京大学oj网上看到一个简单的算法题目,虽然简单,但是如何完成一段高效.简洁.让人容易看懂的代码对于我这个基础不好,刚刚进入计算机行业的小白来说还是有意义的.而且在写代码的过程中,会发现自 ...

利用Needleman–Wunsch算法进行DNA序列全局比对

生物信息学原理作业第二弹:利用Needleman–Wunsch算法进行DNA序列全局比对. 具体原理:https://en.wikipedia.org/wiki/Needleman%E2%80%93W ...

DNA binding motif比对算法

DNA binding motif比对算法 2012-08-31 ~ ADMIN 之前介绍了序列比对的一些算法.本节主要讲述motif(有人翻译成结构模式,但本文一律使用基模)的比对算法. 那么什么是 ...

算法:POJ1007 DNA sorting

这题比较简单,重点应该在如何减少循环次数. package practice; import java.io.BufferedInputStream; import java.util.Map; im ...

BWT (Burrows–Wheeler_transform)数据转换算法

1.什么是BWT 压缩技术主要的工作方式就是找到重复的模式,进行紧密的编码. BWT(Burrows–Wheeler_transform)将原来的文本转换为一个相似的文本,转换后使得相同的字符位置连续 ...

随机推荐

省市二级联动(原生JS)

代码如下:

省市二级联动

MATLAB常用操作

1.点乘,点除,点乘方 点乘(对应元素相乘),必须同维或者其中一个是标量,a.*b 点除,a.\b表示矩阵b的每个元素除以a中对应元素或者除以常数a,a./b表示常数a除以矩阵b中每个元素或者矩阵a除 ...

c#设计模式之单例模式

单例模式(Singleton Pattern )就是为了整个应用程序的生命周期内的任何时刻,类只能创建一个实例. 单线程下的单例模式代码: public class Singleton { priva ...

selenium 处理日期控件

今天遇到日期控件无法处理的问题,在北京-air的帮助下,看了下这篇blog http://www.cnblogs.com/Fskjb/archive/2011/10/27/2227111.html 根 ...

laravel框架——路由

基本路由: Route::get('/', function () { return view('welcome'); }); Route::post('/', function () { retur ...

SQL函数返回表的示例-Z

create function [dbo].[GetOperateCustGroup] ( ), ) ) returns @TempTable table (MaxPrice float,MinPri ...

HDU1007(最近点对)

Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

设计模式 笔记 外观模式 Facade

//---------------------------15/04/16---------------------------- //Facade 外观模式-----对象结构型模式 /* 1:意图: ...

c# windows服务

参考:https://www.cnblogs.com/knowledgesea/p/3616127.html 序言 前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而 ...

bwt比对算法 C语言,DNA比对算法:BWT相关推荐

  1. 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...

    LRU页面置换算法模拟-最近最久未使用置换算法 LRU页面置换算法模拟-最近最久未使用置换算法|课程设计|计算机数据库课程设计 一.设计目的 1.用C语言实现最近最久未使用(LRU)置换算法. 2.了 ...

  2. java实现随机数生成算法_Java 语言实现的随机数生成算法

    广州疯狂软件学院拥有三大课程体系包括:java课程,android课程,ios课程,疯狂软件年终钜惠,报名java就业班,免费赠送基础班,名额有限,本月火热报名中,欢迎有志之士电话或者QQ咨询. [导 ...

  3. 妙趣横生的算法(c语言实现),妙趣横生的算法(C++语言实现) 带目录完整pdf[4MB]

    <妙趣横生的算法(C++语言实现)>内容丰富,生动有趣,寓教于乐,旨在帮助读者学习数据结构和算法的相关知识,从而开阔眼界,培养编程兴趣,提高编程能力,增强求职的竞争力.如果您想提高自己对算 ...

  4. c语言程序设计 算法,C语言程序设计第二章算法

    <C语言程序设计第二章算法>由会员分享,可在线阅读,更多相关<C语言程序设计第二章算法(38页珍藏版)>请在人人文库网上搜索. 1.C程序设计,主讲人:袁丽,燕大里仁基础教学部 ...

  5. 短进程算法c语言,短进程优先算法C语言实现

    短进程优先算法C语言实现 1.本实验实现了短进程优先的进程调度操作,但因为是非抢占式,所以实现起来比较简单. 短进程优先算法是以作业的长短来计算优先级,作业越短,其优先级越高.作业的长短是以作业所要求 ...

  6. 用c语言编写插入排序算法,C语言实现常用排序算法——插入排序

    插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历: 内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历: 当发现有大于待插入元素的元素 ...

  7. 数据拟合算法c语言实现,数据拟合算法剖析及C语言实现.doc

    数据拟合算法剖析及C语言实现 数据拟合算法剖析及C语言实现 [摘要]数据拟合在很多地方都有应用,主要用来处理实验或观测的原始离散数据.通过拟合可以更好的分析和解释数据.在引用前人的算法基础上,采用正交 ...

  8. 人工免疫算法c语言程序,基于人工免疫算法的模拟电路故障诊断

    摘要: 模拟电路故障诊断一直以来都是十分必要和有意义的,目前已成为热门的研究课题.现代电子技术和计算机技术的迅速发展促进了片上系统和混合集成电路的大量涌现,这也对模拟电路的测试和故障诊断提出了更高的要 ...

  9. JAVA梅森旋转随机算法,C语言实现梅森旋转算法

    原理: 梅森旋转算法是一种伪随机数生成算法 1.定义相关宏和结构体 #include #include #include #include typedef unsigned int uint; #de ...

最新文章

  1. Java基础学习——多线程(线程间通信-生产者消费者代码示例)
  2. android 4.2 桌面快捷方式,Android 添加桌面快捷方式操做
  3. devstack 安装trove newtone
  4. WIN7 下安装 SQL Server 2000 兼容性问题
  5. 浅谈如何学习linux
  6. 高温保护_【美的空调维修案例】P2压缩机高温保护 不定时出现P1过欠压保护...
  7. 计算机如何学会自动构图?
  8. esd文件转换成gho文件_STL到OBJ:如何将STL文件转换成OBJ ?
  9. notepad++ 技巧
  10. 更换map的遍历顺序优先级_树的级别顺序遍历或宽度优先遍历
  11. 【图像边缘检测】基于matlab元胞自动机图像边缘检测【含Matlab源码 427期】
  12. jQuery入门教程
  13. 大学生职业发展与就业指导 中国大学mooc 福州大学 测验题目和答案
  14. Should I design my classes from the outside (interfaces first) or from the inside (data first)?
  15. 解决Navicat 15注册机出现 rsa public key not found
  16. 夏昕的3部开发手册.- -
  17. 重构手法46:Parameterize Method (令函数携带参数)
  18. 如何使用Foobar2000将音乐文件按照专辑或者歌手名分出文件夹
  19. 网络安全实验室---解密关
  20. EasyDSS视频点播服务器软件实现的多码率视频转码点播功能原理的说明

热门文章

  1. js第一节-js的属性操作
  2. android 搜索栏滑动跟随缩放和移动,缩放变形问题
  3. java拼团小程序源码(毕设)
  4. 小知识!谷歌自动翻译的坑
  5. Spring boot+Shiro+ spring MVC+swagger UI +Mybatis+mysql+Vue +Element UI 之二 vue 环境演示
  6. 华为OD机试(2023A+B)考点分类
  7. 单片机反相器_秒懂单片机晶振电路原理
  8. Quantum LeaPs(QP)的资料
  9. WinServer 2012 域控组策略 用户发布软件部署
  10. 1024 程序员节岳麓对话、技术英雄会再奏时代新曲