【发布时间】:2015-02-10 22:46:16
【问题描述】:
所以我的问题是尝试实施 Needleman Wunsch 算法,而垂直和水平的 gapscores 内存不足,并且没有正确实施。这可能是内存中的一个简单的循环错误计算,但对于我的生活,我无法看到它。代码如下:
$seq1 = "ACTTCAATCGGT";
$seq2 = "ACTGGTCAATCGGT";
$len1 = length($seq1);
$len2 = length($seq2);
上面的顺序。
@matrix = ();
my $gapscore = -1;
my $matchscore = 1;
my $mismatchscore = 0;
$matrix[0][0] = 0;
# initialize 1st row and 1st column of matrix decreasing by $gapscore
for ($i = 1; $i < $len1; $i++) {
$matrix[$i][0] = $gapscore;
$gapscore--;
}
$gapscore = -1;
for ($j = 1; $j < $len2; $j++) {
$matrix[0][$j] = $gapscore;
$gapscore--;
}
$gapscore = -1;
所以上面的代码正确地实现了矩阵点,其中 0...n 和 0...n 水平和垂直移动。下一个代码尝试通过填充矩阵中的其余值来实现矩阵。
for($x = 1; $x < $len2; $x++) { # going through sequence1
for($y = 1; $y < $len1; $y++) { # going through sequence2
my ($diagonal, $horizontal, $vertical);
my $Firstletter = substr($seq1,$x-1,1);
my $Secondletter = substr($seq2,$y-1,1);
# gap scores:
$vertical = $matrix[$x-1][$y] + $gapscore;
$horizontal = $matrix[$x][$y-1] + $gapscore;
# matching scores on diagonal:
if($Firstletter eq $Secondletter) {
$diagonal = $matrix[$x-1][$y-1] + $matchscore;
}
else {
$diagonal = $matrix[$x-1][$y-1] + $mismatchscore;
}
}
}
垂直和水平变量会导致内存问题。我不确定为什么。如果有人能提供一些见解,我将不胜感激!
【问题讨论】:
-
究竟是什么不工作?内存问题是什么?索引超出范围、内存不足、耗时太长 - 所有这些都可以视为“内存问题”...