Parte II. Algorítmica. 4. Programación dinámica.

Slides:



Advertisements
Presentaciones similares
Resolución aproximada de ecuaciones Ejemplos
Advertisements

Complejidad Computacional
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Inteligencia Artificial
Programación de Computadores
CARRERA: INGENIERIA CIVIL UNI-RUACS
Estructura de Datos Hugo Araya Carrasco Hugo Araya Carrasco.
Grupo 4 Matías Melgar Pablo Carbonell
Tema 1: Programación dinámica
Son problemas secuenciales: El problema se puede dividir en etapas. Definición: Método que permite determinar de manera eficiente las decisiones que optimizan.
5- Problemas de grandes dimensiones: descomposición
UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
Parte I. Estructuras de Datos.
Objetivos Específicos de la Unidad
E.D.O. de segundo orden no homogénea con coeficientes constantes Cuando.
Inteligencia Artificial Resolver problemas mediante búsqueda
Análisis y Diseño de Algoritmos
ECUACIONES EXPONENCIALES
Academia de Informática

Algoritmos.

Programación dinámica: Introducción
Parte I. Estructuras de Datos.
ALGORITMOS APROXIMADOS
Diseño y análisis de algoritmos
Parte II. Algorítmica. 3. Algoritmos voraces.
Fundamentos de programación Organización de una computadora.
Material de apoyo Unidad 4 Estructura de datos
Divide y vencerás 1. Método general.
Análisis de algoritmos
Backtracking 1. Método general. 2. Análisis de tiempos de ejecución.
Parte I. Estructuras de Datos.
4.  Métodos matemáticos.
Parte II. Algorítmica. 5. Backtracking. 1. Análisis de algoritmos.
CONCEPTOS BÁSICOS FUNDACIÓN UNIVERSITARIA LOS LIBERTADORES Fredys Alberto Simanca Herrera Programación Estructurada Semana Bogotá, D.C
ELO3201 Análisis de Algoritmos (Cont.) Agustín J. González ELO320 1º sem 2004.
Parte I. Estructuras de Datos.
SIG. LAURA VELAZQUEZ MORELOS. Hace referencia a un refrán que implica resolver un problema difícil, dividiéndolo en partes más simples tantas veces como.
Parte I. Estructuras de Datos.
Programación Matemática
M.C. Meliza Contreras González 1.  Es normal que un algoritmo se base en procedimientos auxiliares, haga llamadas recursivas para tamaños menores o reduzca.
Métodos de diseño de Algoritmos
Tema 11: Programación dinámica
Tema 12. Backtracking. 1. Método general.
Parte I. Estructuras de Datos.
Capítulo 6. ANÁLISIS DE ALGORITMOS
Tema 10: Algoritmos voraces
Parte I. Estructuras de Datos.
ELO3201 Análisis de Algoritmos (cont.) Agustín J. González ELO320 1º sem 2002.
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 2: Divide y Vencerás Unidad 1: Nociones básicas.
Diseño y análisis de algoritmos
Resolución de un sistema tres por tres Aplicando el método de Gauss.
Oscar F. Bedoya L. Fundamentos de análisis y diseño de algoritmos.
ALGORÍTMICA Ingeniería Técnica en Informática de Gestión y de Sistemas curso Teoría: Domingo Giménez Seminario C: José María Rodríguez Prácticas.
Computación I (CI-2125) Clase 2 Prof. Mireya Morales.
Elaboración de algoritmos usando lógica de programación
Escuela de Ciencias Basicas, Tecnología e Ingeniería
DISEÑAR Y ELABORAR ALGORITMOS Nombre: anayeli hernandez peralta Grado y grupo: 1 “3” Materia: Informática y computación Maestro: Ángel Buendía Turno: Vespertino.
DISEÑAR Y ELABORAR ALGORITMOS NOMBRE: LAURA PAEZ GARCIA GRADO Y GRUPO: 1 “3” MATERIA: INFORMÁTICA Y COMPUTACIÓN MAESTRO: ÁNGEL BUENDÍA TURNO: VESPERTINO.
Introducción a los TADs
1 Análisis Matemático II Presentaciones en el Aula TEMA 3 Otras herramientas para la resolución de EDO Autor: Gustavo Lores 2015 Facultad de Ingeniería.
* Cuando nos permite desarrollar un programa que necesitamos para tomar un conjunto de buenas prácticas para hacer eso. Esto se debe a que podemos ahorrar.
Números racionales Lorenzo Contreras Garduño Ago. 2015
Hernández Camacho Víctor Jesus Islas Sánchez Karla Vanessa
Algoritmos Computacionales
La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible.
Competencias y Capacidades del área de Matemática
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
Transcripción de la presentación:

