Problema de alineación de secuencia de programación dinámica (1) alineación óptima

Introducción

La alineación de secuencias es el concepto más básico de la bioinformática, como la secuencia de genes.
La mayoría de las estrategias de análisis y análisis de datos requieren el uso de información obtenida por el sindicato.

Por ejemplo, en el escenario del método de entrada, tenemos un diccionario de sinónimos, la palabra S ingresada por el usuario (puede estar ingresada incorrectamente), necesitamos encontrar la palabra más similar en el diccionario de sinónimos lo antes posible y corregir la del usuario aporte.

problema

Descripción del problema

Dos secuencias de cadenas S = S 1 S 2 ... S n, T = T 1 T 2 ... T n, S = S_1S_2 ... S_n, T = T_1T_2 ... T_n,S=S1S2. . . Sn,T=T1T2. . . Tn, Calcule la alineación (S ', T') para minimizar el número de operaciones de edición s (S ', T').

análisis del problema

Podemos convertirlo en una cadena alineada. Para las dos cadenas T y S, definimos los siguientes elementos en cada posición correspondiente de la cadena, porque de esta manera podemos completar con la misma longitud:
Inserte la descripción de la imagen aquí

  • S '[i] =' - ': S [i] es una letra menos que T [i], lo que se llama eliminación
  • T ′ [i] = '-': S ′ [i] tiene una letra más que T [i], que se llama inserción
  • S [i] y T [i] tienen los mismos elementos posicionales, lo que se denomina coincidencia

Una vez que la longitud es igual, podemos calcular fácilmente la similitud entre las dos cadenas (si la alineación requiere menos operaciones, la similitud teórica es mayor) y hacer la siguiente fórmula de recurrencia, donde s (T ', S') es un pre -Función de puntuación definida, aquí está la puntuación de coincidencia + 1, si no hay coincidencia, la puntuación se deducirá, faltan caracteres o caracteres adicionales, creemos que esta gravedad es mayor que el carácter incorrecto, por lo que aquí se estipula temporalmente la entrada incorrecta -1, omisión y superfluo -3.

OPT (i, j) = max ⁡ {s (T i, S j) + OPT (i - 1, j - 1); s (′ - ′, S j) + OPT (i, j - 1); s (T i, ′ - ′) + OPT (i - 1, j) OPT (i, j) = \ max \ begin {cases} s (T_i, S_j) + OPT (i-1, j-1); \ text {} \\ s ('-', S_j) + OPT (i, j-1); \ text {} \\ s (T_i, '-') + OPT (i-1, j) \ end { casos}O P T ( yo ,j )=maxs ( Tyo,Sj)+O P T ( yo-1 ,j-1 ) ;s ( - ,Sj)+O P T ( yo ,j-1 ) ;s ( Tyo,- )+O P T ( yo-1 ,j )

Después de hacer esto, encontrará que hay múltiples esquemas de alineación. El problema original se transforma en cómo encontrar el esquema de alineación óptimo (es decir, hacer que la puntuación s (T ′, S ′) sea la más alta).

Soluciones

Utilice una matriz dinámica para almacenar la situación óptima actual, actualice constantemente la decisión y encuentre la siguiente mejor en el estado actual.

Por ejemplo,
Inserte la descripción de la imagen aquí
primero inicialice la fila 0 y la columna 0, primero explique el significado de esta matriz bidimensional, tome la posición del círculo rojo-9 como ejemplo, que representa OPT ("", "OCU"), es decir , T está vacío y S es "OCU" ", porque T está vacío, cada valor en S solo puede alinearse con un espacio, y alinearse con un espacio es -3, y la puntuación final es -9. Podemos calcular los elementos en la fila 0 y la columna 0. Solo se pueden alinear con espacios, por lo que todos son múltiplos de -3. Luego, podemos calcular en base a la fórmula de recurrencia anterior.
Por ejemplo, en la esquina inferior derecha max {3 + 1,0-3,0-3} = 4, por lo que podemos obtener la mejor puntuación de alineación de 4.
max ⁡ {1 + OPT ("OCURRENC", "OCURRANC") - 3 + OPT ("OCCURRENC", "OCURRANCE") - 3 + OPT ("OCCURRENCE", "OCCURRANC") \ max \ begin {cases} 1+ OPT ("OCCURRENC", "OCURRANC") \\ -3 + OPT ("OCCURRENC", "OCURRANCE") \\ -3 + OPT ("OCCURRENCE", "OCCURRANC") \ end {cases}max1+O P T ( " O C C U R R E N C " ," O C U R R A N C " )- 3+O P T ( " O C C U R R E N C " ," O C U R R A N C E " )- 3+O P T ( " O C C U R R E N C E " ," O C C T R R A N C " )
Inserte la descripción de la imagen aquí
El pseudocódigo es el siguiente:
Inserte la descripción de la imagen aquí
Para saber cuál es el esquema de alineación real, en otras palabras, la ruta desde la esquina inferior derecha a la esquina superior izquierda (esta ruta nos dice cómo se generan S 'y T').

Este proceso se puede resolver con un método retrospectivo. Considere comenzar desde 4. Se obtiene agregando una puntuación a las tres cuadrículas en la esquina superior izquierda. Luego podemos deducir fácilmente la puntuación de 4 y volver a la cuadrícula original para ver si es la misma que la puntuación real del cuadrícula. Si es el mismo, significa que 4 es de esta cuadrícula. El ejemplo de la figura siguiente muestra que solo es posible 4-1 = 3, por lo que es de 3.
Inserte la descripción de la imagen aquí

¿Es mejor el problema óptimo?

En aplicaciones prácticas, no necesariamente retrocedemos de acuerdo con el plan óptimo, sino que establecemos una probabilidad para cada dirección de decisión en función del puntaje y retrocedemos aleatoriamente en función de la probabilidad. La solución que se encuentra de esta manera no es necesariamente la solución óptima, sino una solución buena (subóptima). Por ejemplo, al escribir una palabra en un método de entrada, el usuario puede tener un sesgo de memoria y la solución óptima puede no ser necesariamente la palabra que el usuario desea escribir. Bajo un esquema de puntuación problemático, no tiene sentido encontrar el mejor. Agrupamos múltiples decisiones basadas en probabilidades, y el centro del grupo es el esquema de alineación óptimo.

Como se muestra en el círculo de abajo, es posible caminar en diagonal y hacia arriba.Inserte la descripción de la imagen aquí

para resumir

  • Para el problema de la alineación de secuencias en la programación dinámica, el primer punto es pensar en cómo transformarlo en un problema de toma de decisiones de varios pasos. En este artículo, se utiliza el problema original de cómo alinear S y T en S se deriva de T, y se enumeran tres casos posibles respectivamente. La división de estos tres casos se basa en el cambio de los subíndices recursivos de S y T y, al mismo tiempo, 1 (coincidencia), S-1 (insertar), T-1 (eliminar).
  • Después de dividir la base, hay tres direcciones de toma de decisiones diferentes: cómo elegir la dirección de toma de decisiones es la característica de la programación dinámica y la búsqueda de la solución óptima.
  • Cómo inicializar y escribir el límite del estado.

Supongo que te gusta

Origin blog.csdn.net/qq_32505207/article/details/108037011
Recomendado
Clasificación