Anda di halaman 1dari 33

Anlisis y Diseo de Algoritmos

Algoritmos Voraces
DR. JESS A. GONZLEZ BERNAL
CIENCIAS COMPUTACIONALES
INAOE
Introduccin
22
Siempre toman la mejor opcin en cada momento
(punto de decisin del algoritmo)
Una opcin ptima local
Pensando que esta opcin llevar a una solucin ptima global
No siempre llevan a soluciones ptimas
Aunque s para muchos problemas
Elementos de una Estrategia Vorz
33
Subestructura ptima
Propiedad de eleccin-voraz (greedy-choice)
Propiedad de Eleccin-voraz
44
A cada paso se toma una decisin ptima local
La solucin ptima global no depende de la solucin de sus
subproblemas
En principio se puede llegar a una solucin ptima global
tomando decisiones ptimas locales (aunque no siempre)
Es necesario probar esto
Diferente de programacin dinmica
Resuelve problemas en modo Top-Down
Probando que un Algoritmo Voraz es ptimo
55
Hay que probar que tomando una solucin ptima
en cada paso nos llevar a una solucin global
ptima
Se parte de una solucin global ptima
Se muestra que se puede modificar la solucin intercambiando
el primer paso por una eleccin voraz y que esta eleccin
reduce el problema a uno similar pero ms pequeo
Utiliza induccin para mostrar que se puede hacer una
eleccin voraz a cada paso del algoritmo
Existe subestructura ptima
Subestructura ptima
6
Un problema tiene subestructura ptima s una
solucin ptima contiene soluciones ptimas a sus
subproblemas
Como en programacin dinmica
Problema de la Mochila Fraccional
7
Un ladrn encuentra n artculos en una tienda
El i-simo artculo cuesta v
i
pesos y pesa w
i
kilos
Quiere tomar lo ms valioso que pueda en una carga
Puede cargar a lo ms Wkilos en su mochila para algn W
Puede tomar fracciones de artculos siempre y cuando no se
exceda el peso lmite W
Problema de la Mochila Fraccional
8
Qu cantidad y de qu artculos debe tomar el
ladrn para maximizar el valor del botn?
Algoritmo voraz
Tomar tanto del artculo con el valor ms alto por kilo (v
i
/w
i
)
como se pueda.
Si se acaba un artculo, tomar del siguiente artculo con valor
(v
i
/w
i
) ms alto
Continuar hasta que se llene la mochila
Problema de la Mochila Fraccional
Prueba: Propiedad de Eleccin Voraz
9
Si tenemos una solucin ptima al problema de la
mochila O = {o
1
, o
1
, , o
j
} con j elementos.
Supongamos que existe una solucin voraz G = {g
1
,
g
1
, , g
k
} con k elementos ordenados de acuerdo a
la eleccin voraz
Prueba adaptada de: http://www.cs.kzoo.edu/cs215/ por Nathan Sprague
Problema de la Mochila Fraccional
Prueba: Propiedad de Eleccin Voraz
10
Queremos mostrar que existe una solucin ptima O que incluye la
eleccin voraz g
1
.
CASO 1: g
1
no es fraccional
Si g
1
esta en O, no hay nada que probar
Si g
1
no esta en O, arbitrariamente quitamos w
g1
en artculos de O y lo
reemplazamos con g
1
para producir O
O es una solucin y es tan buena como O
CASO 2: g
1
es fraccional (K = f*w
g1
donde f es la fraccin de g
1
elegida y K es
el lmite de peso)
Si O incluye f*w
g1
unidades de g
1
, no hay nada que probar
Si O incluye menos de f de g
1
, quitamos f*w
g1
peso de O arbitrariamente y
lo reemplazamos con f*w
g1
unidades de g
1
para construir O
O es una solucin vlida y al menos tan buena como O.
Prueba adaptada de: http://www.cs.kzoo.edu/cs215/ por Nathan Sprague
Problema de la Mochila Fraccional
Prueba: Subestructura ptima
11
Se demostr que hay una solucin ptima O que contiene a g
1
Despus de elegir g
1
el lmite de peso es K = K w
g1
y el conjunto de
artculos se convierte en I = I {g
1
}
Sea P el problema de la mochila con lmite de peso K y lista de
artculos I. Debemos probar que O = O {g
1
} es una solucin ptima
de P
Probamos por contradiccin:
Asumimos que O no es una solucin de P. Sea Q una solucin ptima con
ms valor que O.
Sea R = Q {g
1
}. El valor de O es igual al valor de O + g
1
El valor de R es mayor que el valor de O = O + g
1
Como O era una solucin ptima, esta es una contradiccin.
Prueba adaptada de: http://www.cs.kzoo.edu/cs215/ por Nathan Sprague
Problema de Seleccin de Actividades
(Activity Selection Scheduling Problem)
12
Dado un conjunto de n actividades a realizar
S = {1, 2, , n}
Todas las actividades requieren el mismo recurso (p.e. el mismo
saln de clases) y lo utilizan uno a la vez
Cada actividad i tiene un tiempo de inicio s
i
y de fin f
i
, s
i
f
i
, [s
i
,
f
i
)
Dos actividades i y j son compatibles si no se traslapan: s
i
f
j
s
j
f
i
Problema: Elegir el conjunto ms grande de actividades
compatibles.
Asumir que la entrada esta ordenada por f
1
f
2
f
n
(O(nlgn)).
Problema de Seleccin de Actividades
Algoritmo Voraz
13
Problema de Seleccin de Actividades
Ejemplo
14
Problema de Seleccin de Actividades
Anlisis
15
El ndice i tiene al ltimo elemento (con mayor f
i
)
que cualquier otra actividad en A
Greedy-Activity-Selector toma un tiempo de (n)
Es un algoritmo greedy porque:
Siempre elige la actividad compatible con el tiempo de
terminacin ms temprano, dejando tanto tiempo libre como
sea posible
Problema de Seleccin de Actividades
Anlisis
16
Es ptimo?
S
Prueba
Si ordenamos por f
i
, la actividad 1 termina antes que las dems
Mostrar que existe una solucin ptima que empieza con una
seleccin voraz (actividad 1)
Sea A S una solucin ptima
Si la primera actividad en A es k 1 (no es voraz), entonces existe otra
solucin ptima B que inicia con 1
B = A {k} {1}
Como f
1
f
k
, la actividad 1 todava es compatible con A
|B| = |A|, entonces B es ptima. Entonces existe una solucin ptima
que inicia con una eleccin voraz
Problema de Seleccin de Actividades
Anlisis
17
Tambin probamos su subestructura ptima
Despus de hacer la primera eleccin voraz tenemos el problema
S = { i S : s
i
f
1
}, solo contamos con actividades que inicien despus de f
1
con solucin ptima A = A {1}
Esta solucin debe ser ptima
Si B soluciona S con ms actividades que A, si agregamos la actividad 1 a B lo
hace ms grande que A
Esto es una contradiccin porque A ya era una solucin ptima
Por tanto, la eleccin voraz nos lleva a una solucin ptima
Problema de Seleccin de Actividades
Programacin Dinmica
18
Ya probamos que tiene subestructura ptima
Anlisis del problema
S
ij
= {a
k
S : f
i
s
k
< f
k
s
j
}
A
ij
tal que
Definicin de c[i,j] como el tamao de A
ij
.
Tenemos la recurrencia:
Todava considera muchos subproblemas
An con los subproblemas repetidos
Es mejor la versin voraz, la cual tambin es ptima
|} } { {| max | |
kj k ik
Sij a
ij
A a A A
k
=

}. 1 ] , [ ] , [ { max ] , [ + + =
< <
j k c k i c j i c
j k i
Problema de la Mochila 0-1
19
Un ladrn encuentra n artculos en una tienda
El i-simo artculo cuesta v
i
pesos y pesa w
i
kilos, v
i
y w
i
son enteros
Quiere tomar lo ms valioso que pueda en una carga
Puede cargar a lo ms Wkilos en su mochila para algn Wentero
NO puede tomar fracciones de artculos, es un problema binario 0-1,
o lo toma o lo deja
Ambos problemas de la mochila, el fraccional y el binario
tienen subestructura ptima
El problema de la mochila binario no se resuelve con un
algoritmo voraz
S con Programacin Dinmica
Problema de la Mochila 0-1
20
Cdigos de Huffman
21
Los cdigos de Huffman se utilizan para compresin de
datos
Algoritmo Voraz
Determina cdigos ptimos de longitud variable a caracteres
Dado un archivo de 100,000 caracteres, con 6 caracteres
diferentes: a, b , c, d, e, f
Cdigos de longitud fija: 300,000 bits
Cdigos de longitud variable: 224,000 bits
Cdigos cortos a caracteres ms frecuentes
Cdigos largos a caracteres menos frecuentes
Cdigos Prefijo
22
En un cdigo prefijo, ningn cdigo es prefijo de otro cdigo
Simple codificar y decodificar
abc 0.101.100
Utilizamos un rbol para decodificar
001011101 0.0.101.1101 aabe
Si una cadena hace un match con un cdigo, se da como salida, no hay ambigedad
Cdigos Prefijo
23
Un cdigo ptimo para un archivo siempre se representa
por un rbol binario completo
Cada nodo no-hoja tiene dos hijos
El cdigo de longitud fija del ejemplo no es ptimo
El rbol binario no esta completo
Si C es el alfabeto de caracteres
El rbol para un cdigo prefijo ptimo tiene exactamente |C| hojas
Una por cada letra del alfabeto
Exactamente |C| - 1 nodos internos
Sea f(c) la frecuencia del carcter c en el archivo
Sea d
T
(c) la profundidad de la hoja de c en el rbol
Nmero de bits requeridos para codificar el archivo es:
B(T) es el costo del rbol T

=
C c
T
c d c f T B ) ( ) ( ) (
Construccin del Cdigo Huffman
24
Huffman invent un algoritmo voraz para construir cdigos
prefijo ptimos llamado Huffman Code
Construye el rbol T del cdigo ptimo de forma
bottom-up
Inicia con un conjunto de |C| hojas y hace una secuencia
de |C| - 1 operaciones merge para crear el rbol final
Une las dos hojas con menor frecuencia (hoja o
interno) hasta que todas las hojas se han
considerado
Usa un priority queue Q para mantener los nodos
ordenados por frecuencia
Construccin del Cdigo Huffman
25
Construccin del Cdigo Huffman
Ejemplo
26
Anlisis del Algoritmo HuffmanCode
27
Q se implementa como un heap binario
Inicializacin de Q para el conjunto C de n caracteres
toma O(n) (lnea 2) con Build-Heap
Ciclo de lneas 3-8 se ejecutan |n| -1 veces
Cada operacin del Heap requiere O(lgn)
El ciclo contribuye O(nlgn)
Tiempo total: O(nlgn)
El Algoritmo de Huffman es Correcto
28
Para probar que es correcto, determinar un cdigo
prefijo ptimo debe tener las propiedades de
Eleccin voraz
Subestructura ptima
Lema 17.2
29
El procedimiento Huffman tiene la propiedad de
eleccin voraz
Prueba
Lema 17.2
30
Asumimos que x y y tienen las frecuencias ms bajas
Si x y y tienen las frecuencias ms bajas, entonces existe un cdigo
ptimo en el que x y y estn a la profundidad mxima
La eleccin voraz
Supongamos ahora que tenemos una solucin ptima en la que b y c
son caracteres hermanos en hojas de mxima profundidad en la
solucin T
f[b] f[c] y f[x] f[y]
f[x] y f[y] son las frecuencias ms bajas y f[b] y f[c] son frecuencias
arbitrarias
f[x] f[b] y f[y] f[c]
Intercambiamos posiciones en T de b y x para producir T
Intercambiamos posiciones en T de c y y para producir T
Hay una diferencia en costos
Lema 17.2
31

Entonces, si llevamos a x a la mayor profundidad


(similar para y), obtenemos un mejor rbol en el que
x y y son nodos hoja hermanos en la profundidad
mxima
Implica que se puede empezar con la eleccin voraz
Juntar los dos caracteres con la menor frecuencia
Lema 17.3
32
El procedimiento Huffman tiene la propiedad de
subestructura ptima
Consideremos el rbol T para los caracteres C
Sean x y y dos caracteres hermanos, hojas en T y z su padre (x y y
son los de menor frecuencia)
Consideremos el rbol ptimo T para C = C {x,y} {z}
f(z) = f(x) + f(y)
Si hubiera un mejor rbol para C , llamado T , entonces podramos
usar T para construir un mejor rbol original aadiendo x y y bajo z
Pero el rbol original T es ptimo, entonces esta es una contradiccin
Entonces T es el rbol ptimo para C
Huffman tiene la propiedad de subestructura ptima
Teorema 17.4
33
El procedimiento Huffman produce un cdigo prefijo
ptimo
Inmediato de los lemas 17.2 y 17.3

Anda mungkin juga menyukai