1 Algoritmos Avaros (Greedy Algorithms) Agustín J. González ELO-320: Estructura de Datos y Algoritmos 1er. Sem. 2002.

Slides:



Advertisements
Presentaciones similares
Arreglos Unidimensionales y Bidimensionales ESTRUCTURAS DE DATOS I
Advertisements

Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
TUTORIAL PASO A PASO Parte 3. PASO 13: AGREGAR CUESTIONARIOS Los cuestionarios son una serie de preguntas para ser resueltas en determinado tiempo y.
Investigación de Operaciones
1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
FUNCIONES EN C.
Métodos Programación dinámica Función Costo Ponderación
Búsqueda Informada Heurísticas.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Métodos de Graficación, Parte 1

Complejidad Problemas NP-Completos
Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte
Juan José Cortés Orozco. Antonio Muñoz Torres.
Problemes de Viatjants
Representación del Conocimiento
1 Algoritmos Elementales de Grafos Agustín J. González ELO-320: Estructura de Datos Y Algoritmos 1er.Sem
Algoritmo Simplex Dual Como sabemos, el método simplex es un algoritmo iterativo que iniciando en una solución básica factible pero no óptima, genera soluciones.
Ordenamiento, Heapsort y Colas de prioridad
Capítulo 4 BUSQUEDA INFORMADA.
Single-Source Shortest Paths “Camino más corto desde/hacia una fuente”
Problemas de Decisión y Optimización
Algoritmos para Ordenar datos
Algoritmos.
Estructura de Datos y Algoritmos
Diseño y análisis de algoritmos
Programación dinámica: Introducción
Clase 10: Estructuras de datos y arreglos.
Diseño y análisis de algoritmos
ELO3201 Vectores (Vector) Agustín J. González ELO320.

A LGORITMO DE BÚSQUEDA POR COSTO UNIFORME Dorian López.
Parte II. Algorítmica. 3. Algoritmos voraces.
Diseño y análisis de algoritmos
1 Diseño Orientado a Objetos Agustín J. González ELO-329: Diseño y Programación Orientados a Objetos 1er. Sem
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
Surge cuando se necesita un modelo costo-efectividad que permita transportar ciertos bienes desde un lugar de origen a un destino que necesita aquellos.
1 Algoritmos Avaros (Greedy Algorithms) Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Manejo de Punteros y objetos en memoria dinámica en C++
Agustín J. González ELO320: Estructura de Datos y Algoritmos
Medianas y Estadísticas de Orden
1 Quicksort Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
ALGORITMOS.
1 Ordenamiento y estadísticas de orden Agustín J. González ELO 320: Estructura de Datos y Algoritmos.
1 Ordenamiento en tiempo lineal y Estadísticas de orden Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem 2002.
1 Single-Source Shortest Paths “Camino más corto desde/hacia una fuente” Agustín J. González ELO320: Estructura de Datos y Algoritmos 1.er. Sem
Minimum Spanning Tree (Árbol de Expansión Mínima)
Parte I. Estructuras de Datos.
Tema 10: Algoritmos voraces
ELO3201 Análisis de Algoritmos (cont.) Agustín J. González ELO320 1º sem 2002.
1 Flujo Máximo Agustín J. González ELO320: Estructura de Datos y Algoritmos.
Agustín J. González ELO-320: Estructura de Datos Y Algoritmos
1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Agustín J. González ELO320: Estructura de Datos y Algoritmos
Minimum Spanning Tree (Árbol de Expansión Mínima)
Análisis de algoritmos Generalidades
Flujo en redes Def: una red N es un grafo orientado conexo que tiene dos nodos distinguidos una fuente s con grado de salida positivo y un sumidero t con.
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
ALGORITMO QUE ES ??.
UNIDAD 2 Grafos Árboles abarcadores mínimos Caminos más cortos.
Introducción a los TADs
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
Patrones de Diseño Agustín J. González ElO329.
Recorridos de grafos Segunda Parte M.C. Meliza Contreras González.
Si estas aquí es porque deseas superarte, porque quieres ser mejor
Hernández Camacho Víctor Jesus Islas Sánchez Karla Vanessa
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
Algoritmos voraces Códigos de Huffman. Descripción del problema Tenemos un archivo de entrada. Asumiremos que el archivo está compuesto de bytes (enteros.
Transcripción de la presentación:

1 Algoritmos Avaros (Greedy Algorithms) Agustín J. González ELO-320: Estructura de Datos y Algoritmos 1er. Sem. 2002

2 Introducción Hay muchos algoritmos que pueden ser clasificados bajo la categoría de Algoritmos Avaros, Oportunistas (Greedy Algorithms). La idea es optar por la mejor opción de corto plazo. Sacar mayor provecho inmediato. Éstos se caracterizan por hacer la elección que parece mejor en el momento. Éstos no conducen siempre a una solución óptima, pero para muchos casos sí. Éstos producen una solución óptima cuando se puede llegar a ésta a través de elecciones localmente óptimas. Hay un parecido con programación dinámica (investigación de operaciones). La diferencia es que en programación dinámica, la elección en cada paso depende de la solución a un sub-problema. En los algoritmos avaros hacemos la elección que parece mejor en el momento y luego se resuelve el sub- problema que queda. Se puede pensar que algoritmos avaros resuelven el problema en forma top- down (de arriba hacia abajo); mientras que la programación dinámica lo hace bottom-up (de abajo hacia arriba). Éste método es muy poderoso y trabaja bien en muchos algoritmos que veremos en las próximas semanas; por ejemplo: Minimum-spanning-tree (árbol de mínima extensión), el algoritmo de Dijkstra para el camino más corto en un grafo y desde una única fuente.

3 Problema de la selección de actividades Se requiere itinerar el uso de un recurso entre varias actividades que compiten. Problema: Tenemos un conjunto de S={0, 1, 2, 3,.., n-1} actividades que desean usar un recurso (como una sala de clases por ejemplo) del cual sólo uno puede usarse a la vez. Cada actividad tiene un tiempo de partida s i y un tiempo de término f i, donde s i  f i. La tarea consiste en seleccionar el conjunto de cardinalidad máxima de actividades mutuamente compatibles; i.e. que no se traslapen. Suponemos que las actividades están ordenadas por orden creciente de tiempo de término: f o  f 1  f 2  f 3  f 4...  f n-1 Si no fuera así, sabemos que podemos ordenarlas en tiempo O(n lg n). Int Selector_de_Actividades(float s[ , float f [ , int n, int A[  ) { /* s y f son arreglos de tiempos de partida y término */ /* n: número de actividades compitiendo */ /* A: Arreglo de salida indicando la asignación óptima para máximo número de actividades*/ /* se retorna el número de actividad itineradas en A*/ int i, j = 0, m = 0; A[m++  = 0; for (i=1; i = f [j  ) { A [m++  = i; j = i; } return (m); }

4 Ejemplo Se puede demostrar que la solución aquí propuesta es óptima. La estrategia fue asignar la actividad que dejara el recurso libre la mayor cantidad de tiempo en el futuro y que fuera compatible con las anteriores. Ejemplo: sea S F