Programación II. Mario Aldea Rivas Programación II 05/05/11 1

Documentos relacionados
Programación II. Mario Aldea Rivas Programación II 05/04/11 1. Tema 5. Algoritmos voraces, heurísticos y aproximados

Programación II. Mario Aldea Rivas Programación II 09/05/11 1

Estado 3.2 (coste = 9)

Conceptos de Algoritmos, Datos y Programas

Este método se basa en buscar el elemento menor el vector y colocarlo en la primera

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

Programación II. Mario Aldea Rivas Programación II 14/04/11 1

Planificaciones Algoritmos y Programación II. Docente responsable: CALVO PATRICIA MABEL. 1 de 6

UNIVERSIDAD AUTÓNOMA DE YUCATÁN FACULTAD DE MATEMÁTICAS

DISTRIBUCIÓN HORARIA DE LA ASIGNATURA SEGÚN NORMATIVA

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

Nº DISPOSICIÓN:... DEPARTAMENTO DE: Ciencias Básicas CARRERA/S: Licenciatura en Sistemas de Información

ALGORITMOS, ESTRUCTURAS Y PROGRAMACION

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

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]

Nombre de la asignatura: Diseño Estructurado de Algoritmos. Carrera: Ingeniería en Sistemas Computacionales. Clave de la asignatura: SCB-9316

Estructuras de datos: Conjuntos disjuntos

Procesadores de lenguaje Tema 6 La tabla de símbolos

UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA FACULTAD DE CIENCIAS PROGRAMA DE MATEMÁTICAS PLAN DE ESTUDIOS

DATOS DE IDENTIFICACIÓN DEL CURSO

GUÍA DOCENTE TITULACIONES DE GRADO

RELACIÓN DE PROBLEMAS DE CLASE DE PROGRAMACIÓN LINEAL ENTERA

Planificaciones Algoritmos y Programación I. Docente responsable: AZCURRA DIEGO ANDRES. 1 de 5

2007/ PROGRAMACIÓN. Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS. 1.-Introducción.

PLANIFICACIÓN DE LA DOCENCIA UNIVERSITARIA GUÍA DOCENTE INTRODUCCIÓN Y TEORÍA DE LA COMPUTACIÓN

Carrera: DCH PARTICIPANTES. Representantes de las academias de Ingeniería en desarrollo comunitario de los Institutos Tecnológicos

Programación Dinámica 1

4ta. Práctica. Búsqueda en árbol con contrincante: MiniMax con poda Alfa-Beta. Inteligencia Artificial Prácticas 2004/2005

Análisis de algoritmos

SÍLABO DE BASE DE DATOS I

PROGRAMA DE CURSO. Metodologías de Diseño y Programación. Nombre en Inglés. Design and Programming Methodologies.

OPTIMIZACIÓN Y SIMULACIÓN PARA LA EMPRESA. Tema 4 Optimización no Lineal

UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA VICERRECTORADO ACADÉMICO COORDINACION DE PRE-GRADO PROYECTO DE CARRERA DE INGENIERIA INDUSTRIAL

ÍNDICE INTRODUCCIÓN...13

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

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

PROGRAMACION CUADRATICA

Sistemas de ecuaciones lineales

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

Guía práctica de estudio 03: Algoritmos

Análisis y síntesis de sistemas digitales combinacionales

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

DIPLOMADO. Evaluación de la Calidad de la práctica docente para la implementación del Nuevo Modelo Educativo en Escuelas de Ingeniería del I.P.N.

Pasos en el Método Simplex

Introducción a la Computación (para Matemática) Primer Cuatrimestre de 2015

PROGRAMACIÓN DINÁMICA. Idalia Flores

Resolución de problemas de búsqueda

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE ESTUDIOS SUPERIORES ACATLÁN LICENCIATURA EN MATEMÁTICAS APLICADAS Y COMPUTACIÓN

Estrategias de Diseño de Algoritmos

: Algorítmica y Estructura de Datos I

Instituto tecnológico de Minatitlán. Investigación de operaciones Ing. Erika Lissette Minaya mortera Unidad 3: programación no lineal

ESTRUCTURAS DE DATOS

3. Técnicas de diseño de algoritmos

FACULTAD DE INGENIERÍA DEPARTAMENTO DE TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIONES

