欢迎光临散文网 会员登陆 & 注册

【ROSALIND】【练Python,学生信】51 用翻转过程重建进化历程

2021-01-12 21:46 作者:未琢  | 我要投稿

如果第一次阅读本系列文档请先移步阅读【ROSALIND】【练Python,学生信】00 写在前面  谢谢配合~

题目:

重建进化历程(Reconstructing Evolutionary Histories)

Given: Two permutations π and γ, each of length 10.

所给:一对排列π和γ,长度都为10。

Return: The reversal distance drev(π,γ), followed by a collection of reversals sorting π into γ. If multiple collections of such reversals exist, you may return any one.

需得:由π变为γ的翻转距离drev(π,γ),以及由π变为γ的翻转路径的集合,如果有多条符合要求的路径,给出一条即可。

 

测试数据

1 2 3 4 5 6 7 8 9 10

1 8 9 3 2 7 6 5 4 10

测试输出

2

4 9

2 5

 

生物学背景

        在06 DNA序列Hamming距离的计算中,我们了解到:检查不匹配的符号,就可以推断出两个基因串之间进化路径上发生的一系列点突变。在42 翻转距离与广度优先搜索中,我们知道基因组还可以通过倒位法发生进化。同理,列举出翻转过程,我们能推理出一个序列是怎样通过倒位逐步变成另一个的,并可计算出反转距离。

        本问题就是要求我们除了算出翻转距离,还要给出翻转过程。翻转可以由发生翻转的两个端点处的位置进行标记,例如,将(4,1,2,6,3,5)转换为(4,1,3,6,2,5)的翻转用[3,5]进行表示。

 

思路

       与42 翻转距离与广度优先搜索相同,这道题的解答同样复制于网络(https://github.com/fernandoBRS/Rosalind-Problems/blob/master/sort.py),且复制于同一人,所以很多内容不再重复,阅读本部分代码前请务必回顾一下42 翻转距离与广度优先搜索的内容。

       本题只在之前的基础上增加了给出翻转过程的要求,因此代码也是在上次的基础上添加了满足这个需求的内容。简单来说,这里用history变量在逐层深入的过程中把翻转过程记录了下来,具体不再赘述,详见代码及注释。

  

代码



【ROSALIND】【练Python,学生信】51 用翻转过程重建进化历程的评论 (共 条)

分享到微博请遵守国家法律