Está en la página 1de 137

Repaso de la clase anterior

Algoritmos greedy
Ejercicios propuestos

Programación III

Ricardo Wehbe

UADE

5 de septiembre de 2022

Ricardo Wehbe Programación III - Clase 04


Repaso de la clase anterior
Algoritmos greedy
Ejercicios propuestos

Programa

1 Repaso de la clase anterior

2 Algoritmos greedy
El problema del cambio
El problema de la mochila
El código de Huffman
Matrimonios en la tribu de los kikimuris

3 Ejercicios propuestos

Ricardo Wehbe Programación III - Clase 04


Repaso de la clase anterior
Algoritmos greedy
Ejercicios propuestos

1 Repaso de la clase anterior

2 Algoritmos greedy
El problema del cambio
El problema de la mochila
El código de Huffman
Matrimonios en la tribu de los kikimuris

3 Ejercicios propuestos

Ricardo Wehbe Programación III - Clase 04


Repaso de la clase anterior
Algoritmos greedy
Ejercicios propuestos

La técnica divide & conquer

Ricardo Wehbe Programación III - Clase 04


Repaso de la clase anterior
Algoritmos greedy
Ejercicios propuestos

La técnica divide & conquer

Es una técnica que consiste en dividir un problema “grande” en una serie


de problemas “pequeños” de resolución más simple y luego combinar las
soluciones de los problemas “pequeños” para obtener una solución del
problema “grande.”

Ricardo Wehbe Programación III - Clase 04


Repaso de la clase anterior
Algoritmos greedy
Ejercicios propuestos

La técnica divide & conquer

Es una técnica que consiste en dividir un problema “grande” en una serie


de problemas “pequeños” de resolución más simple y luego combinar las
soluciones de los problemas “pequeños” para obtener una solución del
problema “grande.”
La técnica es recursiva: los problemas “pequeños” se subdividen a su vez
hasta llegar a un problema “mínimo” de resolución trivial (el caso base de
recurrencia).

Ricardo Wehbe Programación III - Clase 04


Repaso de la clase anterior
Algoritmos greedy
Ejercicios propuestos

La técnica divide & conquer

Es una técnica que consiste en dividir un problema “grande” en una serie


de problemas “pequeños” de resolución más simple y luego combinar las
soluciones de los problemas “pequeños” para obtener una solución del
problema “grande.”
La técnica es recursiva: los problemas “pequeños” se subdividen a su vez
hasta llegar a un problema “mínimo” de resolución trivial (el caso base de
recurrencia).
Se efectúan entonces los siguientes pasos: 1. dividir, 2. conquistar
(resolver los problemas mínimos) y 3. combinar las soluciones obtenidas.

Ricardo Wehbe Programación III - Clase 04


Repaso de la clase anterior
Algoritmos greedy
Ejercicios propuestos

Un algoritmo divide & conquer genérico

1. Algoritmo D&C (x )
2. if CasoBase (x ) {
3. return SoluciónDirecta (x )
4. } else {
5. hx1 , . . . , xn i = descomponer (x )
6. for (i = 0; n < n; i + +) {
7. yi = D&C (xi )
8. }
9. return combinar (y1 , . . . , yn )
10. }

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

1 Repaso de la clase anterior

2 Algoritmos greedy
El problema del cambio
El problema de la mochila
El código de Huffman
Matrimonios en la tribu de los kikimuris

3 Ejercicios propuestos

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Of course none of us are greedy. It’s only the other fellow


who’s greedy.
(Por supuesto, ninguno de nosotros es codicioso. Es siempre el otro el
que es codicioso.)

Milton Friedman en una entrevista en TV con Phil Donahue in 1979

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Algoritmos Greedy

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Algoritmos Greedy

Es una técnica de diseño de algoritmos que también se conocen como


algoritmos voraces o glotones por su traducción desde el inglés.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Algoritmos Greedy

Es una técnica de diseño de algoritmos que también se conocen como


algoritmos voraces o glotones por su traducción desde el inglés.
Un algoritmo greedy construye la solución a partir de decisiones parciales
basadas en la información disponible en el momento. No considera los
efectos de sus decisiones en el futuro y nunca reconsidera una decisión ya
tomada.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Algoritmos Greedy

Es una técnica de diseño de algoritmos que también se conocen como


algoritmos voraces o glotones por su traducción desde el inglés.
Un algoritmo greedy construye la solución a partir de decisiones parciales
basadas en la información disponible en el momento. No considera los
efectos de sus decisiones en el futuro y nunca reconsidera una decisión ya
tomada.
Se suelen utilizar para resolver problemas de optimización. Son muy
eficientes, pero hay que demostrar formalmente su corrección.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Algoritmos Greedy

Es una técnica de diseño de algoritmos que también se conocen como


algoritmos voraces o glotones por su traducción desde el inglés.
Un algoritmo greedy construye la solución a partir de decisiones parciales
basadas en la información disponible en el momento. No considera los
efectos de sus decisiones en el futuro y nunca reconsidera una decisión ya
tomada.
Se suelen utilizar para resolver problemas de optimización. Son muy
eficientes, pero hay que demostrar formalmente su corrección.
Como el nombre lo sugiere, son “cortos de vista.”

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Algoritmos greedy . Candidatos y criterios

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Algoritmos greedy . Candidatos y criterios

Un algoritmo greedy selecciona en cada momento el mejor candidato


para incluirlo en una solución basándose en un criterio determinado.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Algoritmos greedy . Candidatos y criterios

Un algoritmo greedy selecciona en cada momento el mejor candidato


para incluirlo en una solución basándose en un criterio determinado.
En otras palabras, en cada paso se evalúa un candidato de una lista y,
dependiendo del resultado de esta evaluación, se lo agrega a la solución o
se o descarta, por lo menos por el momento.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos de un algoritmo greedy

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos de un algoritmo greedy

Conjunto de candidatos: el conjunto de objetos disponibles para incluir


en la solución.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos de un algoritmo greedy

Conjunto de candidatos: el conjunto de objetos disponibles para incluir


en la solución.
Función de selección: el criterio para seleccionar el mejor candidato.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos de un algoritmo greedy

Conjunto de candidatos: el conjunto de objetos disponibles para incluir