PROGRAMA INSTRUCCIONAL

PLE: Ramificación y Acotamiento

Pontificia Universidad Católica del Ecuador

TEMA 3: PROGRESIONES

ESCUELA SUPERIOR POLITECNICA DEL LITORAL PROGRAMA DE ESTUDIOS

Programación Estructurada

UNIDAD 6.- PROGRAMACIÓN LINEAL

Semana de las Matemáticas e Ingeniería. Desarrollo de algoritmos recursivos empleando la aplicación PseInt

Tema 5: Análisis de Sensibilidad y Paramétrico

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

INSTITUTO POLITÉCNICO NACIONAL SECRETARÍA ACADÉMICA DIRECCIÓN DE ESTUDIOS PROFESIONALES EN INGENIERÍA Y CIENCIAS FÍSICO MATEMÁTICAS

Carrera: Licenciatura en Sistemas. Materia: Programación de computadoras. Profesor Asociado: Cdor. Héctor A. Carballo

NOMBRE DE LA ASIGNATURA: MÉTODOS CUANTITATIVOS PARA ADMINISTRACIÓN. ESCUELA: DEPARTAMENTO: ADMINISTRACIÓN

INSTITUTO POLITÉCNICO NACIONAL SECRETARÍA ACADÉMICA DIRECCIÓN DE ESTUDIOS PROFESIONALES EN INGENIERÍA Y CIENCIAS FÍSICO MATEMÁTICAS

Estructura de datos. Carrera: SCC Participantes

Pontificia Universidad Católica del Ecuador

UNIDAD DIDACTICA. Esta unidad es el punto de partida para la correcta asimilación de las posteriores unidades didácticas del módulo.

Preparatoria Sor Juana Inés de la Cruz Cálculo Diferencial Tutorial: Optimización Ing. Jonathan Quiroga Tinoco

TÉCNICO UNIVERSITARIO EN COMPUTACIÓN E INFORMÁTICA GUÍA DE ESTUDIO ANÁLISIS Y DISEÑO DE ALGORITMOS I CÓDIGO Elaborada por Kay Guillén Díaz

IN Guía de Problemas Resueltos de Geometría de Programación Lineal v1.0

OPTIMIZACIÓN VECTORIAL

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS FACULTAD DE INGENIERÍA PROYECTO CURRICULAR DE INGENIERÍA INDUSTRIAL

INSTITUTO POLITÉCNICO NACIONAL SECRETARIA ACADEMICA DIRECCIÓN DE ESTUDIOS PROFESIONALES EN INGENIERÍA Y CIENCIAS FÍSICO MATEMÁTICAS

PROGRAMACIÓN NO LINEAL INTRODUCCIÓN

Universidad Tec Milenio: Profesional IO04001 Investigación de Operaciones I. Tema # 9

Breve introducción a la Investigación de Operaciones

GRADO EN ADE CURSO

Redes de Computadores Asignatura obligatoria. 2º Ingeniería Técnica en Informática de Gestión

UNIVERSIDAD AUTONOMA DE BAJA CALIFORNIA DIRECCION GENERAL DE ASUNTOS ACADEMICOS PROGRAMA DE ASIGNATURA

Introducción a las RdP. Optimización basada en redes de Petri. Redes de Petri. Son objeto de estudio: RdP. Ejemplos:

Tema 2 Introducción a la Programación en C.

INVESTIGACIÓN OPERATIVA

PROGRAMA DE ESTUDIO : UN SEMESTRE ACADÉMICO : TERCER AÑO, PRIMER SEMESTRE

Universidad Central Del Este U C E Facultad de Ciencias y Humanidades Escuela de Pedagogía Mención Ciencias Físicas y Matemática

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

Programación I. Carrera: ECM Participantes Participantes de las academias de ingeniería electrónica de los Institutos Tecnológicos.

Ecuaciones Diofánticas

TÉCNICO SUPERIOR UNIVERSITARIO EN TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN ÁREA SISTEMAS INFORMÁTICOS.

Con miras a conocer la metodología que se aplica en el Método SIMPLEX, tenemos a continiacion un ejemplo:

Tema 2: Diseño y Construccion de Sistemas de Ayuda a la Decision

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO. Facultad de Ciencias. Plan de estudios de la Licenciatura en Actuaría. Teoría de Redes

