La programación dinámica no es una construcción teórica que se limite a los trabajos científicos. Es popular en muchas áreas aplicadas. Hay muchas de ellas: matemáticas aplicadas, ingeniería mecánica, teoría de control o pronóstico de datos financieros. Pero nos detendremos en una: la bioinformática.
Los científicos en este campo se dedican a "digitalizar" material biológico, así como a almacenar y analizar la información obtenida. Esta ciencia tiene cientos de aspectos fascinantes y plantea desafíos muy serios a los desarrolladores, ya que hay una cantidad increíble de datos. Por ejemplo, el genoma humano tiene alrededor de tres mil millones de pares de nucleótidos (los bloques de construcción del ADN). Por lo general, un par se codifica en un byte, lo que resulta en alrededor de tres mil millones de bytes de información para un solo genoma, tres gigabytes de datos para una sola persona.
Un solo genoma no presenta problemas graves, pero los genomas en sí mismos no son muy interesantes: para detectar mutaciones en el genoma de una persona en particular, primero debe "alinear" ese genoma con otros genomas de referencia (que ya están alineados y anotados). Puede haber muchas opciones posibles para esta alineación, pero debe encontrar la más probable. Por ejemplo, la opción con el menor número de mutaciones. Si tenemos en cuenta que el código genético generalmente se almacena como cadenas muy largas de diferentes letras, el ejemplo de la distancia de Levenshtein comienza a cobrar vida. Este problema, que potencialmente lleva a una explosión combinatoria (como probar todas las combinaciones posibles de caracteres para descifrar una contraseña), se resuelve maravillosamente con métodos de programación dinámica.
Si está interesado, lea sobre el
Alineamiento Múltiple de Secuencias (MSA)Este es solo un ejemplo. La bioinformática vive y respira programación dinámica: aquí hay algunos ejemplos más: