fbpx
Wikipedia

Algoritmo Needleman-Wunsch

El algoritmo de Needleman-Wunsch sirve para realizar alineamientos globales de dos secuencias. Se suele utilizar en el ámbito de la bioinformática para alinear secuencias de proteínas o de ácidos nucleicos. Fue propuesto por primera vez en 1970, por Saul Needleman y Christian Wunsch. Se trata de un ejemplo típico de programación dinámica. El algoritmo funciona del mismo modo independientemente de la complejidad o longitud de las secuencias y garantiza la obtención del mejor alineamiento.[1]

Las dos secuencias a alinear, llamadas A y B en los ejemplos, de longitud y , están formadas por elementos de un alfabeto finito de símbolos. El algoritmo necesita saber qué símbolos son diferentes entre sí y cuáles son iguales. Podemos utilizar una matriz cuadrada (S) para este propósito, en la que cada elemento indique la similitud entre los elementos i y j del alfabeto usado. Si nuestro alfabeto de símbolos no fuese finito, en vez de una matriz podríamos usar una función que tuviese como parámetros ambos símbolos a comparar y cuya salida fuese la similitud entre ambos. También se necesita otro parámetro (d) que nos indique cómo vamos a valorar que un símbolo no quede alineado con otro y que en su lugar se utilice un hueco.

Por ejemplo podemos definir la siguiente matriz:

Y entonces el siguiente alineamiento:

AGACTAGTTAC CGA---GACGT 

con una penalización por hueco de nos devolvería como solución óptima:

Para determinar la puntuación óptima y poder reconstruir el alineamiento que devolvería esa puntuación se necesita otra matriz, F, que almacena los resultados parciales de cada posible alineamiento. Las dimensiones de la matriz F son el número de elementos en la secuencia A y el de B ().

En cada iteración del algoritmo recibe valor un elemento de la matriz F. El valor que recibe el elemento representa la puntuación obtenida al alinear de forma óptima los primeros i elementos de A y los primeros j de B. Cuando el algoritmo termine, el último elemento de F (, con y ) contendrá la puntuación para el alineamiento óptimo de ambas secuencias.

 Inicio del algoritmo:   Recursión para obtener el siguiente elemento de forma óptima:  

La matriz F se calcula con el siguiente algoritmo:

 for i=0 to length(A)-1 F(i,0) <- d*i for j=0 to length(B)-1 F(0,j) <- d*j for i=1 to length(A) for j = 1 to length(B) { Choice1 <- F(i-1,j-1) + S(A(i), B(j)) Choice2 <- F(i-1, j) + d Choice3 <- F(i, j-1) + d F(i,j) <- max(Choice1, Choice2, Choice3) } 

Cuando el algoritmo acaba tenemos calculada la matriz F; el resultado es la puntuación devuelta por el mejor alineamiento posible, de acuerdo a los parámetros que hemos definido. Para obtener la secuencia se necesita ejecutar el siguiente algoritmo, que hace uso de la matriz F. Este algoritmo comienza por el último elemento, , y va retrocediendo hasta llegar a un elemento de la primera fila o la primera columna de F. En cada paso se comparan 3 elementos de F para ver cuál de ellos es el que se ha seguido en la solución óptima. Para cada debemos comparar y . Si el elemento usado es , entonces se ha alineado con un hueco; si es , entonces se ha alineado con un hueco; y si no, si el elemento elegido es , los elementos y han sido alineados. Es importante destacar que el que dos elementos sean alineados no implica necesariamente que sean iguales; significa que entre esa posibilidad, alinear con huecos o alinear símbolos diferentes, esa era la mejor opción. El pseudo-algoritmo que permite obtener el alineamiento correcto es el siguiente:

 AlignmentA <- "" AlignmentB <- "" i <- length(A) j <- length(B) while (i > 0 AND j > 0) { Score <- F(i,j) ScoreDiag <- F(i - 1, j - 1) ScoreUp <- F(i, j - 1) ScoreLeft <- F(i - 1, j) if (Score == ScoreDiag + S(A(i), B(j))) { AlignmentA <- A(i-1) + AlignmentA AlignmentB <- B(j-1) + AlignmentB i <- i - 1 j <- j - 1 } else if (Score == ScoreLeft + d) { AlignmentA <- A(i-1) + AlignmentA AlignmentB <- "-" + AlignmentB i <- i - 1 } otherwise (Score == ScoreUp + d) { AlignmentA <- "-" + AlignmentA AlignmentB <- B(j-1) + AlignmentB j <- j - 1 } } while (i > 0) { AlignmentA <- A(i-1) + AlignmentA AlignmentB <- "-" + AlignmentB i <- i - 1 } while (j > 0) { AlignmentA <- "-" + AlignmentA AlignmentB <- B(j-1) + AlignmentB j <- j - 1 } 