en la solución.
Función de selección: el criterio para seleccionar el mejor candidato.
Función de factibilidad: el criterio para determinar si un candidato puede
ser incluido en la solución.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos de un algoritmo greedy

Conjunto de candidatos: el conjunto de objetos disponibles para incluir


en la solución.
Función de selección: el criterio para seleccionar el mejor candidato.
Función de factibilidad: el criterio para determinar si un candidato puede
ser incluido en la solución.
Función solución: el criterio para determinar si un conjunto solución
resuelve efectivamente el problema.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos de un algoritmo greedy

Conjunto de candidatos: el conjunto de objetos disponibles para incluir


en la solución.
Función de selección: el criterio para seleccionar el mejor candidato.
Función de factibilidad: el criterio para determinar si un candidato puede
ser incluido en la solución.
Función solución: el criterio para determinar si un conjunto solución
resuelve efectivamente el problema.
Objetivo: la magnitud que se quiere maximizar o minimizar.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

1 Repaso de la clase anterior

2 Algoritmos greedy
El problema del cambio
El problema de la mochila
El código de Huffman
Matrimonios en la tribu de los kikimuris

3 Ejercicios propuestos

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Un primer ejemplo. Frutillas en Thurgau

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Un primer ejemplo. Frutillas en Thurgau

Imagine que se encuentra en Thurgau, donde dispone de las siguientes


monedas: 5 francos, 2 francos, un franco, 50 centavos (medio franco), 20
centavos, 10 centavos, 5 centavos, y un centavo.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Un primer ejemplo. Frutillas en Thurgau

Imagine que se encuentra en Thurgau, donde dispone de las siguientes


monedas: 5 francos, 2 francos, un franco, 50 centavos (medio franco), 20
centavos, 10 centavos, 5 centavos, y un centavo.
Usted debe pagar 8.78 francos por un paquete de frutillas (un producto
típico local), y quiere usar la menor cantidad posible de monedas.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Un primer ejemplo. Frutillas en Thurgau

Imagine que se encuentra en Thurgau, donde dispone de las siguientes


monedas: 5 francos, 2 francos, un franco, 50 centavos (medio franco), 20
centavos, 10 centavos, 5 centavos, y un centavo.
Usted debe pagar 8.78 francos por un paquete de frutillas (un producto
típico local), y quiere usar la menor cantidad posible de monedas.
Una manera intuitiva es: elegir siempre la mayor moneda que cubre una
parte de la suma sin pasarse; repetir esto hasta completar el pago.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Un primer ejemplo. Frutillas en Thurgau

Imagine que se encuentra en Thurgau, donde dispone de las siguientes


monedas: 5 francos, 2 francos, un franco, 50 centavos (medio franco), 20
centavos, 10 centavos, 5 centavos, y un centavo.
Usted debe pagar 8.78 francos por un paquete de frutillas (un producto
típico local), y quiere usar la menor cantidad posible de monedas.
Una manera intuitiva es: elegir siempre la mayor moneda que cubre una
parte de la suma sin pasarse; repetir esto hasta completar el pago.
Tenemos entonces la siguiente solución que es óptima:
8.78 fr = 5 fr + 2 fr + 1 fr + 50 ¢+ 20 ¢+ 5 ¢+ 3 × 1 ¢.
Ricardo Wehbe Programación III - Clase 04
El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo del cambio

1. int Algoritmo Cambio(int v ) // input: monto; output: número de monedas


2. int n = 0 // número de monedas usadas
3. int accum = 0 // monto pagado
4. int i = 0
5. int [ ] coins = [500, 200, 100, 50, 20, 10, 5, 1]
6. while (accum < v ) && (i < length(coins)) {
7. if (accum + coins[i] <= v ) {
8. accum = accum + coins[i]
9. n=n+1 // mayor moneda que podemos usar
10. } else {
11. i =i +1 // seguimos buscando
12. }
13. }
14. if (i < length(coins))
15. return n // devolvemos el número de monedas usadas
16. else
17. return -1 // no hay solución
18. }

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo del cambio

1. int Algoritmo Cambio(int v ) // input: monto; output: número de monedas


2. int n = 0 // número de monedas usadas
3. int accum = 0 // monto pagado
4. int i = 0
5. int [ ] coins = [500, 200, 100, 50, 20, 10, 5, 1]
6. while (accum < v ) && (i < length(coins)) {
Θ(v ) 7. if (accum + coins[i] <= v ) {
8. accum = accum + coins[i]
9. n=n+1 // mayor moneda que podemos usar
10. } else {
11. i =i +1 // seguimos buscando
12. }
13. }
14. if (i < length(coins))
15. return n // devolvemos el número de monedas usadas
16. else
17. return -1 // no hay solución
18. }

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Complejidad y correción del algoritmo del cambio

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Complejidad y correción del algoritmo del cambio

El algoritmo tiene un ciclo que en el peor caso itera hasta v . Estamos


entonces en Θ(v ).

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Complejidad y correción del algoritmo del cambio

El algoritmo tiene un ciclo que en el peor caso itera hasta v . Estamos


entonces en Θ(v ).
Observe que el vector de monedas se trata como una constante.
Asumimos que la cantidad de denominaciones de monedas es constante,
por lo que es irrelevante desde el punto de vista de la complejidad.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Complejidad y correción del algoritmo del cambio

El algoritmo tiene un ciclo que en el peor caso itera hasta v . Estamos


entonces en Θ(v ).
Observe que el vector de monedas se trata como una constante.
Asumimos que la cantidad de denominaciones de monedas es constante,
por lo que es irrelevante desde el punto de vista de la complejidad.
En lo que respecta a corrección, considere el siguiente ejemplo.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Un segundo ejemplo. Whisky en Loch Ness, antes de 1971

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Un segundo ejemplo. Whisky en Loch Ness, antes de 1971

Suponga ahora que está en Loch Ness, donde se dispone de las siguientes
monedas: una libra, una corona (un cuarto de libra), media corona (dos
chelines y seis peniques), un florín (dos chelines) un chelín (12 peniques),
6 peniques, 3 peniques, un penique.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Un segundo ejemplo. Whisky en Loch Ness, antes de 1971

