jtopo使用json动态算坐标_小白理解的动态规划算法解决序列比对的问题

9d59b8a0500d6df4727407fe0d42e839.png

开头

作为一个纯生物学背景的学生三跨到只做干实验的生信实验室去做研究生,理解各种计算机算法以及统计学问题问题并不容易,这里想和大家分享一下作为一个新人小白对于序列比对问题的理解。希望各位大神能对我的想法中不对的地方加以指正,谢谢大家。

问题引入-曼哈顿旅游问题

假如曼哈顿城市内有一处位置街道的地图(圆形为车站,横线为街道)如下所示,游客从A车站出发,沿街道乘车游览,目的是I车站。而且游览方向只能是向东或者向南,每一条街道上都有数目不同的旅游景点,现在希望能够规划一条游览路线图使得乘客能够观看到数目最多的景点。

4d7d700b481471f1fc473cb683851d3b.png

这就是一个动态规划的问题,我理解的动态规划(这里就不去写标准定义了)就是:解决一个问题由很多的步骤,我先考虑解决问题之前的那一步,然后再往前去思考,依此递推。在这个情景里面,我要算最终到I的景点数目,我先考虑到H和F的景点数目,只有把它俩先算出来,然后再根据H到I以及F到I的景点数目才能推断出究竟是H到I好还是F到I好,那么到I景点最多的问题就变成了到H或者到F,哪个站点景点数目最多的问题,然后依此递推。问题最终推到了开始B以及D的景点数目问题。

e30798cb6e3bf4d7f96e018d8322fff5.png

然后我可以根据从A到B以及从A到D的景点数目依此的去算出来从A到E到G到C的景点数目,然后再向后就可以算出来从A到H以及从A到F的各自的最多的景点数目,然后就可以根据这个来推断出到I最多的景点数目。然后就可以得到一张路由线路图,沿着这条路走可以游览最多的景点。

动态规划解决序列匹配问题

曼哈顿旅游问题实际上建立了一个模型,在矩形网格中从一个点到另一个点的解决最佳路线问题的模型,那么如何把序列匹配的问题放到这个模型里去解决呢?首先要分析序列匹配问题的解决方案。现在我有两段序列(我随便写的,不是氨基酸序列)。

80fdd5e0b5726250748f42d208d969ca.png

匹配的方式就是在序列中插入空位,比如在序列1的A后面插入一个空位那么就会变成

247eec3774c63599ccfb0bb8d23eb8b8.png

可以看到E匹配上了,其他的要么是空位要么是错位匹配,匹配的效果很差,我也可以在下面的E后面插入空位,就会变成。

ab0aa14fb4e81ce3eecbd9d09a9e6f5f.png

匹配数量变成了3个,效果好了一些,当然你也可以不允许错配的事情发生,或者对错配允许与否有自己判断的标准,比如对错配的程度打分。

那么找一段最长的匹配的问题实际上变成了在序列中插空然后找最佳匹配情况的问题。

那么接下来怎么去用计算机分析这个问题,这里引入了上面曼哈顿旅游问题中的动态规划的矩阵。怎么引入呢?下面就是我的胡猜乱想。

首先去看序列匹配的两条序列,我感觉上就会去思考能不能映射到坐标轴上去反应这样一个问题,这样才能更好的被计算机识别以及计算?比如把一条序列定位x,一条序列定位y,然后匹配的情况就能通过描点,连线的方法反映在在坐标系当中

131b98d7a50ba64aafa9d3e8080204a5.png

实际上使用了一个矩阵类似的东西,一条序列的位点写在上面,一条序列的位点写在左边,匹配的情况写到图里然后描点。不过如果这里和普通的描点连线不一样的是,序列的匹配是有方向的,必须从一端开始到另一端结束,每一个点的位置都可以由它的上一个点的位置决定,这样这个描点的连线图在有意义。另外在这个“坐标图”里面必须有头有尾,这样才能完整的反应序列匹配的情况。

f97dc9c08def08d23db509c65eddc54b.png

比如我现在知道了在这个匹配中终点在右下角的这个点,这个点的含义不是B匹配了C,它的含义必须有它前面的一个点来决定。现在的问题就是怎么样在这样一个”坐标系“当中用从他上一个点的情况来反映出这个点究竟是要去正确匹配还是错误匹配要和空位匹配。

cd68c9b87f54ff36434f063810219a4d.png

比如在下面的情况里面(0,0)以后向着右上方走了一个格子到了(A,B),走的对角线,那么A和B匹配,从(A,B)向右边走了一个格子,那么水平方向的B不参与匹配(匹配到一个空位),终点为(B,C)这个是先定好的,所以从(A,B)到(B,C)只有一条路就是竖着走,这种情况下竖着的序列C不参与匹配(匹配一个空位),所以匹配情况就是

3900f6774684c16eaa87dca2bba9868b.png

我们也可以反向的用动态规划的思想去思考,确定了终点(B,C)那么就有3条路来到这个位置,两个是空位匹配,一个是错误匹配,然后通过不同情况确定的一个格子,然后去思考上一个格子的打分情况(我们对不同的匹配打分)。

所以上面的内容我想说的是,序列比对的情况中所有的可能出现的情况都可以反映在矩形的方阵中,并且确定起点和终点,然后对匹配情况做出分数判定,比如规定不允许错配,空位0分,匹配1分。然后就可以把这个问题转变成为曼哈顿旅游问题————确定起点终点,走哪一条路线可以获得最高的分数。最后借用别人ppt上的一个图来展示一下这个方法。

1c374267839973920046a06b59aea22e.png

结尾

写了一些东西,里面肯定有很多错误,而且有很多东西我也没有真的搞清楚,希望大家能够指出来。一起学习一起进步。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值