Complejidad de los Algoritmos

Algoritmos glotones. mat-151

Diseño Estructurado de Algoritmos

Ubicación de la asignatura. Propósito de la asignatura. Desarrollando proyectos. Asignaturas relacionadas. Una mirada hacia la optimización económica

EL PROBLEMA DE TRANSPORTE

Transcripción:

Programación II Bloque temático 1. Lenguajes de programación Bloque temático 2. Metodología de programación Bloque temático 3. Esquemas algorítmicos Tema 4. Introducción a los Algoritmos Tema 5. Algoritmos voraces, heurísticos y aproximados Tema 6. Divide y Vencerás Tema 7. Ordenación Tema 9. Vuelta atrás Tema 10.Ramificación y poda Tema 11.Introducción a los Algoritmos Genéticos Tema 12.Elección del esquema algorítmico Programación II 05/05/11 1 8.1. Introducción a la Programación Dinámica 8.2. Utilización de la Programación Dinámica 8.3. Algoritmo para dar cambio 8.4. Bibliografía Programación II 05/05/11 2 8.1 Introducción a la Programación Dinámica 8.1 Introducción a la Programación Dinámica PD (Dynamic Programming) es un esquema algorítmico que se basa en la utilización de una tabla con soluciones parciales la tabla se va llenando con las soluciones de los subcasos - empezando por los subcasos más pequeños y construyendo con ellos los grandes hasta llegar al caso que se desea resolver suelen ser algoritmos temporalmente eficientes aunque con requerimientos de memoria adicional elevados PD puede superar en eficiencia a DyV ya que evita repetir cálculos no recalcula resultados parciales (se sacan de la tabla) PD puede resolver problemas sin solución óptima con voraces puesto que las decisiones no se toman a ciegas sino considerando todos los subcasos Programación II 05/05/11 3

En general, la programación dinámica se puede aplicar en los mismos casos en que utilizaríamos un algoritmo voraz para resolver problemas de optimización - minimizar o maximizar, bajo determinadas condiciones, el valor de una función: f(x 1,x 2,..,x n )=c 1 x 1 +c 2 x 2 +..+c n x n en los que se cumple el principio de optimalidad (basta con que se cumpla de una forma menos estricta que para los voraces) Principio de optimalidad relajado : la solución óptima de un problema es una combinación de soluciones óptimas de algunos de sus subcasos la PD resuelve todos los subcasos, lo que nos permite identificar los que conducen a la solución óptima en voraces puede no ser posible identificar esos subcasos por que no existe la función de selección apropiada Programación II 05/05/11 4 Diseño de algoritmos de programación dinámica Se realiza en los siguientes pasos: 1.Verificar que la solución puede alcanzarse a partir de una sucesión de decisiones y que ésta cumple el principio de optimalidad 2.Encontrar una expresión recursiva para la solución 3.Utilizar la expresión recursiva para rellenar la tabla de soluciones parciales hasta encontrar la solución óptima al problema planteado 4.Reconstruir la solución desandando sobre la tabla el camino que nos ha llevado a la solución óptima Programación II 05/05/11 5 Este mismo problema ya le resolvimos con un algoritmo voraz, pero no siempre obtenía la solución óptima, p.e.: Dar cambio con el antiguo sistema monetario ingles - corona (30p), florín (24p), chelín (12p), 6p, 3p, penique Solución del algoritmo voraz para 48p: 30p+12p+6p - solución óptima: 24p+24p El problema verifica el principio de optimalidad: si la solución óptima para una cantidad c contiene la moneda m (de valor v m ) se verifica que la solución óptima para c es una moneda m más la solución óptima para c-v m El algoritmo basado en programación dinámica que vamos a ver siempre obtiene la solución óptima Programación II 05/05/11 6