Suponga ahora que está en Loch Ness, donde se dispone de las siguientes
monedas: una libra, una corona (un cuarto de libra), media corona (dos
chelines y seis peniques), un florín (dos chelines) un chelín (12 peniques),
6 peniques, 3 peniques, un penique.
Usted debe pagar una libra y 48 peniques por un vaso de whisky (un
producto típico local) y decide usar el algoritmo que tan buen resultado le
dio en Thurgau.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Whisky en Loch Ness, continuación

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Whisky en Loch Ness, continuación


Resumiendo, tenemos las siguientes denominaciones: 1£; 60p (1 corona);
30p ( 12 corona); 24p (1 florín); 12p (1 chelín); 6p, 3p, 1p. Cuatro coronas
hacen una libra, que por lo tanto vale 240p.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Whisky en Loch Ness, continuación


Resumiendo, tenemos las siguientes denominaciones: 1£; 60p (1 corona);
30p ( 12 corona); 24p (1 florín); 12p (1 chelín); 6p, 3p, 1p. Cuatro coronas
hacen una libra, que por lo tanto vale 240p.
Solución propuesta por el algoritmo para pagar 1£48p:

1£ + 0,5 corona +12p + 6p (cuatro monedas)


| {z }
30p

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Whisky en Loch Ness, continuación


Resumiendo, tenemos las siguientes denominaciones: 1£; 60p (1 corona);
30p ( 12 corona); 24p (1 florín); 12p (1 chelín); 6p, 3p, 1p. Cuatro coronas
hacen una libra, que por lo tanto vale 240p.
Solución propuesta por el algoritmo para pagar 1£48p:

1£ + 0,5 corona +12p + 6p (cuatro monedas)


| {z }
30p

Solución óptima:

1£ + 2 × 1florín (tres monedas)


| {z }
48p

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Whisky en Loch Ness, continuación


Resumiendo, tenemos las siguientes denominaciones: 1£; 60p (1 corona);
30p ( 12 corona); 24p (1 florín); 12p (1 chelín); 6p, 3p, 1p. Cuatro coronas
hacen una libra, que por lo tanto vale 240p.
Solución propuesta por el algoritmo para pagar 1£48p:

1£ + 0,5 corona +12p + 6p (cuatro monedas)


| {z }
30p

Solución óptima:

1£ + 2 × 1florín (tres monedas)


| {z }
48p

A partir de 1971, este abstruso sistema fue abandonado. Actualmente


existen las siguientes denominaciones: 2£, 1£, (100p), 50p, 20p, 10p, 5p
and 1p. Y el algoritmo da una solución óptima.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos del problema del cambio

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos del problema del cambio

El conjunto de candidatos es el conjunto de denominaciones de monedas


que tenemos.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos del problema del cambio

El conjunto de candidatos es el conjunto de denominaciones de monedas


que tenemos.
La función de selección elige siempre la mayor moneda.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos del problema del cambio

El conjunto de candidatos es el conjunto de denominaciones de monedas


que tenemos.
La función de selección elige siempre la mayor moneda.
La función de factibilidad verifica que la moneda seleccionada no se pase
del monto por pagarse.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos del problema del cambio

El conjunto de candidatos es el conjunto de denominaciones de monedas


que tenemos.
La función de selección elige siempre la mayor moneda.
La función de factibilidad verifica que la moneda seleccionada no se pase
del monto por pagarse.
La función de solución verifica que hayamos completado el pago.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos del problema del cambio

El conjunto de candidatos es el conjunto de denominaciones de monedas


que tenemos.
La función de selección elige siempre la mayor moneda.
La función de factibilidad verifica que la moneda seleccionada no se pase
del monto por pagarse.
La función de solución verifica que hayamos completado el pago.
El objetivo es minimizar el número de monedas utilizado para el pago.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

1 Repaso de la clase anterior

2 Algoritmos greedy
El problema del cambio
El problema de la mochila
El código de Huffman
Matrimonios en la tribu de los kikimuris

3 Ejercicios propuestos

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El problema de la mochila

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El problema de la mochila

Se trata de otro problema clásico de optimización. Se tiene una mochila


que puede llevar un peso de hasta P. Hay por otro lado n objetos
identificados por sus números, de 1 a n.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El problema de la mochila

Se trata de otro problema clásico de optimización. Se tiene una mochila


que puede llevar un peso de hasta P. Hay por otro lado n objetos
identificados por sus números, de 1 a n.
Cada objeto i ∈ {1, . . . , n} tiene un valor Vi > 0 y un peso Pi > 0.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El problema de la mochila

Se trata de otro problema clásico de optimización. Se tiene una mochila


que puede llevar un peso de hasta P. Hay por otro lado n objetos
identificados por sus números, de 1 a n.
Cada objeto i ∈ {1, . . . , n} tiene un valor Vi > 0 y un peso Pi > 0.
El objetivo es colocar objetos en la mochila de manera que se maximice el
valor almacenado respetando la limitación de peso.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El problema de la mochila

Se trata de otro problema clásico de optimización. Se tiene una mochila


que puede llevar un peso de hasta P. Hay por otro lado n objetos
identificados por sus números, de 1 a n.
Cada objeto i ∈ {1, . . . , n} tiene un valor Vi > 0 y un peso Pi > 0.
El objetivo es colocar objetos en la mochila de manera que se maximice el
valor almacenado respetando la limitación de peso.
Los objetos pueden ser fraccionados. Para un valor 0 ≤ Xi ≤ 1, el valor
almacenado es Xi × Vi y el peso correspondiente es Xi × Pi .

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Un ejemplo del problema de la mochila

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Un ejemplo del problema de la mochila

Supongamos que tenemos cuatro objetos con valores [4, 7, 2, 5] y


pesos[3, 5, 4, 4]. Nuestra mochila tiene una capacidad máxima de 10.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Un ejemplo del problema de la mochila

Supongamos que tenemos cuatro objetos con valores [4, 7, 2, 5] y


pesos[3, 5, 4, 4]. Nuestra mochila tiene una capacidad máxima de 10.
Algunas combinaciones posibles son las siguientes:
P P
X1 X2 X3 X4 Xi × Pi Xi × Vi
0.5 0.5 1 0.5 10 10
1 1 0.5 0 10 12
0 1 0.25 1 10 12.5
0.33 1 0 1 10 13.33
0.33 0.8 0.45 0.8 10 11.83

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Un ejemplo del problema de la mochila

