【发布时间】:2016-01-24 21:25:03
【问题描述】:
我正在尝试解决来自 rosalind.info 的生物信息学问题,但我被这个问题锁定了:http://rosalind.info/problems/mrna/
要解决这个问题,您必须计算可以翻译蛋白质的不同 RNA 字符串的数量,以 1,000,000 为模。
生物学背景:一个protein是一个由20个amino acids组成的字符串,用20个不同的字母表示。每个氨基酸可以替换为多个RNA 字符串(由 3 个字母组成,每个 1)。
这个问题让您了解如何在编程时管理大量数字,这是生物信息学中的一个常见案例。我尝试了不同的方法,但我总是得到 INF 或负值,所以我做错了。
问题本身表明我应该找到一种方法来处理大量数字而不必存储它们。这怎么可能?如何使用 PHP 实现这一点?
这是我迄今为止最好的:
<?php function protein_reverse($sec) {
$sec_arr = str_split($sec);
$aa = array(
'F' => '2',
'L' => '6',
'S' => '6',
'Y' => '2',
'C' => '2',
'W' => '1',
'P' => '4',
'H' => '2',
'Q' => '2',
'R' => '4',
'I' => '3',
'M' => '1',
'T' => '4',
'N' => '2',
'K' => '2',
'V' => '4',
'A' => '4',
'D' => '2',
'E' => '2',
'G' => '4',
);
$r = 1;
foreach ( $sec_arr as $base ) {
$r *= $aa[$base] % 1000000;
}
return $r;
} ?>
【问题讨论】:
-
提示:作为热身,你可以尝试找出在你的程序中用括号明确数字运算优先级的方法
-
@tomc 我不明白你的评论,使“数字运算优先级显式”是什么意思?
-
你有 ` $r *= $aa[$base] % 1000000;` 这是 ` $r *= ($aa[$base] % 1000000);` 因为
$aa[$base]是总是比1000000小得多,你实际上有`$r *= $aa[$base];` 明确地写优先级会得到正确的`$r = (r * $aa[$base]) % 1000000;'跨度>
标签: php bioinformatics