En el cas dels aliniaments amb gaps - els que venen de dalt o de l'esquerra - hem obtingut aquests valors mitjançant una subfunció que
el que fas és anar calculant totes les puntuacions d'introduir totes les possibles llargades de gaps des de la posició on estem fins
al principi de la fila o de la columna (depenent de si es tracta del valor esquerra o amunt respectivament), i ens retorna
el valor màxim juntament amb el número de gaps que hem introduit.Això ho fa emmagatzemant els diferents valors en una nova matriu, per cada direcció dels gaps (esquerra i amunt); d'aquesta manera aconseguim que el programa es mantingui en complexitat cuadràtica ja que no cal que recalculi els valors en cada posició perquè els pot recuperar de la nova matriu.
Obtingudes ja les 3 possibilitats: diagonal, esquerra i amunt, triem en cada cas el valor més gran i l'anotem en la primera
matriu - la de puntuacions ; a més, anotem en la segona matriu - la de la procedència - d'on l'hem
agafat.
Finalment, ajuntem les dues matrius construïdes en una matriu de tres dimensions on en la posició 0 de la tercera
dimensió hi enregistrem la matriu de les puntuacions i en la posició 1 la matriu de la procedència.
La sortida la mostrem en forma de tres vectors: els 2 primers vectors contindran les seqüències correctament
aliniades, i el tercer vector contindrà els símbols corresponents a cada parella d'aminoàcids aliniats: si aquests
són idèntics, es representarà per un '*', si són diferents però la puntuació d'aliniar-los és superior a 0 en la matriu
de substitució, es representarà per ':', i si la seva puntuació és menor que 0 o estan aliniats amb un gap, no
mostrarem cap símbol.
Per recuperar l'aliniament, ens basem amb la posició 1 de la tercera dimensió de la matriu, ja que aquí trobarem
el camí a seguir per anar acumulant en cada posició la màxima puntuació possible de tot el recorregut que ja hem fet
- en aquest concepte es basa la programació dinàmica, en resoldre es problemes basant-se en la resolució del problema
anterior -.
Per tal de mostrar l'aliniament òptim final d'una manera ordenada i il·lustrativa fem les següents modificacions:
Per poder veure millor l'estructura del programa, clicant aquí el podreu observar.