Puntuación errónea en alineamiento
Publicado: 2017-01-26 05:00 @250
Buenas, he hecho un programa para calcular la puntuación en un alineamiento, y no entiendo por qué me devuelve el valor 6 y no 4 como debería ser.
Muchas gracias a cualquier pista que me ayude a ver el fallo.
Using perl Syntax Highlighting
- use List::Util qw[min max];
- sub programacion_dinamica{
- my($secuencia1,$secuencia2) =@_;
- my $len1 =length ($secuencia1);
- my $len2 =length($secuencia2);
- my @secuencia1 = split("",$secuencia1);
- my @secuencia2= split("",$secuencia2);
- #Construimos la tabla s y la inicializamos a 0
- my @s=();
- my @decisiones=();
- for (my $i =0; $i <=$len1 ;$i++){
- my @ fila_s=();
- my @fila_decision=();
- for (my $j=0;$j <=$len2;$j++){
- push @fila_s,0;
- push@fila_decision,'';
- print @fila_decision;
- }
- push @s,\@fila_s; #por referencia
- push @decisiones,\@fila_decision;
- }
- for (my $i =0;$i<$len1;$i++){
- $s[0][0]= 0;
- $s[$i][0] =$s[$i][0];
- $decisiones[$i][0]="abajo";
- }
- for (my $j=0;$j<=$len2;$j++){
- $s[0][$j] =$s[0][$j];
- $decisiones[0][$j]="derecha";
- }
- for (my $j=1;$j<$len2;$j++){
- for (my $i=1;$i<$len1;$i++){
- if ($secuencia1[$i-1]== $secuencia2[$j-1]){
- $suma=1;
- }
- else{
- $suma=0;}
- $s[$i][$j]=max(
- $s[$i-1][$j]+0,
- $s[$i][$j-1]+0,
- $s[$i-1][$j-1]+$suma);
- if($s[$i][$j]== $s[$i][$j-1]+0){
- $decisiones[$i][$j] ="abajo";
- }
- elsif ($s[$i][$j]==$s[$i-1][$j-1]+$suma){
- $decisiones[$i][$j] ="diagonal";
- }
- else{
- $decisiones[$i][$j]="derecha";
- }
- }
- }
- return$s[$len1-1][$len2-1];
- }
- #Construimos las tablas y decisiones
- $secuencia1="ATGTTATA";
- $secuencia2="ATCGTCC";
- my $resultado=programacion_dinamica($secuencia1,$secuencia2);
- print $resultado;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Muchas gracias a cualquier pista que me ayude a ver el fallo.