BWT算法

简介: BWT算法

bwt算法是一种压缩算法,在生物信息学中,被用作序列比对,其中bwa中就有所应用。算法主要步骤可以分为编码和解码两步。

编码

假如我们现在有一个长度为6的序列AGCCAT

cdf2120d7a4623fbfb95960b70652fc1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

  1. 将标识符# 放置序列末尾,然后从末尾拿一位放到第一位,如此重复7次(序列的长度 + 1)就可以产生一个7*7的字母矩阵(下图左)
  2. 选取标识符位于第一位的一行,并将其放到第一行,剩余的按照字典顺序(A>B>C>D ...)进行排序放置(下图右)

1b3defd88c1b2b8671982c5ef585a3ce_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

  1. 将第一列作为F(first)列,最后一列作为L(last)列,只需要保留F和L两列即可(如下图)

30af1e5682c3be61a00031281ad26538_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

  • L列第一个元素是原始序列AGCCAT的最后一个元素
  • 每一行中,F列元素是L列元素的下一个元素,(「T->#」「C->A」「C->C」「G->C」「A->G」
  • L列中每个元素的相对位置与F列中对应元素的相对位置具有对应关系(L列中从上往下数第一个T对应于F列中从上往下数的第一个T)

解码

解码时

  1. 先从根据F列找到同一行的L列元素,根据L列元素在L列的相对位置,去找对应的F列对应相对位置的元素(比如,第一列为**#->T**,T在L列是第一个T,那么去F列找第一个T)
  2. 找到F列的元素后,在去找同一行的L列元素,根据L列元素在L列的相对位置,再去找F列中对应相对位置的元素(比如,「T->A」,A在L列是第二个,那么去找F列的第二个A,可以得到「A->C」
  3. 重复2过程,即可将原来的序列复原(在找的过程中是先找序列中最后一个,所以找的时候需要倒着写)

序列比对

讲完了编码和解码,那么BWT算法是怎么来进行比对的呢?比如这里有AGCCAT两条序列,那么下面讲解如何使用BWT将他们比对到我们的AGCCAT中。

从上面的解码过程可以发现,我们的解码过程是从最后一位,根据F和L列的关系开始解码,即从后向前进行解码,所以比对的时候,我们也需要从后向前进行比对。

CAT

首先在F列找到T,与T同一行的为A,A在第L列中为第二个,所以找F列中第二个A对应L列为C,至此,我们找到了一条「T->A->C」的路径,这条路径就是我们需要比对的「CAT」比对结束。

AGC

对于AGC来讲,会有两个结果,因为最后一个元素为「C」,而C在F列中有两个,所以会有两条路径,使用和上面相同的方法可以得到:

  1. 对于第一个C:「C->C->G」
  2. 对于第二个C:「C->G->A」

很明显,我们发现「AGC」可以比对到从第二个C出发的路径上。


总结

BWT由于F列和L列之间的关系(L列的元素后面的那个元素是F列),使得我们的比对过程变成了寻找符合条件的路径的问题。

相关文章
|
算法
BWT (Burrows–Wheeler_transform)数据转换算法
1.什么是BWT    压缩技术主要的工作方式就是找到重复的模式,进行紧密的编码。   BWT(Burrows–Wheeler_transform)将原来的文本转换为一个相似的文本,转换后使得相同的字符位置连续或者相邻,之后可以使用其他技术如:Move-to-front transform 和 游程编码 进行文本压缩。
1404 0
|
21天前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
|
21天前
|
机器学习/深度学习 算法 安全
计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置(Matlab代码实现)
计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置(Matlab代码实现)
|
24天前
|
算法
离散粒子群算法(DPSO)的原理与MATLAB实现
离散粒子群算法(DPSO)的原理与MATLAB实现
66 0
|
16天前
|
机器学习/深度学习 算法 新能源
【优化调度】基于matlab粒子群算法求解水火电经济调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab粒子群算法求解水火电经济调度优化问题研究(Matlab代码实现)
|
18天前
|
算法 机器人 定位技术
基于机器视觉和Dijkstra算法的平面建筑群地图路线规划matlab仿真
本程序基于机器视觉与Dijkstra算法,实现平面建筑群地图的路径规划。通过MATLAB 2022A读取地图图像,识别障碍物并进行路径搜索,支持鼠标选择起点与终点,最终显示最优路径及长度,适用于智能导航与机器人路径规划场景。
|
19天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的XGBoost时间序列预测算法matlab仿真
本程序基于Matlab 2024b实现,结合粒子群优化(PSO)与XGBoost算法,用于时间序列预测。通过PSO优化XGBoost超参数,提升预测精度。程序包含完整注释与操作视频,运行后生成预测效果图及性能评估指标RMSE。
|
16天前
|
传感器 并行计算 算法
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
|
16天前
|
存储 算法 安全
【无人机】基于灰狼优化算法的无人机路径规划问题研究(Matlab代码实现)
【无人机】基于灰狼优化算法的无人机路径规划问题研究(Matlab代码实现)
100 0
|
16天前
|
机器学习/深度学习 传感器 数据采集
【23年新算法】基于鱼鹰算法OOA-Transformer-BiLSTM多特征分类预测附Matlab代码 (多输入单输出)(Matlab代码实现)
【23年新算法】基于鱼鹰算法OOA-Transformer-BiLSTM多特征分类预测附Matlab代码 (多输入单输出)(Matlab代码实现)

热门文章

最新文章