一阶BWT过程

news/2024/11/13 3:33:25/

 BWT是一种以数据块为操作对象的可你的数据变换方法,其核心思想是对字符串循环移动后得到字符矩阵进行排序和变换。也就是对参考基因组进行了一次有规律的重新排序,变换的目的就是为了方便后续进行查找。

 一阶BWT构造和查找的具体过程如下:

一、BW变换(编码):

1.在源文本T后面添加一个额外的字符‘$’,定义该字符比源文件中所有字符都要小。

2.文本T$做循环移动(每次一个字符)形成新的文本,原始文本T$和新产生的文本组成一个文本集。

3.对文本集中的文本按照字典顺序排序(A-Z)。

4.抽取步骤3中排序后形成矩阵的最后一列L,且由于矩阵中的每一列都是源文本的一个置换,所以L也是源文本的一个置换。

举例如下:

        源文本:ATTCGCTT

步骤1:

    添加一个额外的字符‘$’,ATTCGCTT$。

步骤2:

    每一次变换中,首字符移动到末字符,形成新文本(字符串阵列),如下图:


步骤3:

    按照字典顺序进行排序(按照首位从小到大的顺序排序,若首位字符相同,则看下一位,直至不同位),如下图:

                                    

    其中,SA数组保存了BWT矩阵中$符号前面的后缀在参考基因组中出现的真实位置。如。SA[7]=6表示BWT矩阵的第7行的后缀‘TT’在X中出现的位置是6.

步骤4:

    最后一列,T$TGCTTCA。



二、解码

    介绍:

SA后缀数组、Occ数组和BWT串是BWT索引算法的3个辅助数组结构。

其中,SA数组保存了BWT矩阵中$符号前面的后缀在参考基因组中出现的真实位置。如,SA[7]=6表示BWT矩阵的第7行的后缀‘TT’在X中出现的位置是6。Occ[i]表示第i行的BWT串BWT[i]在整个BWT串种出现的位次,例如,Occ[2]=1表示BWT[2]='T'在索引T$TGCTTCA中是第二次出现的“T”。

    对序列建立索引以后,假定字符串W是X的一个子串,则W在X中每次出现的起始位置集合是后缀数组SA中的一个连续区间,这是因为所有包含W并以其为前缀的子序列都已经被按照字典序排列过。

基于这个发现,可以定义2个变量sp和ep,分别表示SA中W出现的起始和结束位置(即为BWT矩阵中的行号):

            sp(W)=min{k|所有X中以W为前缀的位置}

            ep(W)=max{k|所有X中以W为后缀的位置}

特殊的,当W为空时,sp(W)=1,ep(W)=n-1。W在X中所有出现的位置集合为:{SA(k):sp(W)<=k<=ep(W)}。例如,‘TT’的SA区间为[7,8],对应到X上的真实位置是6和1.

在实际应用中,SA后缀数组和Occ数组隔32行存一次,以便减少辅助数据结构所占用的空间,得到数据压缩的效果。当带查找的序列结束的位置不在SA后缀数组中时,接着往下做sp和ep的查找直至找到存储在SA后缀数组中的某一元素,让其减去该查找步骤进行的步数,即可得到原查找串的真实位置。

例子:

            

现设:F为$ACCGTTTT,即上图中的第一列;L为T$TGCTTCA,即上图中的BWT串。

原则如下:

1.L列的第一个元素为原始序列的最后一个元素(因为$在该位置后面)。

2.F列中的每一个元素,都是其同一行中的L列的下一个元素。也就是L列是F列的前一个元素。 


过程:

BWT[0] = T,Occ[0]=0  --->  在F中的第0+1个T ---> F中行 T$ATTCGCT--- > 对应L列中的T ---> TT

BWT[5] = T,Occ[5]=2  --->  在F中的第2+1个T ---> F中行TT$ATTCGC --- > 对应L列中的C ---> CTT

BWT[7] = C,Occ[7]=1  --->  在F中的第1+1个C ---> F中行CTT$ATTCG --- > 对应L列种的G ---> GCTT