Supongamos que tenemos cuatro objetos con valores [4, 7, 2, 5] y


pesos[3, 5, 4, 4]. Nuestra mochila tiene una capacidad máxima de 10.
Algunas combinaciones posibles son las siguientes:
P P
X1 X2 X3 X4 Xi × Pi Xi × Vi
0.5 0.5 1 0.5 10 10
1 1 0.5 0 10 12
0 1 0.25 1 10 12.5
0.33 1 0 1 10 13.33
0.33 0.8 0.45 0.8 10 11.83
La mejor opción es X1 = 1, X2 = 1, X3 = 0 y X4 = 0,5, que da un valor
de 13,5.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos del problema de la mochila

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos del problema de la mochila

El conjunto de candidatos son los objetos disponibles.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos del problema de la mochila

El conjunto de candidatos son los objetos disponibles.


La función de selección toma el objeto con mejor relación valor / peso.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos del problema de la mochila

El conjunto de candidatos son los objetos disponibles.


La función de selección toma el objeto con mejor relación valor / peso.
La función de factibilidad verifica que no nos excedamos del peso máximo.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos del problema de la mochila

El conjunto de candidatos son los objetos disponibles.


La función de selección toma el objeto con mejor relación valor / peso.
La función de factibilidad verifica que no nos excedamos del peso máximo.
La función de solución verifica que la mochila esté llena o que hayamos
colocado todos los objetos.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Los elementos del problema de la mochila

El conjunto de candidatos son los objetos disponibles.


La función de selección toma el objeto con mejor relación valor / peso.
La función de factibilidad verifica que no nos excedamos del peso máximo.
La función de solución verifica que la mochila esté llena o que hayamos
colocado todos los objetos.
El objetivo es lograr el máximo valor con el peso máximo.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo de la mochila

1. float [] Algoritmo Knapsack (obj [ ] O, int max ) { // O[i].weight, O[i].value


2. float [ ] R // La salida
3. sort O by value / weight // Θ(n log n)
4. for (i = 0; i < n; i + +) { // Θ(n)
5. R[i] = 0
6. }
7. i =0
8. int accum = 0
9. while (accum < max ) && (i < n) { // Θ(n)
10. R[i] = min(1, (max − accum)/O[i].weight)
11. accum = accum + R[i] ∗ O[i].weight
12. i ++
13. }
14. return R
15. }

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo de la mochila

1. float [] Algoritmo Knapsack (obj [ ] O, int max ) { // O[i].weight, O[i].value


2. float [ ] R // La salida
Θ(n log n) 3. sort O by value / weight // Θ(n log n)
4. for (i = 0; i < n; i + +) { // Θ(n)
Θ(n)
5. R[i] = 0
6. }
7. i =0
8. int accum = 0
9. while (accum < max ) && (i < n) { // Θ(n)
Θ(n)
10. R[i] = min(1, (max − accum)/O[i].weight)
11. accum = accum + R[i] ∗ O[i].weight
12. i ++
13. }
14. return R
15. }

Θ(n log n) + Θ(n) + Θ(n) = Θ(n log n)

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Complejidad y corrección del algoritmo de la mochila

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Complejidad y corrección del algoritmo de la mochila

La complejidad del algoritmo está dada sobre todo por el proceso de


ordenamiento previo. La complejidad es entonces Θ(n log n).

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Complejidad y corrección del algoritmo de la mochila

La complejidad del algoritmo está dada sobre todo por el proceso de


ordenamiento previo. La complejidad es entonces Θ(n log n).
El algoritmo es correcto. La solución que da es óptima.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Complejidad y corrección del algoritmo de la mochila

La complejidad del algoritmo está dada sobre todo por el proceso de


ordenamiento previo. La complejidad es entonces Θ(n log n).
El algoritmo es correcto. La solución que da es óptima.
Se verán en el curso otras variantes de este algoritmo que requerirán
ajustes sobre este algoritmo.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

1 Repaso de la clase anterior

2 Algoritmos greedy
El problema del cambio
El problema de la mochila
El código de Huffman
Matrimonios en la tribu de los kikimuris

3 Ejercicios propuestos

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Códigos de longitud fija y variable

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Códigos de longitud fija y variable

En un código de longitud fija es un código todas las palabras de código


tienen la misma longitud. Ejemplo: codificamos {A, B, C , D, E , F } con
A → 000, B → 001, C → 010, D → 011, E → 100 y F → 101.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Códigos de longitud fija y variable

En un código de longitud fija es un código todas las palabras de código


tienen la misma longitud. Ejemplo: codificamos {A, B, C , D, E , F } con
A → 000, B → 001, C → 010, D → 011, E → 100 y F → 101.
En un código de longitud variable las palabras de código tienen diferente
longitud. Ejemplo: A → 0, B → 101, C → 100, D → 111, E → 1101 y
F → 1100.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Códigos de longitud fija y variable

En un código de longitud fija es un código todas las palabras de código


tienen la misma longitud. Ejemplo: codificamos {A, B, C , D, E , F } con
A → 000, B → 001, C → 010, D → 011, E → 100 y F → 101.
En un código de longitud variable las palabras de código tienen diferente
longitud. Ejemplo: A → 0, B → 101, C → 100, D → 111, E → 1101 y
F → 1100.
En un código sin prefijos ninguna palabra es un prefijo de otra. Los dos
códigos considerados son sin prefijos.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Códigos de longitud fija y variable

En un código de longitud fija es un código todas las palabras de código


tienen la misma longitud. Ejemplo: codificamos {A, B, C , D, E , F } con
A → 000, B → 001, C → 010, D → 011, E → 100 y F → 101.
En un código de longitud variable las palabras de código tienen diferente
longitud. Ejemplo: A → 0, B → 101, C → 100, D → 111, E → 1101 y
F → 1100.
En un código sin prefijos ninguna palabra es un prefijo de otra. Los dos
códigos considerados son sin prefijos.
En un mensaje de 10000 símbolos la frecuencia (en cientos) es A, 45; B,
13; C , 12; D, 16; E , 9; y F , 5. La codificación con longitud fija requiere
30000 bits; la de longitud variable, 22400 bits.
Ricardo Wehbe Programación III - Clase 04
El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Souvenir. Colas de prioridad (priority queues)

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Souvenir. Colas de prioridad (priority queues)

