Algoritmos glotones. mat-151

Documentos relacionados
Análisis y Diseño de Algoritmos

Programación Dinámica 1

Multiplicación de matrices simétricas

Estructuras de Datos y Algoritmos

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero

Complejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande

Diseño de algoritmos

Diseño y Análisis de Algoritmos

259. El número de combinaciones de m objetos entre un conjunto de n, denotado por n, para n 1 y 0 m n, se puede definir recursivamente por: m

Funciones recursivas

Análisis de algoritmos. Recursividad

Algoritmos glotones 2 (código de Huffman) mat-151

Divide & Conquer. Herman Schinca. Clase de Junio de 2011

Programación dinámica

Tema: Funciones, Procedimientos y Recursividad en C#.

Tema: Funciones, Procedimientos y Recursividad en C#.

Apuntes de Teórico de Programación 3. Apuntes de Teórico PROGRAMACIÓN 3. Greedy. Versión 1.1

Estrategias de Diseño de Algoritmos

Parte de Algoritmos de la asignatura de Programación Master de Bioinformática. Avance rápido

Estructuras de Control

Introducción al análisis de algoritmos

Notación Asintótica 2

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

Universidad de Santiago de Chile Facultad de Ciencia Departamento de Matemática y Ciencias de la Computación

Tema: Programación Dinámica.

Práctica 2 - Ejercicio 2.8

Programación Dinámica

Alonso Ramirez Manzanares Computación y Algoritmos 03.05

Generación de variables aleatorias discretas Método de la Transformada Inversa

Análisis de algoritmos

Tema 9. Recursividad

Geometría. Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires. Training Camp 2012

Introducción. Algoritmos y Complejidad. Algoritmos y Algoritmia. Introducción. Problemas e instancias. Pablo R. Fillottrani

Complejidad de algoritmos recursivos

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2

1. Defina el problema de particionamiento. Escriba un ejemplo de este tipo de problema, junto con su formulación general en AMPL.

Tema: Programación Dinámica.

4.2. El número de combinaciones de m objetos entre un conjunto de n, denotado por n, para n 1 y 0 m n, se puede definir recursivamente por: m

Verificación de programas. Algoritmos y Estructuras de Datos I. Semánticas formales: Primer cuatrimestre de 2016

Análisis de algoritmos

Algorítmica y Complejidad. Tema 5 Divide y Vencerás.

Análisis y Diseño de Algoritmos

Fundamentos de Programación. Flujo de Control I: Estructuras selectivas

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

RECURSIVIDAD. Prof. Ing. M.Sc. Fulbia Torres

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Esquema de Dividir y Vencer

Análisis de Algoritmos

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

Programación (PRG) PRÁCTICA 10. Algoritmos de búsqueda

Tema 06: Recursividad

Arreglos. Algoritmos y Estructuras de Datos I. Arreglos en C++ Arreglos y listas

Programación imperativa. Algoritmos y Estructuras de Datos I. Ciclos

Programación Estructurada. Complementos de Informática Tema 2: Programación Estructurada y Programación Modular. Números Amigos

Ordenamiento de un arreglo. Algoritmos y Estructuras de Datos I. Algoritmo downsort. Upsort vs downsort

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1.

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

Estructuras de control

Ordenamiento (Sorting)

Curso de Programación 1

Tema 5- Diseño Recursivo y. Objetivos Principales. Bibliografía Básica

