Introducción | Objetivos | Metodología | Programas | Resultados | Conclusiones | Referencias | Autoras | Agradecimientos |
PROGRAMAS
COMPARACIÓN DE LA COMPLEJIDAD CON EL ALGORITMO SIMPLE DE CORRESPONDECIA EXACTA
Con el objetivo de comparar la eficiencia del algoritmo simple de correspondencia exacta con el algoritmo de Knuth-Morris-Pratt, se hizo un programa en Perl que implentaba el algoritmo simple de correspondencia exacta. La lógica fundamental de este algoritmo está detallada en el apartado de Metodología.
La función primordial del programa es calcular el número de operaciones que realiza el algoritmo de correspondencia exacta, y así poderlo comparar con el algoritmo de Knuth-Morris-Pratt. Por tanto, en el programa se le pasa como argumento el mRNA, a partir del cual genera todos lo pratrones posibles y busca los que son únicos en este mRNA. Además, contiene un contador a partir de la variable $x, en que se guarda el número de operaciones que realiza el algoritmo. Para poder ver el código de este programa, descargar correspondencia.pl.
Para llevar a cabo esta comparación de la complejidad algorítmica, desarrollamos un programa similar, es decir, que también genera patrones a partir de un mRNA y busca si son únicos o no en éste, pero para el algoritmo de Knuth-Morris-Pratt. Los resultados de esta comparación se pueden ver en el apartado de Resultados.
|
|||||||||||||||||||||||||||||||||
BÚSQUEDA DE SUBSECUENCIAS ÚNICAS DE UN MRNA CONCRETO EN UN GENOMA DADO
|
|||||||||||||||||||||||||||||||||
La función principal del programa consiste en buscar subsecuencias únicas y específicas de un mRNA concreto en todo un genoma (humano, ratón,...).
La forma como se ha desarrollado el programa para conseguir este objetivo ha sido creando subestructuras óptimas del programa para cada problema a resolver:
Construcción de la next table
La next table es un factor sine qua non del algoritmo de Knuth-Morris-Pratt y, por tanto, uno de los primeros pasos a realizar. La base sobre la que se fundamenta esta tabla de coincidencias dentro del algoritmo KMP está explicada en el apartado de Metodología.
El código de programación, para el cual se calcula esta next table en el programa, se encapsula dentro de una función llamada nexttable:
|
Esta función recibe como primero y único parámetro el patrón para el cual se construirá la next table. Ésta se basa en la construcción de una tabla de coincidencias del patrón en un vector llamado @coin (de coindencias) indexado para las mismas posiciones del patrón. Este vector siempre tendrá el valor de -1 en la primera posición (0) y el valor de 0 en la segunda posición (1). A partir de aquí, se recorre el resto de posiciones del patrón comparando los prefijos máximos anteriores a esa posición con el patrón y anotando las coincidencias en cada posición. Si se quiere consultar una explicación detallada de su funcionamiento, ver el código del programa.
Una vez obtenida la next table, aunque es de vital importancia, todavía faltarán resolver muchas otras cuestiones a tener en cuenta para cumplir los objetivos del programa.
Algoritmo de Knuth-Morris-Pratt
La lógica fundamental de este algoritmo y el por qué de su ganancia en eficiencia respecto al algoritmo simple de correspondencia exacta está detallada en el apartado Metodología.
Su implementación en el seno del programa es en dos funciones: una función llamada knuth, para comprobar que los patrones sean únicos dentro del propio mRNA; y otro función, knuth4genome, para hacer la misma comprobación en todo el genoma.
La primera función, knuth, recibe tres parámetros:la next table, ya calculada, la secuencia mRNA y el patrón. Y devuelve 1 (cierto) ó 0 (falso) según si el patrón a comprobar es único o no sobre la secuencia de mRNA.
La segunda función, knuth4genome, recibe cuatro parámetros: la next table, la dirección del directorio donde se localiza el genoma, el patrón a comprobar y la longitud del patrón. Y devuelve 1 (cierto)* ó 0 (falso) según si el patrón a comprobar es único o no sobre el genoma, y en el caso de ser único, también devuelve el desplazamiento y el cromosoma donde se localiza.
* La función devolverá 1 cuando el contador de patrones únicos sea igual o más pequeño que 1. Ésto se hace de esta manera para aquellos patrones únicos en el mRNA pero que no se encuentren en el genoma, debido a que se puede encontrar separado en dos exones diferentes con intrones entremedio.
Asímismo, en esta segunda función, antes de implementar el algoritmo propio KMP, se han de tener presentes ciertas preparaciones:
|
|
|
De todas formas, tanto en una función como en la otra, el algoritmo propio del KMP es el siguiente:
|
El fundamento de éste es recorrer la secuencia en que queremos comprobar si el patrón es único o no, comparándola con el patrón. Pero a la hora de modificar el desplazamiento según si hemos encontrado el patrón exacto o no, se hace mediante la información proporcionada por la next table. Así directamente se consigue desplazar suficientemente el patrón sobre la secuencia, hasta el punto de ahorrarse posiciones de la secuencia que no hace falta comparar y también, iniciar la siguiente comparación en la posición concreta del patrón (saltándose las posiciones del patrón que tampoco haga falta comparar). Para tener una explicación detallada de su funcionamiento, ver el código del programa.
Generación de patrones
El programa es capaz, por sí mismo, de abrir el fichero FASTA del mRNA y generar todos los posibles patrones que se puedan derivar, por medio de la función substr del Perl, para una longitud determinada. De esta manera, se asegura que el programa analizará todas las subsecuencias susceptibles de ser únicas de un gen determinado.
|
Estrategia automática de modificar la longitud Una vez comprobado si exiten patrones únicos para una longitud concreta en el mRNA, hay dos posibles opciones: que se hayan encontrado o que no.
|
|
|
|