SlideShare una empresa de Scribd logo
1 de 4
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

Similar a greedy.ppt

Análisis y Diseño de Algoritmos
Análisis y Diseño de Algoritmos Análisis y Diseño de Algoritmos
Análisis y Diseño de Algoritmos linuxsanchez
 
Unidad 1, 2 y_3_algoritmos
Unidad 1, 2 y_3_algoritmosUnidad 1, 2 y_3_algoritmos
Unidad 1, 2 y_3_algoritmosGrisell d?z
 
algoritmos- álgebra discreta
algoritmos- álgebra discretaalgoritmos- álgebra discreta
algoritmos- álgebra discretaHernestoBeltrone
 
Algoritmos Voraces (Greedy)
Algoritmos Voraces (Greedy)Algoritmos Voraces (Greedy)
Algoritmos Voraces (Greedy)luzenith_g
 
Introducción al análisis de algoritmos
Introducción al  análisis de algoritmosIntroducción al  análisis de algoritmos
Introducción al análisis de algoritmosAlvaro Enrique Ruano
 
Tema 2 Algoritmo Concepto y Ejemplos.pptx
Tema 2 Algoritmo Concepto y Ejemplos.pptxTema 2 Algoritmo Concepto y Ejemplos.pptx
Tema 2 Algoritmo Concepto y Ejemplos.pptxdocmarcoantoniosotov
 
Script de Punteros a Funciones
Script de Punteros a FuncionesScript de Punteros a Funciones
Script de Punteros a FuncionesAnesGy SD
 
19189723 estructura-de-datos-programacion-facil
19189723 estructura-de-datos-programacion-facil19189723 estructura-de-datos-programacion-facil
19189723 estructura-de-datos-programacion-facilDariana Acuariogv
 
Complejidad de un algoritmo
Complejidad de un algoritmoComplejidad de un algoritmo
Complejidad de un algoritmoLutzo Guzmán
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmosCarlos
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmosCarlos
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmosCarlos
 

Similar a greedy.ppt (20)

Reglas y planificación
Reglas y planificaciónReglas y planificación
Reglas y planificación
 
Unidad 7
Unidad 7Unidad 7
Unidad 7
 
Análisis y Diseño de Algoritmos
Análisis y Diseño de Algoritmos Análisis y Diseño de Algoritmos
Análisis y Diseño de Algoritmos
 
El algoritmo
El algoritmoEl algoritmo
El algoritmo
 
AnáLisis De Algoritmos1
AnáLisis De Algoritmos1AnáLisis De Algoritmos1
AnáLisis De Algoritmos1
 
AnáLisis De Algoritmos1
AnáLisis De Algoritmos1AnáLisis De Algoritmos1
AnáLisis De Algoritmos1
 
Unidad 1, 2 y_3_algoritmos
Unidad 1, 2 y_3_algoritmosUnidad 1, 2 y_3_algoritmos
Unidad 1, 2 y_3_algoritmos
 
Introduccion a los algoritmos
Introduccion  a los algoritmosIntroduccion  a los algoritmos
Introduccion a los algoritmos
 
Introduccion Analisis Algoritmos
Introduccion Analisis AlgoritmosIntroduccion Analisis Algoritmos
Introduccion Analisis Algoritmos
 
algoritmos- álgebra discreta
algoritmos- álgebra discretaalgoritmos- álgebra discreta
algoritmos- álgebra discreta
 
Algoritmos Voraces (Greedy)
Algoritmos Voraces (Greedy)Algoritmos Voraces (Greedy)
Algoritmos Voraces (Greedy)
 
Introducción al análisis de algoritmos
Introducción al  análisis de algoritmosIntroducción al  análisis de algoritmos
Introducción al análisis de algoritmos
 
Algoritmia
AlgoritmiaAlgoritmia
Algoritmia
 
Tema 2 Algoritmo Concepto y Ejemplos.pptx
Tema 2 Algoritmo Concepto y Ejemplos.pptxTema 2 Algoritmo Concepto y Ejemplos.pptx
Tema 2 Algoritmo Concepto y Ejemplos.pptx
 
Script de Punteros a Funciones
Script de Punteros a FuncionesScript de Punteros a Funciones
Script de Punteros a Funciones
 
19189723 estructura-de-datos-programacion-facil
19189723 estructura-de-datos-programacion-facil19189723 estructura-de-datos-programacion-facil
19189723 estructura-de-datos-programacion-facil
 
Complejidad de un algoritmo
Complejidad de un algoritmoComplejidad de un algoritmo
Complejidad de un algoritmo
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmos
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmos
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmos
 

Más de jlmansilla

maximumFlow.ppt
maximumFlow.pptmaximumFlow.ppt
maximumFlow.pptjlmansilla
 
LinearSortOrderSatatistics.ppt
LinearSortOrderSatatistics.pptLinearSortOrderSatatistics.ppt
LinearSortOrderSatatistics.pptjlmansilla
 
elementaryAlgorithms.ppt
elementaryAlgorithms.pptelementaryAlgorithms.ppt
elementaryAlgorithms.pptjlmansilla
 
binarySearchTree.ppt
binarySearchTree.pptbinarySearchTree.ppt
binarySearchTree.pptjlmansilla
 
NP_Completitud.ppt
NP_Completitud.pptNP_Completitud.ppt
NP_Completitud.pptjlmansilla
 
PERDIDA_EN_UNA_RED_DE_FIBRA_OPTICA.pptx
PERDIDA_EN_UNA_RED_DE_FIBRA_OPTICA.pptxPERDIDA_EN_UNA_RED_DE_FIBRA_OPTICA.pptx
PERDIDA_EN_UNA_RED_DE_FIBRA_OPTICA.pptxjlmansilla
 

Más de jlmansilla (11)

NTFSFS.ppt
NTFSFS.pptNTFSFS.ppt
NTFSFS.ppt
 
maximumFlow.ppt
maximumFlow.pptmaximumFlow.ppt
maximumFlow.ppt
 
NTFS.ppt
NTFS.pptNTFS.ppt
NTFS.ppt
 
LinearSortOrderSatatistics.ppt
LinearSortOrderSatatistics.pptLinearSortOrderSatatistics.ppt
LinearSortOrderSatatistics.ppt
 
heapsort.ppt
heapsort.pptheapsort.ppt
heapsort.ppt
 
hashing.ppt
hashing.ppthashing.ppt
hashing.ppt
 
elementaryAlgorithms.ppt
elementaryAlgorithms.pptelementaryAlgorithms.ppt
elementaryAlgorithms.ppt
 
binarySearchTree.ppt
binarySearchTree.pptbinarySearchTree.ppt
binarySearchTree.ppt
 
NP_Completitud.ppt
NP_Completitud.pptNP_Completitud.ppt
NP_Completitud.ppt
 
BasicC++.ppt
BasicC++.pptBasicC++.ppt
BasicC++.ppt
 
PERDIDA_EN_UNA_RED_DE_FIBRA_OPTICA.pptx
PERDIDA_EN_UNA_RED_DE_FIBRA_OPTICA.pptxPERDIDA_EN_UNA_RED_DE_FIBRA_OPTICA.pptx
PERDIDA_EN_UNA_RED_DE_FIBRA_OPTICA.pptx
 

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