Introducció | Objectius | Metodologia | Programes | Resultats | Conclusions | Referències | Autores | Agraïments |
PROGRAMES
COMPARACIÓ DE LA COMPLEXITAT AMB L'ALGORISME SIMPLE DE CORRESPONDÈNCIA EXACTA
Amb l'objectiu de comparar l'eficiència de l'algorisme simple de correspondència exacta amb l'algorisme de Knuth-Morris-Pratt, es va fer un programa en Perl que implementava l'algorisme simple de correspondència exacta. La lògica fonamental d'aquest algorisme està detallada a l'apartat de Metodologia.
La funció primordial del programa és calcular-nos el nombre d'operacions que realitza l'algorisme de correspondència exacta, i així poder-ho comparar amb l'algorisme de Knuth-Morris-Pratt. Per tant, en el programa se li passa com a argument el mRNA, del qual en genera tots els patrons possibles i cerca els que són únics en aquest mRNA. A més, conté un comptador a partir de la variable $x, en què, s'hi guarda el nombre d'operacions que realitza l'algorisme. Per poder veure el codi d'aquest programa, descarregar correspondencia.pl.
Per dur a terme aquesta comparació de la complexitat algorísmica, vam fer un programa similar, és a dir, que també genera patrons a partir d'un mRNA i busca si són únics o no en aquest, però per l'algorisme de Knuth-Morris-Pratt. Els resultats d'aquesta comparació es poden veure a l'apartat de Resultats.
|
|||||||||||||||||||||||||||||||||
CERCA DE SUBSEQÜÈNCIES ÚNIQUES D'UN MRNA CONCRET EN UN GENOMA DONAT
|
|||||||||||||||||||||||||||||||||
La funció principal del programa consisteix en cercar subseqüències úniques i específiques d'un mRNA concret en tot un genoma (humà, ratolí,...).
La forma com s'ha desenvolupat el programa per aconseguir aquest objectiu ha estat creant subestructures òptimes del programa per a cada problema a resoldre:
Construcció de la next table
La next table és un factor sine qua non de l'algorisme de Knuth-Morris-Pratt i, per tant, un dels primers passos a realitzar. La base sobre la que es fonamenta aquesta taula de coincidències dins l'algorisme KMP està explicada a l'apartat de Metodologia.
El codi de programació, pel qual es calcula aquesta next table en el programa, s'encapsula dins una funció anomenada nexttable:
|
Aquesta funció rep com a primer i únic paràmetre el patró pel que es construirà la next table. Aquesta es basa en la construcció d'una taula de coincidències del patró en un vector anomenat @coin (de coincidències) indexat per les mateixes posicions del patró. Aquest vector sempre tindrà el valor de -1 en la primera posició (0) i el valor de 0 en la segona posició (1). A partir d'aquí, es recorre la resta de posicions del patró tot comparant els prefixs màxims anteriors a aquella posició amb el patró i anotant les coincidèndies a cada posició. Si es vol tenir una explicació detallada del seu funcionament, veure el codi del programa.
Un cop obtingutda la next table, tot i ser de vital importància, encara faltaran resoldre moltes altres qüestions a tenir en compte per a complir els objectius del programa.
Algorisme de Knuth-Morris-Pratt
La lògica fonamental d'aquest algorisme i el perquè del seu guany en eficiència respecte a l'algorisme simple de correspondència exacta està detallat en l'apartat de Metodologia.
La seva implementació en el si del programa és en dues funcions: una funció anomenada knuth, per comprovar que els patrons siguin únics dins del propi mRNA; i un altra funció, knuth4genome, per tal de fer la mateixa comprovació en el genoma sencer.
La primera funció, knuth, rep tres paràmetres: la next table ja calculada, la seqüència mRNA i el patró. I retorna 1 (cert) o 0 (fals) segons si el patró a comprovar és únic o no sobre la seqüència de mRNA.
La segona funció, knuth4genome, rep quatre paràmetres: la next table, l'adreça del directori on es localitza el genoma, el patró a comprovar i la llargada del patró. I retorna 1 (cert)* o 0 (fals) segons si el patró a comprovar és únic o no sobre el genoma, i en el cas de ser únic, també retorna el desplaçament i el cromosoma en què es localitza.
* La funció retornarà 1 quan el comptador de patrons únics sigui igual o més petit que 1. Això es fa d'aquesta manera per aquells patrons únics en el mRNA però que no es troben en el genoma, degut a que es pot trobar separat en dos exons diferents amb introns entremig.
Tanmateix, en aquesta segona funció, abans d'implementar l'algorisme propi KMP, cal tenir present certes preparacions:
|
|
|
|
De totes maneres, tant en una funció com en l'altre, l'algorisme propi del KMP és el següent:
|
El fonament d'aquest és recórrer la seqüència en què volem comprovar si el patró és únic o no, tot comparant-la amb el patró. Però a l'hora de modificar el desplaçament segons si hem trobat el patró exacte o no, es fa mitjançant la informació proporcionada per la next table. Així directament s'aconsegueix desplaçar suficientment el patró sobre la seqüència, fins al punt d'estalviar-se posicions de la seqüència que no cal comparar i també, iniciar la següent comparació en la posició concreta del patró (saltant-se les posicions del patró que tampoc cal comparar). Si es vol tenir una explicació detallada del seu funcionament, veure el codi del programa.
Generació de patrons
El programa és capaç per ell mateix d'obrir el fitxer FASTA del mRNA i generar tots les patrons possibles que se'n puguin derivar, mitjançant la funció substr del Perl, per a una llargada determinada. D'aquesta manera, s'assegura que el programa analitzarà totes les subseqüències susceptibles de ser úniques d'un gen determinat.
|
Estratègia automàtica de moure la llargada Un cop comprovat si hi ha patrons únics per una llargada concreta en el mRNA, hi ha dues opcions possibles: que se n'hagin trobat o que no.
|
|
|
|