Se puede demostrar formalmente que tanto el tiempo de ejecución como el espacio necesario para ejecutar el algoritmo son de orden O(nm). Para alguna aplicaciones, sobre todo en bioinformática, el requerimiento de espacio es prohibitivo, puesto que se alinean secuencias muy largas. Existe una optimización de este algoritmo, denominada algoritmo de Hirschberg, que solo necesita espacio del orden O(m+n), pero a costa de incrementar el tiempo de computación.

Sitios externos

Véase también

Referencias

  1. Needleman, S.B. and Wunsch, C.D. (1970). «A general method applicable to the search for similarities in the amino acid sequence of two proteins». Journal of molecular biology (Elsevier) 48 (3): 443-453. 
  • A general method applicable to the search for similarities in the amino acid sequence of two proteins. S.B. Needleman, C.D. Wunsch (1970) J. Mol. Biol. 48(3):443-453.
  •   Datos: Q583546
  •   Multimedia: Category:Needleman–Wunsch algorithm

algoritmo, needleman, wunsch, algoritmo, needleman, wunsch, sirve, para, realizar, alineamientos, globales, secuencias, suele, utilizar, ámbito, bioinformática, para, alinear, secuencias, proteínas, ácidos, nucleicos, propuesto, primera, 1970, saul, needleman,. El algoritmo de Needleman Wunsch sirve para realizar alineamientos globales de dos secuencias Se suele utilizar en el ambito de la bioinformatica para alinear secuencias de proteinas o de acidos nucleicos Fue propuesto por primera vez en 1970 por Saul Needleman y Christian Wunsch Se trata de un ejemplo tipico de programacion dinamica El algoritmo funciona del mismo modo independientemente de la complejidad o longitud de las secuencias y garantiza la obtencion del mejor alineamiento 1 Las dos secuencias a alinear llamadas A y B en los ejemplos de longitud A m displaystyle A m y B n displaystyle B n estan formadas por elementos de un alfabeto finito de simbolos El algoritmo necesita saber que simbolos son diferentes entre si y cuales son iguales Podemos utilizar una matriz cuadrada S para este proposito en la que cada elemento S i j displaystyle S ij indique la similitud entre los elementos i y j del alfabeto usado Si nuestro alfabeto de simbolos no fuese finito en vez de una matriz podriamos usar una funcion R 2 R displaystyle R 2 rightarrow R que tuviese como parametros ambos simbolos a comparar y cuya salida fuese la similitud entre ambos Tambien se necesita otro parametro d que nos indique como vamos a valorar que un simbolo no quede alineado con otro y que en su lugar se utilice un hueco Por ejemplo podemos definir la siguiente matriz A G C T A 10 1 3 4 G 1 7 5 3 C 3 5 9 0 T 4 3 0 8 displaystyle begin array ccccc amp A amp G amp C amp T A amp 10 amp 1 amp 3 amp 4 G amp 1 amp 7 amp 5 amp 3 C amp 3 amp 5 amp 9 amp 0 T amp 4 amp 3 amp 0 amp 8 end array Y entonces el siguiente alineamiento AGACTAGTTAC CGA GACGT con una penalizacion por hueco de d 5 displaystyle d 5 nos devolveria como solucion optima S A C S G G S A A 3 d S G G S T A S T C S A G S C T 3 7 10 3 5 7 4 0 1 0 1 displaystyle S A C S G G S A A 3 times d S G G S T A S T C S A G S C T 3 7 10 3 times 5 7 4 0 1 0 1 Para determinar la puntuacion optima y poder reconstruir el alineamiento que devolveria esa puntuacion se necesita otra matriz F que almacena los resultados parciales de cada posible alineamiento Las dimensiones de la matriz F son el numero de elementos en la secuencia A y el de B A B displaystyle A times B En cada iteracion del algoritmo recibe valor un elemento de la matriz F El valor que recibe el elemento F i j displaystyle F ij representa la puntuacion obtenida al alinear de forma optima los primeros i elementos de A y los primeros j de B Cuando el algoritmo termine el ultimo elemento de F F m n displaystyle F mn con m A displaystyle m A y n B displaystyle n B contendra la puntuacion para el alineamiento optimo de ambas secuencias Inicio del algoritmo F 0 j d j displaystyle F 0j d j F i 0 d i displaystyle F i0 d i Recursion para obtener el siguiente elemento de forma optima F i j max F i 1 j 1 S A i B j F i j 1 d F i 1 j d displaystyle F ij max F i 1 j 1 S A i B j F i j 1 d F i 1 j d La matriz F se calcula con el siguiente algoritmo for i 0 to length A 1 F i 0 lt d i for j 0 to length B 1 F 0 j lt d j for i 1 to length A for j 1 to length B Choice1 lt F i 1 j 1 S A i B j Choice2 lt F i 1 j d Choice3 lt F i j 1 d F i j lt max Choice1 Choice2 Choice3 Cuando el algoritmo acaba tenemos calculada la matriz F el resultado es la puntuacion devuelta por el mejor alineamiento posible de acuerdo a los parametros que hemos definido Para obtener la secuencia se necesita ejecutar el siguiente algoritmo que hace uso de la matriz F Este algoritmo comienza por el ultimo elemento F m n displaystyle F mn y va retrocediendo hasta llegar a un elemento de la primera fila o la primera columna de F En cada paso se comparan 3 elementos de F para ver cual de ellos es el que se ha seguido en la solucion optima Para cada F i j displaystyle F ij debemos comparar F i 1 j F i j 1 displaystyle F i 1 j F i j 1 y F i 1 j 1 displaystyle F i 1 j 1 Si el elemento usado es F i 1 j displaystyle F i 1 j entonces A i displaystyle A i se ha alineado con un hueco si es F i j 1 displaystyle F i j 1 entonces B i displaystyle B i se ha alineado con un hueco y si no si el elemento elegido es F i 1 j 1 displaystyle F i 1 j 1 los elementos A i displaystyle A i y B i displaystyle B i han sido alineados Es importante destacar que el que dos elementos sean alineados no implica necesariamente que sean iguales significa que entre esa posibilidad alinear con huecos o alinear simbolos diferentes esa era la mejor opcion El pseudo algoritmo que permite obtener el alineamiento correcto es el siguiente AlignmentA lt AlignmentB lt i lt length A j lt length B while i gt 0 AND j gt 0 Score lt F i j ScoreDiag lt F i 1 j 1 ScoreUp lt F i j 1 ScoreLeft lt F i 1 j if Score ScoreDiag S A i B j AlignmentA lt A i 1 AlignmentA AlignmentB lt B j 1 AlignmentB i lt i 1 j lt j 1 else if Score ScoreLeft d AlignmentA lt A i 1 AlignmentA AlignmentB lt AlignmentB i lt i 1 otherwise Score ScoreUp d AlignmentA lt AlignmentA AlignmentB lt B j 1 AlignmentB j lt j 1 while i gt 0 AlignmentA lt A i 1 AlignmentA AlignmentB lt AlignmentB i lt i 1 while j gt 0 AlignmentA lt AlignmentA AlignmentB lt B j 1 AlignmentB j lt j 1 Se puede demostrar formalmente que tanto el tiempo de ejecucion como el espacio necesario para ejecutar el algoritmo son de orden O nm Para alguna aplicaciones sobre todo en bioinformatica el requerimiento de espacio es prohibitivo puesto que se alinean secuencias muy largas Existe una optimizacion de este algoritmo denominada algoritmo de Hirschberg que solo necesita espacio del orden O m n pero a costa de incrementar el tiempo de computacion Sitios externos EditarImplementacion del algoritmo enJava Otra implementacion enJavaVease tambien EditarAlineamiento de secuencias Programacion dinamica Algoritmo de Smith WatermanReferencias Editar Needleman S B and Wunsch C D 1970 A general method applicable to the search for similarities in the amino acid sequence of two proteins Journal of molecular biology Elsevier 48 3 443 453 A general method applicable to the search for similarities in the amino acid sequence of two proteins S B Needleman C D Wunsch 1970 J Mol Biol 48 3 443 453 Datos Q583546 Multimedia Category Needleman Wunsch algorithmObtenido de https es wikipedia org w index php title Algoritmo Needleman Wunsch amp oldid 134539967, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos