Programación dinámica

Documentos relacionados
Algoritmos y Estructuras de Datos Curso 06/07. Ejercicios

Análisis de algoritmos

Análisis de Algoritmos

Algoritmos glotones. mat-151

Teoría de grafos y optimización en redes

Introducción a la Programación Dinámica. El Problema de la Mochila

Para las ecuaciones diferenciales ordinarias no lineales no existen métodos generales.

Problemas de Recursividad

Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013


Algoritmos y programas. Algoritmos y Estructuras de Datos I

PRIMER SIMPOSIO LATINOAMERICANO PARA LA INTEGRACIÓN DE LA TECNOLOGÍA EN EL AULA DE MATEMÁTICAS Y CIENCIA. 9, 10 y 11 de julio

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

La segunda observación permite reformular el problema de una manera más simple:

Ruta más Corta con una sóla Fuente de Inicio (Single-Source Shortest Paths) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE

El TAD Grafo. El TAD Grafo

Profesor(a): M. A. Zeferino Galarza Hernández

C a l ses P P y y NP C a l se P C a l se N P N P [No N n o -De D te t rmin i i n s i ti t c i Polynomial-tim i e]

Precálculo 1 - Ejercicios de Práctica. 1. La pendiente de la línea (o recta) que pasa por los puntos P(2, -1) y Q(0, 3) es:

UNIDAD 6.- PROGRAMACIÓN LINEAL

Coordenadas de un punto

La representación gráfica de una función cuadrática es una parábola.

NOTACIÓN O GRANDE. El análisis de algoritmos estima el consumo de recursos de un algoritmo.

Programación. Tema 8: Tablas Hash. Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el????

TEMA 3: PROGRESIONES

Programación dinámica p. 1

1. Conceptos básicos sobre el problema en cuestión y cuestiones afines. 2. Formulación de los correspondientes algoritmos y su pseudocódigo.

Introducción a la programación lineal

Materia: Matemática de Tercer Año Tema: Pendiente

PENDIENTE MEDIDA DE LA INCLINACIÓN

MATHEMATICA. Geometría - Triángulos. Ricardo Villafaña Figueroa. Ricardo Villafaña Figueroa. Material realizado con Mathematica y Geometry Expressions

INTRODUCCIÓN DEL TEMA 2 ESPACIOS VECTORIALES

3. Técnicas de diseño de algoritmos

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Materia: Matemáticas de 4to año. Tema: Logaritmos naturales y base 10. Marco Teórico

Carrera: INB Participantes. Representante de las academias de ingeniería industrial de. Academias Ingeniería Industrial.

LAS CIENCIAS DE LA PLANIFICACIÓN

FUNCIONES REALES DE VARIABLE REAL.

UNIDAD V: ARR R EGL G OS O BIDI D MENS N IONALE L S

Chapter Audio Summary for McDougal Littell Algebra 2

Algoritmos. Diseño de algoritmos por inducción. Alberto Valderruten. Dept. de Computación, Universidade da Coruña

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

1 SITÚA LOS PUNTOS. Mide las coordenadas de cada punto desde O. X positivo del punto 3. Z positivo del punto 3. Y positivo del punto 3

Introducción a la Teoría de Grafos

Jueves, 30 de abril. Ejemplo de recursión. Ejemplo de PD. Ejemplo de programación dinámica. Programación dinámica

PROGRAMACIÓN LINEAL PROGRAMACIÓN LINEAL.

Capítulo 1. Algoritmos, diagramas de flujo y programas.

ELEMENTOS DE GEOMETRÍA ANALÍTICA

UNIVERSIDADES PÚBLICAS DE LA COMUNIDAD DE MADRID PRUEBA DE ACCESO A LAS ENSEÑANZAS UNIVERSITARIAS OFICIALES DE GRADO MATERIA: DIBUJO TÉCNICO II

f: D IR IR x f(x) v. indep. v. dependiente, imagen de x mediante f, y = f(x). A x se le llama antiimagen de y por f, y se denota por x = f -1 (y).

A RG. Pirámide recta de base cuadrada y altura 50 mm. Pirámide oblicua de base triangular. Pirámide oblicua de base triángulo equilátero

Hoja de ejercicios del Tema 3

PENDIENTE MEDIDA DE LA INCLINACIÓN

EJERCICIOS RESUELTOS DE INTEGRAL DEFINIDA

Alonso Ramírez Manzanares Computación y Algoritmos 10.03

Una sucesión infinita es una función cuyo dominio es el conjunto de los enteros positivos. Podemos denotar una sucesión como una lista

Tema 3: El Método Simplex. Algoritmo de las Dos Fases.

Volumen de Sólidos de Revolución

Matemáticas. Si un error simple ha llevado a un problema más sencillo se disminuirá la puntuación.

Descripción: dos. función. decreciente. Figura 1. Figura 2

3. La circunferencia.

PROGRAMACIÓN LINEAL. Su empleo es frecuente en aplicaciones de la industria, la economía, la estrategia militar, etc.

6.1.- Introducción a las estructuras de datos Tipos de datos Arrays unidimensionales: los vectores Operaciones con vectores.

AYUDAS SOBRE LA LINEA RECTA

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

Introducción al tipo Vector Cómo guardar una colección de datos conceptualmente relacionados? - almacenar los 100 primeros números primos, - al

greedy (adj): avaricioso, voraz, ávido, codicioso, glotón

Geometría combinatoria de cuadrados mágicos, latinos, sudokus y otras tablas curiosas

Función lineal Ecuación de la recta

SÍLABO DE MATEMÁTICA I

Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos

UNIDAD II. VARIACION DIRECTAMENTE PROPORCIONAL Y FUNCIONES LINEALES

PROBLEMA 1. Considere el siguiente problema de programación lineal:

Soluciones oficiales Clasificación Olimpiada Nacional Nivel Mayor

1.- Para cada uno de los siguientes problemas escribir el diagrama de flujo y el pseudocódigo de un programa que lo resuelva:

La eficiencia de los programas

FUNCIONES CUADRÁTICAS

Grafomotricidad inicial 1

Representaciones gráficas: Método del Paralelogramo

Tema: Los Grafos y su importancia para la optimización de redes.

Algoritmos y solución de problemas. Fundamentos de Programación Otoño 2008 Mtro. Luis Eduardo Pérez Bernal

La lección de hoy es sobre cómo encontrar el Punto Medio de un Segmento. Es cuál es la expectativa para el aprendizaje del estudiante CGT.5.G.1.

Distorsión dinámica temporal Búsqueda Algoritmos de búsqueda gráfica Algoritmos de programación dinámicos

Programa de teoría. Algoritmos y Estructuras de Datos II. 3. Algoritmos voraces. 1. Análisis de algoritmos 2. Divide y vencerás

LA FUNCIÓN LINEAL: Ecuaciones y aplicaciones de la línea recta.

ÁLGEBRA VECTORIAL Y MATRICES. Ciclo 02 de Circunferencia.

Cuerpos Geométricos. 100 Ejercicios para practicar con soluciones. 1 Indica cuáles de las siguientes figuras son prismas y cuáles son pirámides.

Capítulo 2: Inducción y recursión Clase 2: El principio de Inducción Fuerte

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

PAU Madrid. Matemáticas II. Año Examen modelo. Opción A. Ejercicio 1. Valor: 2 puntos.

Ecuaciones Lineales en Dos Variables

Estadística para la toma de decisiones

Introducción a la programación

IES Fco Ayala de Granada Sobrantes de 2011 (Modelo 4) Soluciones Germán-Jesús Rubio Luna

Se desea estudiar el comportamiento de una función a medida independiente x se aproxima a un valor específico.

GPRNV003F2-A16V1. La Caída

Transcripción:

Parte de Algoritmos de la asignatura de Programación Master de Bioinformática Programación dinámica Web asignatura: http://dis.um.es/~domingo/algbio.html E-mail profesor: domingo@um.es Transparencias preparadas a partir de las del curso de Algoritmos y Estructuras de Datos II, del Grado de Ingeniería Informática y An Introduction to Bioinformatics Algorithms

Método general La programación dinámica se suele utilizar en problemas de optimización, donde una solución está formada por una serie de decisiones. Resuelve el problema original combinando las soluciones para subproblemas más pequeños. Se almacenan los resultados de los subproblemas en una tabla, calculando primero las soluciones para los problemas pequeños, y llegando hasta el tamaño deseado con un proceso iterativo. Con esto se pretende evitar la repetición de cálculos para problemas más pequeños.

Método general Ejemplo. Cálculo de los números de Fibonacci. Con método recursivo Fibonacci (n: integer) Si n< Devolver Sino Devolver Fibonacci (n-) + Fibonacci (n-) Problema: Muchos cálculos están repetidos, tiempo de ejec. exponencial. Solución: Calcular los valores de menor a mayor empezando por, e ir guardando los resultados en una tabla. Con programación dinámica. Fibonacci (n: integer) T[] = ; T[] = para i =,,...,n T[i] = T[i-] + T[i-] devolver T[n] Se utiliza la misma fórmula que en la versión anterior, pero de forma más inteligente. El tiempo de ejecución es Θ(n).

Método general Aspectos a definir en un algoritmo de programación dinámica: Ecuación recurrente, para calcular la solución de los problemas grandes en función de los problemas más pequeños. Determinar los casos base. Definir las tablas utilizadas por el algoritmo, y cómo se rellenan. Cómo se recompone la solución global a partir de los valores de las tablas. 4

Análisis de tiempos de ejecución El tiempo de ejecución depende de las características concretas del problema a resolver. En general, será de la forma: Tamaño de la tabla*tiempo de rellenar cada elemento de la tabla. Un aspecto importante de los algoritmos de programación dinámica es que necesitan una tabla para almacenar los resultados parciales, que puede ocupar mucha memoria. Además, algunos de estos cálculos pueden ser innecesarios.

Problema del cambio de monedas Problema: Dado un conjunto de n tipos de monedas, cada una con valor v i, y con una cantidad de monedas de ese tipo c i, y dada una cantidad P, encontrar el número mínimo de monedas que tenemos que usar para obtener esa cantidad. El algoritmo voraz es muy eficiente, pero sólo funciona en un número limitado de casos. Utilizando programación dinámica: Definimos el problema en función de problemas más pequeños. Determinar los valores de los casos base. Definimos las tablas necesarias para almacenar los resultados de los subproblemas. Establecemos una forma de rellenar las tablas y de obtener el resultado. 6

Problema del cambio de monedas Definición de la ecuación recurrente: Cambio (i, Q), el problema de calcular el número mínimo de monedas necesario para devolver una cantidad Q, usando los i primeros tipos de monedas (es decir los tipos...i). La solución de Cambio(i, Q) puede que utilice k monedas de tipo i o puede que no utilice ninguna. Si no usa ninguna moneda de ese tipo: Cambio(i, Q) = Cambio(i -, Q) Si usa k monedas de tipo i: Cambio(i, Q) = Cambio(i, Q k*v i ) + k En cualquier caso, el valor será el mínimo: Cambio(i, Q) = min k=,,...,min{q/vi,ci} {Cambio(i-, Q-k* v i )+k} Casos base: Cambio(i, Q) Si (i ) o (Q<) entonces no existe ninguna solución al problema, y Cambio(i, Q) = +. En otro caso para cualquier i>, Cambio(i, ) =. 7

Problema del cambio de monedas Definición de las tablas utilizadas: Necesitamos almacenar los resultados de todos los subproblemas. El problema a resolver será: Cambio (n, P). Por lo tanto, necesitamos una tabla de nxp, de enteros, que llamaremos D, siendo D[i, j ]= Cambio(i, j). Ejemplo. n=, P= 8, v= (, 4, 6), no límite en c D Cantidad a devolver Monedas 4 6 7 8 C= C = 4 C = 6 Forma de rellenar las tablas: De arriba hacia abajo y de izquierda a derecha, aplicar la ecuación de recurrencia: D[i, j] = min k=,,...,min{q/vi,ci} {D(i-, Q-k* v i )+k} 8

Algoritmo. Problema del cambio de monedas Devolver-cambio (P: int; V: array [..n] of int; C: array [..n] of int; var D: array [..n,..p] of int); para i =,,...,n D[i, ] = para i =,,...,n para j =,,...,P {Tener en cuenta si el valor } D[i, j] = min k=,,...,min{q/vi,ci} {D(i-, Q-k* v i )+k} { cae fuera de la tabla} Ejemplo. n=, P= 8, v= (, 4, 6), no límite en c 4 6 7 8 C= 4 6 7 8 C = 4 4 C = 6 9

Problema del cambio de monedas Cómo calcular cuántas monedas de cada tipo deben usarse, es decir la solución (x, x,..., x n )? Se usa otra tabla de decisiones tomadas: Aux 4 6 7 8 C = 4 6 7 8 C = 4 C = 6 Algoritmo para obtener una solución: para i=n,n-,..., x i =Aux[i,P] P=P-x i *v i Hacer un programa Perl para este problema.

Programación dinámica en Bioinformática Interesa conocer la similaridad entre genes, o de varios genes con determinadas cadenas. La Programación Dinámica se usa para estudiar similaridad entre genes. Veremos el algoritmo de Mayor Subcadena Común (Longest Common Subsequence, LCS) trabajo individual (6 puntos en la calificación final): a partir de la explicación y el programa del LCS: seleccionar otro de los algoritmos de programación dinámica del libro, explicar su uso en bioinformática, explicar el funcionamiento del algoritmo, programarlo y evaluar el funcionamiento

Problema de la Distancia de Manhattan Buscamos un camino del Origen al Destino con el que podamos visitar la mayo cantidad de atracciones (*). Solo se puede andar a la derecha y abajo. Origen * * * * * * * * * * * * Destino

Problema de la Distancia de Manhattan Se quiere encontrar el camino de longitud mayor en una malla con pesos Entrada: Una malla con pesos G con dos vértices distinguidos, Origen y Destino Salida: Un camino en G de longitud máxima para ir del Origen al Destino

Problema de la Distancia de Manhattan origen 4 4 4 9 Coordenada j 4 Coordenada i 4 6 7 4 9 4 4 6 8 4 4 destino

Problema de la Distancia de Manhattan Cómo podría ser un algoritmo de avance rápido para este problema? Se obtendría la solución óptima? Qué tiempo de ejecución tendría? Cómo podría ser un algoritmo por backtracking para este problema? Se obtendría la solución óptima? Qué tiempo de ejecución tendría?

Problema de la Distancia de Manhattan j i S, = S, = Para hacerlo por Programación Dinámica: Calcular el peso del camino óptimo para cada vértice de la malla En cada vércice el peso es el máximo del de los vértices anteriores sumado con el peso de la arista que los une 6

MTP: Dynamic Programming (cont d) source j i S, = - 4 S, = 4 8 S, = 8 7

MTP: Dynamic Programming (cont d) source j i 8 S, = 8-4 S, = 8-9 S, = 9 8 S, = 8 8

MTP: Dynamic Programming (cont d) source j 8 i - - - 4-8 S, = 8 8-9 S, = 8 greedy alg. 9 S, = 9 9

MTP: Dynamic Programming (cont d) source j 8 i - - - 4 8-8 - 9 - S, = 8 9 9 S, = 9

MTP: Dynamic Programming (cont d) source j i 8 - Done! - - 4 8 - (showing all back-traces) 8-9 - 8 9 9 6 S, = 6

Problema de la Distancia de Manhattan Se utiliza una ecuación de recurrencia para calcular el valor en cada punto: s i, j = max s i-, j + peso de la arista entre (i-, j) y (i, j) s i, j- + peso de la arista entre (i, j-) y (i, j) El tiempo de ejecución es n x m Y la solución que se obtiene es óptima

Problema de la Secuencia Común más Larga (LCS) Dadas dos secuencias v = v v v m y w = w w w n La LCS de v y w es una secuencia de posiciones en v: < i < i < < i t < m y otra secuencia de posiciones en w: < j < j < < j t < n tal que la i t -sima letra de v es igual a la j t -sima letra de w y t es máximo

Problema de la Secuencia Común más Larga (LCS) Coord. i: elements of v elements of w Coord. j: 4 6 7 8 A T -- C -- T G A T C -- T G C A T -- A -- C 4 6 6 7 (,) (,) (,) (,) (,) (,4) (4,) (,) (6,6) (7,6) (8,7) Posiciones de v: < < 4 < 6 < 8 Las coincidencias en rojo Posiciones de w: < < < 6 < 7 Cada subsecuencia común es un camino en la malla 4

Problema de la Secuencia Común más Larga (LCS) Queremos encontrar la LCS de dos cadenas Entrada: Un grafo con pesos G con dos vértices distinguidos, Origen y Destino. Hay aristas en horizontal, vertical y diagonal, con peso las verticales y horizontales y las diagonales si coincide el carácter Salida: El camino más largo en la malla para ir del Origen al Destino

Problema de la Secuencia Común más Larga (LCS) i T G C A T A C 4 6 7 j A T C T G A T C 4 6 7 8 Cada camino es una subsecuencia común. Cada elemento añade un carácter a la subsecuencia común. Problema LCS: Encontrar un camino con el máximo número de diagonales. 6

Problema de la Secuencia Común más Larga (LCS) La ecuación de recurrencia es: s i, j = max s i-, j s i, j- s i-, j- + si v i = w j Analizar el programa LCS.pl y explicar cómo se ha implementado el algoritmo, cómo se obtiene la subsecuencia y cuál es el coste del tiempo de ejecución. 7