Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Datos Avanzadas
2
Capítulo 3: Algoritmos voraces
Disponemos un nº ilimitado
de monedas con valores de
1, 2, 5, 10, 20 y 50 céntimos
de euro, 1 y 2 euros (€).
Consideraciones:
− Vamos a suponer que tenemos n tipos de moneda que son potencias consecutivas de m.
Tipos de moneda: T={m0,m1,m2,..mn-1}
− Conjunto de candidatos: una cantidad ilimitada de cada tipo de moneda de T.
Coste: se ejecutan 2 bucles consecutivos de n iteraciones con todas las instrucciones elementales
→ O(n), siendo n el nº de tipos de monedas disponibles.
6
Capítulo 3: Algoritmos voraces
Demostración de optimalidad
− Los algoritmos voraces son sencillos y rápidos pero requieren la demostración de optimalidad
→ Demostrar que la función de selección conduce a la solución óptima: no suele ser sencillo.
7
Capítulo 3: Algoritmos voraces
9
Capítulo 3: Algoritmos voraces
Demostración de optimalidad algoritmo de Prim
• Conjunto prometedor: conjunto de aristas factible (sin ciclos) que se puede extender hasta llegar a
la solución óptima. Arista que sale de un conjunto de nodos: sólo tiene un extremo en él.
10
Capítulo 3: Algoritmos voraces
11
Capítulo 3: Algoritmos voraces
Ejemplo de ejecución
Clave: contiene la distancia mínima de los nodos del AR a cada uno de los nodos restantes
2º y 5º nodo Coste:
- bucle principal n-1 veces y dentro de dicho
bucle hay 2 bucles que se ejecutan n-2
veces. Implementando el grafo con una
matriz adyacencia: O(n2)
- Alternativa: usar listas de adyacencia
junto con un montículo (el montículo
almacena los candidatos pendientes):
O(alog n), donde a es el nº de aristas:
(disperso) n-1≤a≤n(n-1)/2 (denso), por lo
que sólo compensa si el grafo es disperso.
12
Capítulo 3: Algoritmos voraces
13
Capítulo 3: Algoritmos voraces
Demostración de optimalidad
14
Ejemplo de ejecución Capítulo 3: Algoritmos voraces
Actualizamos especial[]
17
Capítulo 3: Algoritmos voraces
Ejemplo de ejecución
18
Capítulo 3: Algoritmos voraces
19
Capítulo 3: Algoritmos voraces
• Hay 2 variantes:
Minimización del tiempo del sistema
– Planificar el orden de realización de unas tareas de forma que se minimice el tiempo
total que están los clientes en el sistema (o tiempo medio de espera por cliente).
20
Capítulo 3: Algoritmos voraces
• Algoritmo voraz → selecciona los clientes en orden creciente de tiempos de servicio (factible
no es necesario).
• Pseudocódigo → sólo necesitaríamos un algoritmo de ordenación de los tiempos de servicio.
• Coste → el de la ordenación de elementos: O(n log n). 21
Capítulo 3: Algoritmos voraces
22
Capítulo 3: Algoritmos voraces
23
Capítulo 3: Algoritmos voraces
Óptima
Soluciones factibles, secuencia de
realización y beneficios obtenidos
(la secuencia 1,4 no es factible)
24
Capítulo 3: Algoritmos voraces
• Algoritmo voraz:
– Función de selección: elige los trabajos en orden decreciente de beneficios.
– Función completable: en cada paso, el trabajo se incorpora a la solución S, si al
unir dicho trabajo a S éste sigue siendo factible.
26
Capítulo 3: Algoritmos voraces
Algoritmo detallado:
(El array f[i] almacena las fechas tope en orden decreciente de beneficios)
27
Capítulo 3: Algoritmos voraces
Ejemplo de ejecución
- n=5
- bi=(20,15,10,5,1)
- fi=(2,2,1,3,3)
Coste:
- Ordenación de f[n] en orden decreciente de beneficios → O(n log n)
- Caso peor: todas las tareas en f también están ordenadas por orden decreciente de
plazos y se pueden incluir en la planificación. En este caso para cada tarea i, el
algoritmo evalúa las i-1 tareas ya seleccionadas, encuentra su ubicación y realiza los
desplazamientos oportunas (bucle anidado) → O(n2)
28
Capítulo 3: Algoritmos voraces
• Algoritmo mejorado:
– Se consigue mejorar la eficiencia si cada tarea (seleccionada en orden decreciente
de beneficios) se programa lo más tarde posible (de acuerdo a su plazo de
ejecución y siempre que haya hueco).
– Empezando con una planificación vacía, para cada tarea i∈S se planifica i en el
instante t, siendo t el mayor entero tal que 1≤t≤min(n,fi) y la tarea que se
ejecutará en t no se ha decidido todavía.
29
Capítulo 3: Algoritmos voraces
Pseudocódigo algoritmo mejorado:
Comprimo S[]
eliminando los ceros
30
Capítulo 3: Algoritmos voraces
Ejemplo de ejecución
- n=5, bi=(20,15,10,5,1) y fi=(2,2,1,3,3)
Coste:
- Ordenación de f[n] en orden decreciente de beneficios → O(n log n)
- Fase de inicialización → O(n)
- 2n operaciones buscar O(1) y n operaciones fusionar O(1) → O(n)
- Total → O(n log n)
31
Capítulo 3: Algoritmos voraces
32
Capítulo 3: Algoritmos voraces
33
Capítulo 3: Algoritmos voraces
Algoritmo voraz
Coste:
- La implementación del conjunto del programas y del conjunto solución se puede
hacer en un array.
- Coste de ordenar los programas de menor a mayor coste → O(n log n)
- Coste del bucle mientras → O(n)
- Total → O(n log n)
Esquema voraz:
• Conjunto de candidatos → objetos o fracciones de objetos.
• Función objetivo → valor total de los objetos almacenados en la mochila.
• Conjunto solución → array n de reales: x= (x1, x2, ..., xn), 0≤xi≤1. Al ser los objetos
fraccionables, la solución óptima ha de llenar exactamente la mochila.
• ¿Función de selección?
35
Capítulo 3: Algoritmos voraces
Valor por unidad de peso de los objetos: (p1/v2, p1/v2, p3/v3) = (1.388,1.6,1.5)
36
Capítulo 3: Algoritmos voraces
Algoritmo voraz
Función seleccionar
Factible: comprueba si el siguiente objeto cabe entero
Si cabe, lo meto entero
Coste:
- Coste de ordenar los objetos en orden
decreciente de vi/pi → O(n log n)
Si no cabe, meto la fracción
correspondiente. - Coste del resto → O(n)
- Total → O(n log n) 37
Capítulo 3: Algoritmos voraces
• Demostración de optimalidad
38
Capítulo 3: Algoritmos voraces
39
Capítulo 3: Algoritmos voraces
41
Capítulo 3: Algoritmos voraces
Algoritmo detallado:
43