Una cola de prioridad es una estructura de datos que contiene un


conjunto S de elementos, cada uno de ellos asociado a una clave.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Souvenir. Colas de prioridad (priority queues)

Una cola de prioridad es una estructura de datos que contiene un


conjunto S de elementos, cada uno de ellos asociado a una clave.
Hay dos tipos de colas de prioridad: de máxima y de mínima. Las
respectivas implementaciones son simétricas.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Souvenir. Colas de prioridad (priority queues)

Una cola de prioridad es una estructura de datos que contiene un


conjunto S de elementos, cada uno de ellos asociado a una clave.
Hay dos tipos de colas de prioridad: de máxima y de mínima. Las
respectivas implementaciones son simétricas.
Las operaciones asociadas con las colas de prioridad mínima (las que nos
interesan aquí) son:

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Souvenir. Colas de prioridad (priority queues)

Una cola de prioridad es una estructura de datos que contiene un


conjunto S de elementos, cada uno de ellos asociado a una clave.
Hay dos tipos de colas de prioridad: de máxima y de mínima. Las
respectivas implementaciones son simétricas.
Las operaciones asociadas con las colas de prioridad mínima (las que nos
interesan aquí) son:
insert(S, x ): inserta el elemento x en la cola S. La complejidad de
esta operación si está bien implementada es Θ(log n).

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Souvenir. Colas de prioridad (priority queues)

Una cola de prioridad es una estructura de datos que contiene un


conjunto S de elementos, cada uno de ellos asociado a una clave.
Hay dos tipos de colas de prioridad: de máxima y de mínima. Las
respectivas implementaciones son simétricas.
Las operaciones asociadas con las colas de prioridad mínima (las que nos
interesan aquí) son:
insert(S, x ): inserta el elemento x en la cola S. La complejidad de
esta operación si está bien implementada es Θ(log n).
extract-min(S): devuelve el elemento x con la menor clave y lo
elimina de la cola S. La complejidad de esta operación si está bien
implementada es Θ(log n).

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El código de Huffman. Introducción

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El código de Huffman. Introducción

El código de Huffman se construye a través de un algoritmo greedy .

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El código de Huffman. Introducción

El código de Huffman se construye a través de un algoritmo greedy .


La idea es construir un árbol binario comenzando por las hojas, que son
los símbolos por ser codificados.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El código de Huffman. Introducción

El código de Huffman se construye a través de un algoritmo greedy .


La idea es construir un árbol binario comenzando por las hojas, que son
los símbolos por ser codificados.
Para cada símbolo, el camino desde la raíz nos da la codificación.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El código de Huffman. Introducción

El código de Huffman se construye a través de un algoritmo greedy .


La idea es construir un árbol binario comenzando por las hojas, que son
los símbolos por ser codificados.
Para cada símbolo, el camino desde la raíz nos da la codificación.
Cada nodo interno del árbol está asociado con una clave de una cola de
prioridad míma.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Un ejemplo del código de Huffman


100

0 1

A: 45 55

0 1

25 30

0 1 0 1

C: 12 B: 13 14 D: 16

0 1

F: 5 E: 9

A → 0 B → 101 C → 100 D → 111 E → 1101 F → 1100

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

La construcción del árbol de Huffman

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

La construcción del árbol de Huffman

<F:5, E:9, C:12, B:13, D:16, A:45>

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

La construcción del árbol de Huffman

<F:5, E:9, C:12, B:13, D:16, A:45>


<C:12, B:13, X1 :14, D:16, A:45>

14

0 1

F: 5 E: 9

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

La construcción del árbol de Huffman

<F:5, E:9, C:12, B:13, D:16, A:45>


<C:12, B:13, X1 :14, D:16, A:45>
<X1 :14, D:16, X2 :25, A:45>

25

0 1

C: 12 B: 13 14

0 1

F: 5 E: 9

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

La construcción del árbol de Huffman

<F:5, E:9, C:12, B:13, D:16, A:45>


<C:12, B:13, X1 :14, D:16, A:45>
<X1 :14, D:16, X2 :25, A:45>
<X2 :25, X3 :30, A:45>
25 30

0 1 0 1

C: 12 B: 13 14 D: 16

0 1

F: 5 E: 9

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

La construcción del árbol de Huffman

<F:5, E:9, C:12, B:13, D:16, A:45>


<C:12, B:13, X1 :14, D:16, A:45>

55 <X1 :14, D:16, X2 :25, A:45>


0 1
<X2 :25, X3 :30, A:45>
25 30
<A:45, X4 :55>
0 1 0 1

C: 12 B: 13 14 D: 16

0 1

F: 5 E: 9

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

La construcción del árbol de Huffman

<F:5, E:9, C:12, B:13, D:16, A:45>


100

0 1
<C:12, B:13, X1 :14, D:16, A:45>

A: 45 55 <X1 :14, D:16, X2 :25, A:45>


0 1
<X2 :25, X3 :30, A:45>
25 30
<A:45, X4 :55>
0 1 0 1
<X5 :100>
C: 12 B: 13 14 D: 16

0 1

F: 5 E: 9

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo de Huffman

1. void Algoritmo Huffman(set C ) // símbolos


2. n = |C |
3. initialize min-priority queue Q // la cola de prioridad
4. Q ←C // Θ(n log n)
5. for (i = 1; i < n; i + +) { // Θ(n)
6. x = extract-min(Q) // Θ(log n)
7. y = extract-min(Q) // Θ(log n)
8. create new node z
9. left(z) = x
10. right(z) = y
11. f (z) = f (x ) + f (y ) // f (x ) is freq. of x
12. insert(Q, z) // Θ(log n)
13. }
14. return z // la raíz del árbol
15. }

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo de Huffman

1. void Algoritmo Huffman(set C ) // símbolos


