¿Podría dar un algoritmo que calcule la puntuación máxima de la mejor alineación de secuencia (S ‘, T’) de S y T?

Esto suena como tarea, así que voy a discutir la alineación en general. Hay muchos recursos que ayudarán con la implementación si necesita escribir el código.

En la alineación de secuencia, hay dos categorías amplias: alineación local, global y semi-global. Local está buscando la mejor coincidencia de subsecuencia, global la mejor coincidencia de ambas secuencias en su totalidad, y semi-global encuentra la mejor coincidencia sin penalizar los huecos en los extremos de la alineación.

Su problema parece ser una alineación global. Para la alineación global, siempre puede usar un algoritmo de fuerza bruta, aunque tendrá un tiempo de ejecución exponencial. En cambio, se recomienda la programación dinámica. DP se basa en una fórmula recurrente y requiere un problema para tener la ‘subestructura óptima’, que es donde puede construir la solución a un problema si tiene la solución a sus subproblemas. Volviendo a la alineación global, hay un algoritmo DP para la alineación global llamado ‘algoritmo Needleman-Wunsch’, que ahora tiene O (nm) complejidad de tiempo y espacio para dos secuencias de longitud ny m.

Para la alineación local, el método más utilizado es el algoritmo Smith-Waterman. Las implementaciones de los algoritmos Needleman-Wunsch y Smith-Waterman son casi idénticas.

Como nota, estos algoritmos también se pueden usar para la alineación de la secuencia de proteínas si usa una matriz de sustitución diferente (es decir, BLOSUM o PAM250 para proteínas).

ps: El problema de alineación global puede acelerarse para tener una complejidad de tiempo sub-cuadrática, O (n ^ 2 / logn), usando la ‘Aceleración de cuatro rusos’.

pps: El problema de alineación global se puede hacer en espacio lineal utilizando el algoritmo de Hirschberg. Esto es divertido de implementar y solo requiere pensar qué valores en una tabla DP son necesarios para el próximo cálculo.

Fuente: https://www.cs.duke.edu/courses/…

A mí me parece un problema de tarea, así que no estoy dispuesto a dar una respuesta detallada. La mayoría de los algoritmos de alineación de secuencias son alguna variante de la programación dinámica. Busque una solución de programación dinámica para el problema de “subsecuencia común más larga” y vea si puede generalizar desde allí.

El giro con ignorar el comienzo de S y el final de T no es demasiado difícil de manejar. El primero implica cómo define sus casos base, y el segundo tiene que ver con dónde busca respuestas en su matriz de solución final.