Supongamos que deseamos cambiar una cantidad de ccambiar unidades en un sistema monetario que tiene M monedas de valores v m (0 m M-1) (p.e.: M=3 y v 0 =1, v 1 =4, v 2 =6) Para resolver el problema mediante programación dinámica crearemos una tabla tabla[0..m-1, 0..cCambiar] tabla[m,c] representa el número mínimo de monedas de tipo m o menor necesario para devolver una cantidad c - p.e.: tabla[1,7] es 4 (una moneda de v 1 =4 y tres de v 0 =1) Debemos idear una expresión recursiva que nos permita construir la tabla, así, para tabla[m,c] elegiremos el mínimo de: - no utilizar monedas de valor v m, en ese caso: tabla[m,c]=tabla[m-1,c] - o incluir una moneda de valor v m, en ese caso: tabla[m,c]=1+tabla[m,c-v m ] Programación II 05/05/11 7 De lo anterior, junto con las condiciones de contorno, se obtiene la expresión recursiva que nos permite calcular la tabla: tabla[ m, c] 0 si c = 0 c si m = 0 = tabla[ m 1, c] si v m > c min( tabla[ m 1, c], 1 + tabla[ m, c v m ]) en otro caso P.e. para el conjunto de tres monedas v 0 =1, v 1 =4 y v 2 =6 y ccambiar=8 la tabla tabla[0..2,0..8] será: Valor cantidad a cambiar moneda 0 1 2 3 4 5 6 7 8 v 0 =1 0 1 2 3 4 5 6 7 8 v 1 =4 0 1 2 3 1 2 3 4 2 v 2 =6 0 1 2 3 1 2 1 2 2 Número de monedas a devolver Programación II 05/05/11 8 Para obtener las monedas a devolver: comenzamos en la última posición: m=m-1 y c=ccambiar si tabla[m,c] == tabla[m-1,c] - la solución no incluye ninguna moneda de tipo m y pasamos a la posición tabla[m-1,c] sino (tabla[m,c] == 1+tabla[m,c-v m ]) - se incluye en la solución una moneda de tipo m y pasamos a la posición tabla[m,c-v m ] se continua de esta manera hasta alcanzar la fila 0 - se añade al cambio tabla[0,c] monedas y se finaliza Valor cantidad a cambiar moneda 0 1 2 3 4 5 6 7 8 v 0 =1 0 1 2 3 4 5 6 7 8 v 1 =4 0 1 2 3 1 2 3 4 2 v 2 =6 0 1 2 3 1 2 1 2 2 Programación II 05/05/11 9

Implementación método creatabla(entero ccambiar, entero[0..m-1] v) retorna entero[0..m-1, 0..cCambiar] entero[0..m-1, 0..cCambiar] tabla desde m:=0 hasta M-1 hacer desde c:=0 hasta ccambiar hacer si c==0 => tabla[m,c] := 0 m==0 => tabla[m,c] := c c < v[m] => tabla[m,c] := tabla[m-1,c] en otro caso => tabla[m,c] := min(tabla[m-1,c], 1+tabla[m,c-v[m]]) fsi retorna tabla fmétodo Programación II 05/05/11 10 método dacambio(entero[0..m-1] v, entero[0..m-1,0..ccambiar] tabla) retorna entero[0..m-1] entero[0..m-1] cambio m=m-1 c=ccambiar mientras m!=0 hacer si tabla[m,c] == tabla[m-1,c] entonces m-- sino cambio[m]++ c = c - v[m]; fsi cambio[0] = tabla[0,c] retorna cambio fmétodo Implementación (cont.) Programación II 05/05/11 11 Prestaciones Eficiencia temporal del algoritmo creatabla: el bucle externo se hace M veces y el interno ccambiar+1 veces luego su eficiencia es O(M ccambiar) Eficiencia temporal del algoritmo dacambio: ir desde la fila M-1 hasta la 0: M pasos ir desde la columna ccambiar hasta la 0: tantos pasos como monedas hay en la solución (cambio[m-1,ccambiar]) luego su eficiencia es O(M+cambio[M-1,cCambiar]) Sus requerimientos de memoria son O(M ccambiar) (la tabla) La eficiencia temporal del voraz también era O(M ccambiar) - con mejores requerimientos de memoria: O(1) - pero no es óptimo para algunos conjuntos de monedas Programación II 05/05/11 12

8.4 Bibliografía 8.4 Bibliografía [1] Brassard G., Bratley P., Fundamentos de algoritmia. Prentice Hall, 1997. [2] Aho A.V., Hopcroft J.E., Ullman J.D., Estructuras de datos y algoritmos. Addison-Wesley, 1988. [3] Sartaj Sahni, Data Structures, Algoriths, and Applications in Java. Mc Graw Hill, 2000 Programación II 05/05/11 13