2. n = |C |
3. initialize min-priority queue Q // la cola de prioridad
Θ(n log n) 4. Q ←C // Θ(n log n)
Θ(n) 5. for (i = 1; i < n; i + +) { // Θ(n)
Θ(log n) 6. x = extract-min(Q) // Θ(log n)
Θ(log n) 7. y = extract-min(Q) // Θ(log n)
8. create new node z
9. left(z) = x
10. right(z) = y
11. f (z) = f (x ) + f (y ) // f (x ) is freq. of x
Θ(log n) 12. insert(Q, z) // Θ(log n)
13. }
14. return z // la raíz del árbol
15. }

Θ(n log n) + Θ(n log n) = Θ(n log n)

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Complejidad del algoritmo de Huffman

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Complejidad del algoritmo de Huffman

La inicialización tiene un costo O(n) (ver ejercicios).


El ciclo for tiene un costo O(n).

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Complejidad del algoritmo de Huffman

La inicialización tiene un costo O(n) (ver ejercicios).


El ciclo for tiene un costo O(n).
Las inserciones tienen un costo O(log n).

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Complejidad del algoritmo de Huffman

La inicialización tiene un costo O(n) (ver ejercicios).


El ciclo for tiene un costo O(n).
Las inserciones tienen un costo O(log n).
Por lo tanto, estamos en O(n log n).

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

1 Repaso de la clase anterior

2 Algoritmos greedy
El problema del cambio
El problema de la mochila
El código de Huffman
Matrimonios en la tribu de los kikimuris

3 Ejercicios propuestos

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Las reglas del juego

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Las reglas del juego


La idea es construir un algoritmo para que n hombres y n mujeres de la
tribu formen matrimonios estables.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Las reglas del juego


La idea es construir un algoritmo para que n hombres y n mujeres de la
tribu formen matrimonios estables.
Cada hombre tiene una lista en la que todas las mujeres se encuentran
ranqueadas por orden de preferencia. Lo mismo vale para las mujeres:
cada una de ellas tiene una lista con todos los hombres ranqueados por
orden de preferencia.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Las reglas del juego


La idea es construir un algoritmo para que n hombres y n mujeres de la
tribu formen matrimonios estables.
Cada hombre tiene una lista en la que todas las mujeres se encuentran
ranqueadas por orden de preferencia. Lo mismo vale para las mujeres:
cada una de ellas tiene una lista con todos los hombres ranqueados por
orden de preferencia.
Consideremos entonces un conjunto M = {m1 , m2 , . . . , mn } de hombres y
un conjunto F = {f1 , f2 , . . . , fn } de mujeres. Denotamos con M × F al
conjunto de todos los posibles pares ordenados (m, f ) con m ∈ M y
f ∈ F.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Las reglas del juego


La idea es construir un algoritmo para que n hombres y n mujeres de la
tribu formen matrimonios estables.
Cada hombre tiene una lista en la que todas las mujeres se encuentran
ranqueadas por orden de preferencia. Lo mismo vale para las mujeres:
cada una de ellas tiene una lista con todos los hombres ranqueados por
orden de preferencia.
Consideremos entonces un conjunto M = {m1 , m2 , . . . , mn } de hombres y
un conjunto F = {f1 , f2 , . . . , fn } de mujeres. Denotamos con M × F al
conjunto de todos los posibles pares ordenados (m, f ) con m ∈ M y
f ∈ F.
Un emparejamiento es un conjunto de pares de M × F con la propiedad
de que cada miembro de M y cada miembro de F aparece a lo sumo una
vez (no se permite la poligamia.)

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Las reglas del juego


La idea es construir un algoritmo para que n hombres y n mujeres de la
tribu formen matrimonios estables.
Cada hombre tiene una lista en la que todas las mujeres se encuentran
ranqueadas por orden de preferencia. Lo mismo vale para las mujeres:
cada una de ellas tiene una lista con todos los hombres ranqueados por
orden de preferencia.
Consideremos entonces un conjunto M = {m1 , m2 , . . . , mn } de hombres y
un conjunto F = {f1 , f2 , . . . , fn } de mujeres. Denotamos con M × F al
conjunto de todos los posibles pares ordenados (m, f ) con m ∈ M y
f ∈ F.
Un emparejamiento es un conjunto de pares de M × F con la propiedad
de que cada miembro de M y cada miembro de F aparece a lo sumo una
vez (no se permite la poligamia.)
Un emparejamiento perfecto es un conjunto de pares de M × F con la
propiedad de que cada miembro de M y cada miembro de F aparece
exactamente una vez (no se permite la poligamia ni el celibato.)

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Emparejamientos estables e inestables

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Emparejamientos estables e inestables

Observemos que el problema de producir un emparejamiento perfecto es


fácil: podríamos simplemente asociar cada hombre mi con una mujer fi .

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Emparejamientos estables e inestables

Observemos que el problema de producir un emparejamiento perfecto es


fácil: podríamos simplemente asociar cada hombre mi con una mujer fi .
El inconveniente de este abordaje simplista es que puede producirse la
siguiente situación: se tienen dos parejas (m, f ) y (m0 , f 0 ). En la lista de
m, f 0 se encuentra ranqueada antes que f y en la lista de f 0 , m está
ranqueado antes que m0 .

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Emparejamientos estables e inestables

Observemos que el problema de producir un emparejamiento perfecto es


fácil: podríamos simplemente asociar cada hombre mi con una mujer fi .
El inconveniente de este abordaje simplista es que puede producirse la
siguiente situación: se tienen dos parejas (m, f ) y (m0 , f 0 ). En la lista de
m, f 0 se encuentra ranqueada antes que f y en la lista de f 0 , m está
ranqueado antes que m0 .
La tentación de que m y f 0 abandonen a sus parejas y se fuguen juntos es
grande. Esto es una inestabilidad. Un emparejamiento es inestable si
contiene alguna inestabilidad.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Emparejamientos estables e inestables

Observemos que el problema de producir un emparejamiento perfecto es


