本文介绍了计算直到给定长度的所有可能的序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题与生物信息学有关,特别是蛋白质序列。然而,实际上并不需要生物学知识。我正在努力寻找一种在Perl中解决此问题的有效方法:

蛋白质序列基本上是长度不等的序列或字符串,由20个氨基酸或字符的组合组成。

长度为1时,因此有20种可能性。问题是,每增加1个字符,可能性的数量就会大幅增加。

我想对每个长度的每个序列进行另一次计算。蛋白质序列可以是成百上千个氨基酸。我只需要获取所有可能的序列来完成此操作。

编辑:我意识到不可能计算每一个长度,我不需要这样做,但我想计算一个合理的长度,而不是接近宇宙的长度。

对编码的最有效方式有什么建议吗?

编辑:我真的不需要为1000个序列这样做,我只是对我不知道的想法、资源、功能等感兴趣,这可能会帮助我理解做到这一点的最有效方法。

推荐答案

推荐的Math::Combinatorics模块不支持带替换的排列,这是您解决此问题所需的,否则您的蛋白质永远不会超过20个氨基酸。

Algorithm::Combinatorics将完成这项工作,并且部分是用C语言编写的,因此它应该运行良好。

这里有一个生成所有氨基酸对的例子。我只显示了输出的前几行,因为即使这样也会产生400种变化!

use strict;
use warnings;

use Algorithm::Combinatorics 'variations_with_repetition';

my @acids = qw/ ala arg asn asp cys gln glu gly his ile leu lys met phe pro ser thr trp tyr val /;

my @proteins = variations_with_repetition(@acids, 2);

print "@$_
" for @proteins;

输出

ala ala
ala arg
ala asn
ala asp
ala cys
ala gln
ala glu
ala gly
ala his
ala ile
ala leu
ala lys
ala met
ala phe
ala pro
ala ser
ala thr
ala trp
ala tyr
ala val
arg ala
arg arg
arg asn
arg asp
arg cys
arg gln
arg glu
arg gly
...

这篇关于计算直到给定长度的所有可能的序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-03 04:12