BWT[3] = G,Occ[3]=0  --->  在F中的第0+1个G ---> F中行GCTT$ATTC--- > 对应L列种的C ---> CGCTT

BWT[4] = C,Occ[4]=0  --->  在F中的第0+1个C ---> F中行CGCTT$ATT --- > 对应L列种的T ---> TCGCTT

BWT[2] = T,Occ[2]=1  --->  在F中的第1+1个T ---> F中行TCGCTT$AT--- > 对应L列种的T ---> TTCGCTT

BWT[6] = T,Occ[6]=3  --->  在F中的第3+1个T ---> F中行TTCGCTT$A--- > 对应L列种的A ---> ATTCGCTT

BWT[8] = A,Occ[8]=0  --->  在F中的第0+1个A ---> F中行ATTCGCTT$ --- > 对应L列种的$ ---> $ATTCGCTT

最后,得到原始字符串:ATTCGCTT






http://www.ppmy.cn/news/669511.html

相关文章

C++读取BWT901CL传感器的数据

1 简述 最近在学习人体姿态设别的算法。想着买个角度传感器去尝试下。这个传感器最好是无线的带电池的&#xff0c;这样对我来说是比较方便使用的。我就在淘宝上找到一个一款BWT901CL&#xff0c;这个角度传感器。这个模块挺好用的&#xff0c;有加速度、角速度、角度。而且都…

学习 STM32之九轴姿态传感器(BWT901CL)串口通信读取数据

由于个人应用到3轴传感器&#xff0c;所以买了直接买了一个9轴的&#xff0c;用于学习STM32Core平台串口2连接维特智能串口Normal协议&#xff0c;然后通过串口1直接打印数据&#xff0c;接收传感器数据和与传感器进行通信&#xff1b;需要看产品文档的可以直接官网搜索文档&am…

BWT压缩算法及FM搜索算法详解

BWT压缩算法其经典地位无可撼动&#xff0c; 思想真是个奇妙的东西&#xff0c; 废话不多说&#xff0c; 让我们来看看她的奇妙之处吧。 假设有一串字符串S"acaacg"&#xff0c; 长度为6&#xff0c; 如果直接对此串进行压缩&#xff0c; 可能是a 1, c 1, a 2, c 1, …

Spring计时器StopWatch

文章目录 StopWatch介绍StopWatch属性详解StopWatch方法详解StopWatch使用示例 StopWatch介绍 StopWatch类是Spring框架中用于测量代码执行时间的工具类&#xff0c;它提供了一系列属性来记录监测信息。 本文基于spring-boot-starter-web:2.2.2RELEASE版本。 源码&#xff1…

BWA/BWT 比对软件

名称 bwa – Burrows-Wheeler Alignment Tool 内容 摘要 描述 命令行与选项 SAM 比对格式 短序列比对注意事项 比对精确性 估计插入大小分布 内存需求 速度 Bwa-0.6中的改变 其他 作者 引用与授权 历史 摘要 b w a i n d e x r e f . f a b w a m e m r e f . f …

STM32读取BWT901CL传感器数据

1 简述 最近想做一个检测小孩或者是老人&#xff0c;在家摔倒项目。大致和大家说一下项目的框架。 要用到一个能检测运动姿态的传感器&#xff0c;最好是无线的。于是我在网上找了一款带蓝牙的姿态角度传感器。给大家看下这个模块。 下面和大家分享下代码 2 程序设计 串口…

BWT算法解码

博文复制了原博客&#xff0c;做了少许修改 将原始序列经过BWT转换后&#xff0c; 可以更方便的进行压缩&#xff1b;而且BWT转换是一个可逆的转换&#xff0c;能够根据转换后的序列还原出原始序列&#xff1b; BWT转换首先将序列进行在序列的末尾插入一个字符&#xff0c;并…

双正交小波基 BWT

Berkeley小波变换&#xff08;BWT&#xff09;由四个方向上的四对母小波组成。在每对中&#xff0c;一个小波具有奇数对称性&#xff0c;另一个具有偶数对称性。通过对整个集合&#xff08;加上一个常数项&#xff09;的平移和缩放&#xff0c;小波在二维中形成一个完整的正交基…