fácil: podríamos simplemente asociar cada hombre mi con una mujer fi .
El inconveniente de este abordaje simplista es que puede producirse la
siguiente situación: se tienen dos parejas (m, f ) y (m0 , f 0 ). En la lista de
m, f 0 se encuentra ranqueada antes que f y en la lista de f 0 , m está
ranqueado antes que m0 .
La tentación de que m y f 0 abandonen a sus parejas y se fuguen juntos es
grande. Esto es una inestabilidad. Un emparejamiento es inestable si
contiene alguna inestabilidad.
En cambio, un emparejamiento es estable si es perfecto y no contiene
ninguna inestabilidad.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Emparejamientos estables e inestables

Observemos que el problema de producir un emparejamiento perfecto es


fácil: podríamos simplemente asociar cada hombre mi con una mujer fi .
El inconveniente de este abordaje simplista es que puede producirse la
siguiente situación: se tienen dos parejas (m, f ) y (m0 , f 0 ). En la lista de
m, f 0 se encuentra ranqueada antes que f y en la lista de f 0 , m está
ranqueado antes que m0 .
La tentación de que m y f 0 abandonen a sus parejas y se fuguen juntos es
grande. Esto es una inestabilidad. Un emparejamiento es inestable si
contiene alguna inestabilidad.
En cambio, un emparejamiento es estable si es perfecto y no contiene
ninguna inestabilidad.
El objetivo construir un algoritmo que nos dé un emparejamiento estable.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo para los kikimuris

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo para los kikimuris


Supongamos la siguiente situación: un hombre m le propone matrimonio
a una mujer f , que figura en una alta posición en su lista. ¿Puede
agregarse inmediatamente la pareja al conjunto de soluciones?

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo para los kikimuris


Supongamos la siguiente situación: un hombre m le propone matrimonio
a una mujer f , que figura en una alta posición en su lista. ¿Puede
agregarse inmediatamente la pareja al conjunto de soluciones?
No, porque podría suceder que en el futuro algún hombre m0 , a quien f
prefiere, le proponga matrimonio.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo para los kikimuris


Supongamos la siguiente situación: un hombre m le propone matrimonio
a una mujer f , que figura en una alta posición en su lista. ¿Puede
agregarse inmediatamente la pareja al conjunto de soluciones?
No, porque podría suceder que en el futuro algún hombre m0 , a quien f
prefiere, le proponga matrimonio.
Por otro lado, sería riesgoso para f rechazar a m: podría suceder que no
se produzcan nuevas propuestas.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo para los kikimuris


Supongamos la siguiente situación: un hombre m le propone matrimonio
a una mujer f , que figura en una alta posición en su lista. ¿Puede
agregarse inmediatamente la pareja al conjunto de soluciones?
No, porque podría suceder que en el futuro algún hombre m0 , a quien f
prefiere, le proponga matrimonio.
Por otro lado, sería riesgoso para f rechazar a m: podría suceder que no
se produzcan nuevas propuestas.
Para resolver este problema, se crea una etapa intermedia: compromiso.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo para los kikimuris


Supongamos la siguiente situación: un hombre m le propone matrimonio
a una mujer f , que figura en una alta posición en su lista. ¿Puede
agregarse inmediatamente la pareja al conjunto de soluciones?
No, porque podría suceder que en el futuro algún hombre m0 , a quien f
prefiere, le proponga matrimonio.
Por otro lado, sería riesgoso para f rechazar a m: podría suceder que no
se produzcan nuevas propuestas.
Para resolver este problema, se crea una etapa intermedia: compromiso.
La situación puede ser la siguiente: en un momento hay hombres y
mujeres comprometidos y libres (no comprometidos.) Un hombre que está
libre le propondrá matrimonio a la mujer que está más alto en su lista (no
importa si está comprometida o no.) Ésta aceptará el compromiso si está
libre o si su actual novio está más abajo en su lista. En este último caso,
el anterior novio vuelve a quedar libre.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo para los kikimuris


Supongamos la siguiente situación: un hombre m le propone matrimonio
a una mujer f , que figura en una alta posición en su lista. ¿Puede
agregarse inmediatamente la pareja al conjunto de soluciones?
No, porque podría suceder que en el futuro algún hombre m0 , a quien f
prefiere, le proponga matrimonio.
Por otro lado, sería riesgoso para f rechazar a m: podría suceder que no
se produzcan nuevas propuestas.
Para resolver este problema, se crea una etapa intermedia: compromiso.
La situación puede ser la siguiente: en un momento hay hombres y
mujeres comprometidos y libres (no comprometidos.) Un hombre que está
libre le propondrá matrimonio a la mujer que está más alto en su lista (no
importa si está comprometida o no.) Ésta aceptará el compromiso si está
libre o si su actual novio está más abajo en su lista. En este último caso,
el anterior novio vuelve a quedar libre.
El algoritmo termina cuando no queda nadie libre.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo para los kikimuris

1. Algoritmo Kikimuris (int[][] M, int[][] F )


2. inicialmente, todos están libres
3. mientras haya un hombre libre m que no le haya propuesto
matrimonio a alguna mujer
4. Elegir m
5. Elegir f (la mujer que está más alta en la lista de m
a quien m aún no le propuso matrimonio)
6. si f está libre
7. (m, f ) se comprometen
8. sino //f está comprometida con m0
9. si f prefiere a m0
10. m continúa libre
11. sino //f prefiere a m
12. (m, f ) se comprometen
13. m0 queda libre
14. fin si
15. fin si
16. fin mientras
17. devolver la lista de parejas comprometidas

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Análisis del algoritmo: terminación

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Análisis del algoritmo: terminación

El algoritmo termina a lo sumo luego de n2 iteraciones. Si denotamos por


P(t) a la cantidad de pares (m, f ) tales que m le ha propuesto
matrimonio a f observamos que en cada iteración algún hombre le
propone matrimonio a una mujer a quien no le ha propuesto matrimonio
antes, vemos que se cumple que P(t + 1) > P(t). Como sólo hay n2
posibles pares, esto debe terminar a lo sumo luego de n2 iteraciones.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Análisis del algoritmo: terminación

El algoritmo termina a lo sumo luego de n2 iteraciones. Si denotamos por


