SlideShare una empresa de Scribd logo
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 si y un tiempo de término fi , donde si  fi.
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: fo  f1  f2
 f3  f4 ...  fn-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 < n; i++)
if (s [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
0 1 2 3 4 5 6 7 8 9 10
S 1 3 0 5 3 5 6 8 8 2 12
F 4 5 6 7 8 9 10 11 12 13 14
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0
10
0
0
0
0
0
0
0
0
1
2
3
7
3
3
3
3
3
3
4
5
7
6
7
0
0
7
3
3 7
8
9
10

Más contenido relacionado

PPTX
Análisis de complejidad introducción notación big o
 
PPT
Complejidad Computacional
PPTX
voras.pptx
PPT
Algoritmos
PPT
Algoritmos
PPTX
0. Algoritmos para programacion ass.pptx
PPTX
Unidad 7
PPTX
Unidad 7
Análisis de complejidad introducción notación big o
 
Complejidad Computacional
voras.pptx
Algoritmos
Algoritmos
0. Algoritmos para programacion ass.pptx
Unidad 7
Unidad 7

Similar a greedy.ppt (20)

DOC
Algoritmica
PDF
Reglas y planificación
PPTX
Unidad 7
PPTX
Análisis y Diseño de Algoritmos
PPTX
El algoritmo
PPT
AnáLisis De Algoritmos1
PPT
AnáLisis De Algoritmos1
PPT
Unidad 1, 2 y_3_algoritmos
PPT
Introduccion a los algoritmos
PDF
Introduccion Analisis Algoritmos
DOCX
algoritmos- álgebra discreta
PPT
Algoritmos Voraces (Greedy)
PDF
Introducción al análisis de algoritmos
DOCX
Algoritmia
PPTX
Tema 2 Algoritmo Concepto y Ejemplos.pptx
PDF
Programación de algoritmos y lenguaje de programación en C++ .pdf
PPT
Introducción a la Informática - Los Algoritmos
PDF
Script de Punteros a Funciones
PDF
19189723 estructura-de-datos-programacion-facil
PDF
Complejidad de un algoritmo
Algoritmica
Reglas y planificación
Unidad 7
Análisis y Diseño de Algoritmos
El algoritmo
AnáLisis De Algoritmos1
AnáLisis De Algoritmos1
Unidad 1, 2 y_3_algoritmos
Introduccion a los algoritmos
Introduccion Analisis Algoritmos
algoritmos- álgebra discreta
Algoritmos Voraces (Greedy)
Introducción al análisis de algoritmos
Algoritmia
Tema 2 Algoritmo Concepto y Ejemplos.pptx
Programación de algoritmos y lenguaje de programación en C++ .pdf
Introducción a la Informática - Los Algoritmos
Script de Punteros a Funciones
19189723 estructura-de-datos-programacion-facil
Complejidad de un algoritmo
Publicidad

Más de jlmansilla (11)

PPT
NTFSFS.ppt
PPT
maximumFlow.ppt
PPT
NTFS.ppt
PPT
LinearSortOrderSatatistics.ppt
PPT
heapsort.ppt
PPT
hashing.ppt
PPT
elementaryAlgorithms.ppt
PPT
binarySearchTree.ppt
PPT
NP_Completitud.ppt
PPT
BasicC++.ppt
PPTX
PERDIDA_EN_UNA_RED_DE_FIBRA_OPTICA.pptx
NTFSFS.ppt
maximumFlow.ppt
NTFS.ppt
LinearSortOrderSatatistics.ppt
heapsort.ppt
hashing.ppt
elementaryAlgorithms.ppt
binarySearchTree.ppt
NP_Completitud.ppt
BasicC++.ppt
PERDIDA_EN_UNA_RED_DE_FIBRA_OPTICA.pptx
Publicidad

Último (10)

PDF
Su punto de partida en la IA: Microsoft 365 Copilot Chat
PPTX
Implementación equipo monitor12.08.25.pptx
PPTX
Conceptos basicos de Base de Datos y sus propiedades
PDF
AutoCAD Herramientas para el futuro, Juan Fandiño
PPTX
Fundamentos de Python - Curso de Python dia 1
PPTX
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
PDF
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
PPTX
sistemas de informacion.................
PPTX
Tratará sobre Grafos_y_Arboles_Presentacion.pptx
DOCX
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
Su punto de partida en la IA: Microsoft 365 Copilot Chat
Implementación equipo monitor12.08.25.pptx
Conceptos basicos de Base de Datos y sus propiedades
AutoCAD Herramientas para el futuro, Juan Fandiño
Fundamentos de Python - Curso de Python dia 1
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
sistemas de informacion.................
Tratará sobre Grafos_y_Arboles_Presentacion.pptx
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd

greedy.ppt

  • 1. 1 Algoritmos Avaros (Greedy Algorithms) Agustín J. González ELO-320: Estructura de Datos y Algoritmos 1er. Sem. 2002
  • 2. 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. 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 si y un tiempo de término fi , donde si  fi. 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: fo  f1  f2  f3  f4 ...  fn-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 < n; i++) if (s [i >= f [j) { A [m++ = i; j = i; } return (m); }
  • 4. 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 0 1 2 3 4 5 6 7 8 9 10 S 1 3 0 5 3 5 6 8 8 2 12 F 4 5 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 10 0 0 0 0 0 0 0 0 1 2 3 7 3 3 3 3 3 3 4 5 7 6 7 0 0 7 3 3 7 8 9 10