Вы находитесь на странице: 1из 33

Anlisis y Diseo de Algoritmos

Algoritmos Voraces

DR. JESS A. GONZLEZ BERNAL


CIENCIAS COMPUTACIONALES
INAOE
Introduccin
2

y Siempre toman la mejor opcin en cada momento


(punto de decisin del algoritmo)
y Una opcin ptima local
{ Pensando que esta opcin llevar a una solucin ptima global
y No siempre llevan a soluciones ptimas
{ Aunque s para muchos problemas
Elementos de una Estrategia Vorz
3

y Subestructura ptima
y Propiedad de eleccin-voraz (greedy-choice)
Propiedad de Eleccin-voraz
4

y 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
5

y 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

y 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

y Un ladrn encuentra n artculos en una tienda


{ El i-simo artculo cuesta vi pesos y pesa wi kilos

{ Quiere tomar lo ms valioso que pueda en una carga

{ Puede cargar a lo ms W kilos 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

y Qu cantidad y de qu artculos debe tomar el


ladrn para maximizar el valor del botn?

y Algoritmo voraz
{ Tomar tanto del artculo con el valor ms alto por kilo (vi/wi)
como se pueda.
{ Si se acaba un artculo, tomar del siguiente artculo con valor
(vi/wi) ms alto
{ Continuar hasta que se llene la mochila
Problema de la Mochila Fraccional
Prueba: Propiedad de Eleccin Voraz
9

y Si tenemos una solucin ptima al problema de la


mochila O = {o1, o1, , oj} con j elementos.
y Supongamos que existe una solucin voraz G = {g1,
g1, , gk} 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

y Queremos mostrar que existe una solucin ptima O que incluye la


eleccin voraz g1.
{ CASO 1: g1 no es fraccional
Si g1 esta en O, no hay nada que probar
Si g1 no esta en O, arbitrariamente quitamos wg1 en artculos de O y lo
reemplazamos con g1 para producir O
O es una solucin y es tan buena como O
{ CASO 2: g1 es fraccional (K = f*wg1 donde f es la fraccin de g1 elegida y K es
el lmite de peso)
Si O incluye f*wg1 unidades de g1, no hay nada que probar
Si O incluye menos de f de g1, quitamos f*wg1 peso de O arbitrariamente y
lo reemplazamos con f*wg1 unidades de g1 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

y Se demostr que hay una solucin ptima O que contiene a g1


y Despus de elegir g1 el lmite de peso es K = K wg1 y el conjunto de
artculos se convierte en I = I {g1}
y Sea P el problema de la mochila con lmite de peso K y lista de
artculos I. Debemos probar que O = O {g1} es una solucin ptima
de P
y 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 {g1}. El valor de O es igual al valor de O + g1
{ El valor de R es mayor que el valor de O = O + g1
{ 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

y Dado un conjunto de n actividades a realizar


{ S = {1, 2, , n}
y Todas las actividades requieren el mismo recurso (p.e. el mismo
saln de clases) y lo utilizan uno a la vez
y Cada actividad i tiene un tiempo de inicio si y de fin fi, si fi, [si,
fi)
y Dos actividades i y j son compatibles si no se traslapan: si fj sj
fi
y Problema: Elegir el conjunto ms grande de actividades
compatibles.
{ Asumir que la entrada esta ordenada por f1 f2 fn (O(nlgn)).
Problema de Seleccin de Actividades
Algoritmo Voraz
13
Problema de Seleccin de Actividades
Ejemplo
14
Problema de Seleccin de Actividades
Anlisis
15

y El ndice i tiene al ltimo elemento (con mayor fi)


que cualquier otra actividad en A
y Greedy-Activity-Selector toma un tiempo de (n)
y 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

y Es ptimo?
{ S

y Prueba
{ Si ordenamos por fi, 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 f1 fk, 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

y Tambin probamos su subestructura ptima


{ Despus de hacer la primera eleccin voraz tenemos el problema
S = { i S : si f1}, solo contamos con actividades que inicien despus de f1
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

y Ya probamos que tiene subestructura ptima


{ Anlisis del problema
Sij = {ak S : fi sk < fk sj}
Aij tal que | Aij |= max
a Sij
{| Aik {ak } Akj |}
k

{ Definicin de c[i,j] como el tamao de Aij.


Tenemos la recurrencia: c[i, j ] = max i < k < j {c[i, k ] + c[ k , j ] + 1}.

y Todava considera muchos subproblemas


{ An con los subproblemas repetidos

{ Es mejor la versin voraz, la cual tambin es ptima


Problema de la Mochila 0-1
19

y Un ladrn encuentra n artculos en una tienda


{ El i-simo artculo cuesta vi pesos y pesa wi kilos, vi y wi son enteros
{ Quiere tomar lo ms valioso que pueda en una carga
{ Puede cargar a lo ms W kilos en su mochila para algn W entero
{ NO puede tomar fracciones de artculos, es un problema binario 0-1,
o lo toma o lo deja
y Ambos problemas de la mochila, el fraccional y el binario
tienen subestructura ptima
y 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

y Los cdigos de Huffman se utilizan para compresin de


datos
{ Algoritmo Voraz
{ Determina cdigos ptimos de longitud variable a caracteres
y 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

y En un cdigo prefijo, ningn cdigo es prefijo de otro cdigo


y Simple codificar y decodificar
{ abc 0.101.100
y 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

y 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 dT(c) la profundidad de la hoja de c en el rbol
{ Nmero de bits requeridos para codificar el archivo es: B(T ) = f (c)dT (c)
cC
{ B(T) es el costo del rbol T
Construccin del Cdigo Huffman
24

y Huffman invent un algoritmo voraz para construir cdigos


prefijo ptimos llamado Huffman Code
y Construye el rbol T del cdigo ptimo de forma
bottom-up
y Inicia con un conjunto de |C| hojas y hace una secuencia
de |C| - 1 operaciones merge para crear el rbol final
y Une las dos hojas con menor frecuencia (hoja o
interno) hasta que todas las hojas se han
considerado
y 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

y Q se implementa como un heap binario


y Inicializacin de Q para el conjunto C de n caracteres
toma O(n) (lnea 2) con Build-Heap
y Ciclo de lneas 3-8 se ejecutan |n| -1 veces
{ Cada operacin del Heap requiere O(lgn)
{ El ciclo contribuye O(nlgn)
y Tiempo total: O(nlgn)
El Algoritmo de Huffman es Correcto
28

y Para probar que es correcto, determinar un cdigo


prefijo ptimo debe tener las propiedades de
{ Eleccin voraz
{ Subestructura ptima
Lema 17.2
29

y El procedimiento Huffman tiene la propiedad de


eleccin voraz
y Prueba
Lema 17.2
30

y Asumimos que x y y tienen las frecuencias ms bajas


y 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
y 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

y 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
y Implica que se puede empezar con la eleccin voraz
{ Juntar los dos caracteres con la menor frecuencia
Lema 17.3
32

y 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

y El procedimiento Huffman produce un cdigo prefijo


ptimo
{ Inmediato de los lemas 17.2 y 17.3

Вам также может понравиться