P(t) a la cantidad de pares (m, f ) tales que m le ha propuesto
matrimonio a f observamos que en cada iteración algún hombre le
propone matrimonio a una mujer a quien no le ha propuesto matrimonio
antes, vemos que se cumple que P(t + 1) > P(t). Como sólo hay n2
posibles pares, esto debe terminar a lo sumo luego de n2 iteraciones.
En la siguiente diapositiva consideraremos la corrección del algoritmo, es
decir, que devuelve un emparejamiento estable.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Análisis del algoritmo: corrección

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Análisis del algoritmo: corrección

La primera observación es que, si un hombre está libre en un punto


determinado, hay entonces al menos una mujer a quien no ha propuesto
matrimonio. Si esto no fuera así, ya le habría propuesto matrimonio a
todas y si está libre es porque todas lo rechazaron o cancelaron el
compromiso. Por lo tanto, todas estarían comprometidas. Pero para esto
hacen falta n hombres.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Análisis del algoritmo: corrección

La primera observación es que, si un hombre está libre en un punto


determinado, hay entonces al menos una mujer a quien no ha propuesto
matrimonio. Si esto no fuera así, ya le habría propuesto matrimonio a
todas y si está libre es porque todas lo rechazaron o cancelaron el
compromiso. Por lo tanto, todas estarían comprometidas. Pero para esto
hacen falta n hombres.
Por lo tanto, el algoritmo produce un emparejamiento perfecto.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

Análisis del algoritmo: corrección

La primera observación es que, si un hombre está libre en un punto


determinado, hay entonces al menos una mujer a quien no ha propuesto
matrimonio. Si esto no fuera así, ya le habría propuesto matrimonio a
todas y si está libre es porque todas lo rechazaron o cancelaron el
compromiso. Por lo tanto, todas estarían comprometidas. Pero para esto
hacen falta n hombres.
Por lo tanto, el algoritmo produce un emparejamiento perfecto.
Finalmente hay que mostrar que el algoritmo no produce inestabilidades.
Supongamos que hubiera alguna. Entonces tendríamos que hay dos
parejas (m, f ) y (m0 , f 0 ) y que m prefiere a f 0 y f 0 a m. Pero en tal caso,
m habría propuesto matrimonio a f 0 antes que a f y f 0 no habría roto su
compromiso por m0 .

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo de los matrimonios es greedy

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo de los matrimonios es greedy

El algoritmo es greedy , ya que cada hombre tiene un conjunto de


candidatos (todas las mujeres) y un criterio de selección (el orden del
listado.) La función de factibilidad verifica que ningún hombre le
proponga matrimonio dos veces a la misma mujer y que sólo los hombres
libres puedan proponer matrimonio.

Ricardo Wehbe Programación III - Clase 04


El problema del cambio
Repaso de la clase anterior
El problema de la mochila
Algoritmos greedy
El código de Huffman
Ejercicios propuestos
Matrimonios en la tribu de los kikimuris

El algoritmo de los matrimonios es greedy

El algoritmo es greedy , ya que cada hombre tiene un conjunto de


candidatos (todas las mujeres) y un criterio de selección (el orden del
listado.) La función de factibilidad verifica que ningún hombre le
proponga matrimonio dos veces a la misma mujer y que sólo los hombres
libres puedan proponer matrimonio.
El algoritmo es parcial: las mujeres salen perjudicadas. Considere el caso:
m prefiere a w , m0 prefiere a w 0 , w prefiere a m0 , y w 0 prefiere a m. Dado
que las preferencias de los hombres no chocan entre sí, las preferencias de
las mujeres no son tenidas en cuenta. La sociedad kikimuri es machista.

Ricardo Wehbe Programación III - Clase 04


Repaso de la clase anterior
Algoritmos greedy
Ejercicios propuestos

Ejercicios propuestos 1

1 El conservatorio de música de Fraile Muerto es una institución con


limitados recursos. Cuando se acercan los exámenes, un solo piano de
cola está disponible para que los estudiantes puedan practicar. Los
estudiantes deben presentar una solicitud para usar el piano. La solicitud
debe indicar la hora de inicio y de finalización.
Tenemos el conjunto de solicitudes para un día determinado y queremos
maximizar el número de estudiantes que pueden usar el piano. Proponga
un esquema greedy para resolver este problema.
2 Varios cursos están programados en el campus de la Universidad de Fraile
Muerto. Por supuesto, no puede haber dos cursos al mismo tiempo en la
misma aula. Dé un algoritmo greedy que calcule el número mínimo de
aulas necesarias para programar todos los cursos. Usted tiene a su
disposición un número arbitrario de aulas.

Ricardo Wehbe Programación III - Clase 04


Repaso de la clase anterior
Algoritmos greedy
Ejercicios propuestos

Ejercicios propuestos 2

3 Tenemos un conjunto de tareas que deben ser realizadas por un único


recurso, de manera que no se pueden realizar dos al mismo tiempo. Cada
tarea j tiene un tiempo de procesamiento tj y un plazo dj . Si la tarea j
comienza en el tiempo sj , terminará en el tiempo fj = sj + tj . Definimos la
demora `j de la tarea j como `j = max(0, fj − dj ).
Queremos un esquema greedy que minimice la máxima demora, es decir
L = maxj `j .
4 Encuentre un esquema de prueba para el algoritmo greedy del problema
del cambio en el caso de las frutillas.
5 Implemente el algoritmo del código de Huffman, no necesariamente con
árboles.

Ricardo Wehbe Programación III - Clase 04


Repaso de la clase anterior
Algoritmos greedy
Ejercicios propuestos

Ejercicios propuestos 3

6 El rincón surrealista. El Centro de Investigaciones Espaciales de Fraile


Muerto tiene un proyecto secreto sobre antimateria cuántica. La
antimateria viene en frascos. Cada frasco p tiene asociado un entero
positivo pk . Es importante llevar este número a 1 en la menor cantidad de
pasos que sea posible. Para ello, podemos realizar tres operaciones:
Incrementar el número pk en 1: pk → pk + 1.
Decrementar el número pk en 1: pk → pk − 1.
Dividir el número por 2: pk → pk /2. Debido a la energía destructiva
liberada cuando se realiza este proceso, los controles de seguridad
sólo permiten que suceda si el número pk es par.
Encuentre un proceso para minimizar el número de pasos requerido para
llevar un valor pk dado a 1

Ricardo Wehbe Programación III - Clase 04

También podría gustarte