Muchas de las ecuaciones de recurrencia que vamos a usar en este curso tienen la siguiente forma: ( c n =0 T (n) = a T (b n b.

Terminaremos el capítulo con una breve referencia a la teoría de cardinales.

UNIDAD 7 Recursividad Concepto. Algoritmos recursivos. Seguimiento de la recursión. Algunos métodos recursivos de búsqueda y ordenación: M-Sort y

Tema 01: Fundamentos del Análisis Asintótico de Algoritmos

Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 1: RECURSIÓN

1. Recuerdo del algoritmo de KRUSKAL

Alineamiento múltiple de secuencias

Tema 2. Fundamentos Teóricos de la. programación dinámica Teorema de Optimalidad de Mitten

Problema ejemplo. El Arte de la Programación Rápida. Backtracking

Métodos de Conteo y Principio del Palomar. Matemática Discreta. Agustín G. Bonifacio UNSL

Lógica - Conjuntos inductivos

Lenguaje de programación S (Davis/Sigal/Weyuker) Lógica y Computabilidad. Ejemplo 1. Ejemplo 2

Análisis de algoritmos

ESTRUCTURA DE DATOS: Tema 3. Recursividad

Programación Dinámica

Son una clase particular de los algoritmos evolutivos.

Programación II Recursividad Dr. Mario Rossainz López

Semana 07[1/21] Sumatorias. 12 de abril de Sumatorias

Planificación con prioridades

ESTRUCTURAS DE CONTROL

La recursividad forma parte del repertorio para resolver problemas en Computación y es de los métodos más poderosos y usados.

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Búsqueda Informada. Algoritmos primero el mejor Algoritmos de búsqueda local

Aplicación de la Inducción Matemática Programación Funcional. Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca

Taller de Programación Dinámica. Definiciones. Caso base. Laboratorio de Algoritmos y Estructuras de Datos III. 10 de Septiembre de 2010

Retículos y Álgebras de Boole

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

Repetición Condicional

ESTIMACIÓN DE TIEMPO Y COSTO DE PRODUCTOS SOFTWARE

Introducción Supongamos un subconjunto de n elementos X = {e 1,,e n de un conjunto referencial Y, X Y. Dentro de Y se define una relación de orden tot

Métodos Constructivos. Empiezan desde una solución vacía (a veces pequeña)

Transcripción:

Algoritmos glotones (greedy) mat-151 Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009

Algoritmos glotones Algoritmos utilizados en problemas de optimización. Estos algoritmos siguen típicamente una secuencia de pasos con un conjunto de opciones en cada paso. Un algoritmo glotón siempre toma la decisión que parece mejor en ese instante. Esto es, toma la solución localmente óptima esperando que le lleve a la solución globalmente óptima. Los algoritmos glotones no siempre llevan a la solución óptima pero para muchos problemas es la solución óptima se encuentra de manera más eficiente que con programación dinámica. Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 2

Planificación de actividades que compiten por el mismo recurso. Meta: seleccionar el conjunto de mayor tamaño de tareas. Conjunto de n actividades propuestas S = {a1,a2,...an} que quieren usar el mismo recurso. Cada actividad ai tiene un tiempo de inicio si y un tiempo final fi donde: 0 si fi < inf. Si es seleccionada, la actividad ai tiene lugar en el intervalo semi-abierto [si,fi). Las actividades ai y aj son si los intervalos [si,fi) y [sj,fj) no se translapan ( si si fj o si sj fi ). Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 3

El problema de selección de actividades es el seleccionar el subconjunto de tamaño máximo de actividades mutuamente. i 1 2 3 4 5 6 7 8 9 10 11 si 1 3 0 5 3 5 6 8 8 2 12 fi 4 5 6 7 8 9 10 11 12 13 14 Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 4

Solución utilizando programación dinámica: combinar las soluciones óptimas a dos subproblemas para construir una solución óptima al problema original. Paso 1: subestructura óptima del problema de selección de actividades. i Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 5

Si ordenamos las actividades en orden creciente respecto a sus tiempos de finalización, tenemos que: y podemos decir que Para encontrar la subestructura optima consideramos un subproblema novacío y suponemos que una solución a este subproblema incluye una actividad ak tal que: La actividad ak nos genera dos subproblemas, Sik y Skj, donde cada una consiste en un subconjunto de las actividades presentes en Sij. Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 6

La estructura subóptima de este problema es la siguiente: supongamos que una solución óptima Aij para Sij incluye la actividad ak. entonces las soluciones Aik a Sik y Akj a Skj utilizadas en esa solución óptima de Sij son óptimas también. se puede entonces encontrar un subconjunto de tamaño máximo de actividades en Sij separando el problema en dos subproblemas y uniendo sus soluciones: Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 7

Paso 2: solución recursiva Sea c[i,j] el numero de actividades en un subconjunto de actividades de tamaño máximo en Sij. tenemos que c[i,j]=0 cuando Sij= ; en particular c[i,j]=0 para i j. en un Sij utilizamos los subproblemas Sik y Skj obteniendo la recurrencia: c[i,j] = c[i,k] + c[k,j] +1 pero no conocemos el valor de k y tenemos hasta j-i-1 valores posibles, k=i+1,...,j-1. Hay que recorrerlos para encontrar el mejor. Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 8

Para convertir el algoritmo de programación dinámica en un algoritmo glotón nos basamos en dos observaciones principales: Considerando cualquier subproblema no-vacío Sij, y sea am la actividad en Sij que termina más rápido: Entonces 1. La actividad am es usada en un subconjunto máximo de actividades en Sij.(Prueba: formar otro conjunto maximo sin a m y substituir la primera actividad por a m, y tiene el mismo número de elementos) 2. El subproblema Sim está vacío, de tal manera que eligiendo am deja al subproblema Smj como el único no-vacío. (Prueba: esto implicaría que existe una a k tal que f i <=s k <=f k <=s m <f m y entonces f k <f m lo cual es una contradicción) Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 9

Según vimos en las clases de programación dinámica la estructura subóptima varía de acuerdo a: cuántos sub-problemas se utilizan en la solución óptima. el número de elecciones se tienen para determinar cada sub-problema. La solución con programación dinámica propone 2 subproblemas y j-i-1 elecciones por sub-problema. La solución glotona disminuye el número de sub-problemas (1 subproblema) y este subproblema tiene solo 1 elección: calcular la actividad con el tiempo de finalización más rápido. Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 10

Para resolver el subproblema Sij: elegimos la actividad am en Sij que termina más rápido y sumamos esta solución al conjunto de actividades usando la solución del problema Smj. Se observa un patrón en los problemas resueltos: el problema original es S0,n+1. Elegimos la actividad am1 como actividad en S0,n+1 que se termina más rápido. El siguiente subproblema es Sm1,n+1. Elegimos am2 como actividad, Notamos que cada subproblema es de la forma Smi,n+1 para una actividad mi. El algoritmo glotón deja la mayor oportunidad para programar las actividades que quedan: maximiza la cantidad de tiempo restante sin programar. Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 11

Algoritmo glotón recursivo (top-down) Entradas: conjuntos de tiempos de inicio s y fin f (ordenadas incrementalmente). i y n que definen el subproblema Si,n+1 a resolver. Salida: conjunto más grande de actividades en Si,n+1. Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 12

RECURSIVE-ACTIVITY-SELECTOR(s,f,i,n) 1. 1. m i+1 2. 2. while m n y s m < ff i i 3. 3. do m m+1 4. 4. if if m n 5. 5. then return {a {a m } U RECURSIVE-ACTIVITY-SELECTOR(s,f,m,n) 6. else return NULL. Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 13

Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 14

Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 15

Suponiendo que las actividades han sido ordenadas respecto a su tiempo final, el tiempo de ejecución de la llamada RECURSIVE-ACTIVITY- SELECTOR(s,f,0,n) es de Θ(n). En las llamadas recursivas cada actividad ak se examina una sola vez en el ciclo while de la linea 2. Se puede escribir la versión iterativa (hacer de tarea!) Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 16

Algoritmos glotones: elementos Los algoritmos glotones obtienen una solución óptima realizando una secuencia de elecciones. En cada punto del algoritmo se toma la mejor solución en ese momento. Para el ejemplo anterior seguimos los pasos: Determinar la estructura subóptima del problema. Desarrollar una solución recursiva. Probar que, en cualquier punto de la recursión, una de las elecciones óptimas es la opción glotona. Mostrar que todos excepto uno de los subproblemas inducidos por hacer la elección glotona están vacíos. Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 17

Algoritmos glotones: elementos Desarrollar un algoritmo recursivo que implemente la estrategia glotona. Convertir el algoritmo recursivo en uno iterativo. Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 18

Algoritmos glotones: elementos Generalmente se diseña un algoritmo glotón con la opción glotona en mente siguiendo los pasos: Especificar el problema de manera que al hacer una elección quede solo un subproblema por resolver. Probar que siempre hay una solución optima al problema original tomando la opción glotona. Demostrar que, una vez tomada la opción glotona, lo que resulta es un subproblema con la propiedad que si se combinan las solución óptima del subproblema con la elección glotona se puede llegar a la solución óptima del problema original. La elección glotona no depende de la resolución del subproblema. Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 19

Algoritmos glotones: elementos No hay una forma general para decir si la solución glotona es optima pero los ingredientes principales son: Propiedad de la opción glotona: Una solución optima globalmente se puede alcanzar realizando la elección optima localmente. Subestructura optima Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 20