Parte II. Algorítmica. 4. Programación dinámica. 1. Análisis de algoritmos. 2. Divide y vencerás. 3. Algoritmos voraces. 4. Programación dinámica. 5. Backtracking. 6. Ramificación y poda.

PARTE II: ALGORÍTMICA Programación dinámica. 4.1. Método general. 4.2. Análisis de tiempos de ejecución. 4.3. Ejemplos de aplicación. 4.3.1. Problema de la mochila 0/1. 4.3.2. Problema del cambio de monedas.

Método general. La base de la programación dinámica es el razonamiento inductivo: ¿cómo resolver un problema combinando soluciones para problemas más pequeños? La idea es la misma que en divide y vencerás... pero aplicando una estrategia distinta.

4.1. Método general. Ejemplo. Cálculo de los números de Fibonacci. 1 Si n ≤ 2 F(n-1) + F(n-2) Si n > 2 Con divide y vencerás. operación Fibonacci (n: entero): entero si n≤2 entonces devolver 1 sino devolver Fibonacci(n-1) + Fibonacci(n-2) Con programación dinámica. T[1]:= 1; T[2]:= 1 para i:= 3, …, n hacer T[i]:= T[i-1] + T[i-2] devolver T[n] F(n) =

4.1. Método general. Los dos usan la misma fórmula recursiva, aunque de forma distinta. ¿Cuál es más eficiente? Con programación dinámica: Θ(n) Con divide y vencerás: F(n-2) F(n-3) F(n-4) F(n-1) F(n) F(n-5) F(n-6) Problema: Muchos cálculos están repetidos. El tiempo de ejecución es exponencial: Θ(1,62n)

4.1. Método general. Métodos ascendentes y descendentes Métodos descendentes (divide y vencerás) Empezar con el problema original y descomponer recursivamente en problemas de menor tamaño. Partiendo del problema grande, descendemos hacia problemas más sencillos. Métodos ascendentes (programación dinámica) Resolvemos primero los problemas pequeños (guardando las soluciones en una tabla). Después los vamos combinando para resolver los problemas más grandes. Partiendo de los problemas pequeños avanzamos hacia los más grandes.

4.2. Análisis de tiempos de ejecución. La programación dinámica se basa en el uso de tablas donde se almacenan los resultados parciales. En general, el tiempo será de la forma: Tamaño de la tabla*Tiempo de rellenar cada elemento de la tabla. Un aspecto importante es la memoria puede llegar a ocupar la tabla. Además, algunos de estos cálculos pueden ser innecesarios.

4.3.2. Problema del cambio de monedas. Problema: Dado un conjunto de n tipos de monedas, cada una con valor ci, 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: 1) Definir el problema en función de problemas más pequeños 2) Definir las tablas de subproblemas y la forma de rellenarlas 3) Establecer cómo obtener el resultado a partir de las tablas

4.3.2. Problema del cambio de monedas. 1) Descomposición recurrente del problema Interpretar como un problema de toma de decisiones. ¿Coger o no coger una moneda de tipo k? Si se coge: usamos 1 más y tenemos que devolver cantidad ck menos. Si no se coge: tenemos el mismo problema pero descartando la moneda de tipo k. ¿Qué varía en los subproblemas? Tipos de monedas a usar. Cantidad por devolver. Ecuación del problema. Cambio(k, q: entero): entero Problema del cambio de monedas, considerando sólo los k primeros tipos, con cantidad a devolver q. Devuelve el número mínimo de monedas necesario.

Dar vuelto 180 colones Monedas 5 (20) 10 (5) 20 25 50 (2) 100 (1) Combinación 1 Combinación 2

4. Programación dinámica. Conclusiones El razonamiento inductivo es una herramienta muy potente en resolución de problemas. Aplicable no sólo en problemas de optimización. ¿Cómo obtener la fórmula? Interpretar el problema como una serie de toma de decisiones. Descomposición recursiva no necesariamente implica implementación recursiva. Programación dinámica: almacenar los resultados en una tabla, empezando por los tamaños pequeños y avanzando hacia los más grandes.