
MAC 338 - An´alise de Algoritmos
Departamento de Ciˆencia da Computa¸c˜ao
Primeiro semestre de 2013
Lista 5
1. Mostre um exemplo para cada um dos trˆes primeiros crit´erios gulosos apresentados para o problema da cole¸c˜ao
m´axima de intervalos disjuntos visto em aula que prove que o algoritmo obtido usando estes crit´erios pode
produzir um conjunto de intervalos disjuntos que n˜ao ´e m´aximo.
2. Considere o algoritmo visto em aula para o problema da colora¸c˜ao de intervalos. Modifique-o para que, al´em
da m-colora¸c˜ao c, ele devolva um conjunto Sde mintervalos e um instante ttal que s[i]≤t < f[i] para todo i
em S.
3. Considere o algoritmo do problema da colora¸c˜ao de intervalos visto em aula. Nele, os intervalos s˜ao ordenados
no come¸co pelo valor de s[i]. O que acontece se ordenarmos os intervalos por f[i] em vez de s[i]? O algoritmo
continua correto? Prove, apresentando um certificado como o do exerc´ıcio anterior para ele, ou dˆe um contra-
exemplo.
4. Use c´odigos de Huffman para o conjunto de caracteres do enunciado deste exerc´ıcio. Inclua todos os caracteres.
Quantos bits foram economizados no armazenamento do enunciado desse exerc´ıcio usando c´odigos de Huffman
versus uma codifica¸c˜ao onde todos os caracteres s˜ao codificados por cadeias de bits do mesmo comprimento?
5. Considere um conjunto de livros numerados de 1 a n. Suponha que o livro item peso pie que 0 < pi<1 para
cada i.
Problema: Dado ne os n´umeros p1,...,pn, acondicionar os livros no menor n´umero poss´ıvel de envelopes de
modo que cada envelope tenha no m´aximo 2 livros e o peso do conte´udo de cada envelope seja no m´aximo 1.
Escreva um algoritmo guloso que resolva o problema em tempo O(nlog n). (Sugest˜ao: comece por escrever um
algoritmo recursivo que apenas calcula o n´umero m´ınimo de envelopes.) Aplique seu algoritmo a um exemplo
interessante. Mostre que seu algoritmo est´a correto.
6. (CLRS 16-4) Seja 1,...,n um conjunto de tarefas. Cada tarefa consome um dia de trabalho; durante um dia
de trabalho somente uma das tarefas pode ser executada. Os dias de trabalho s˜ao numerados de 1 a n. A cada
tarefa test´a associado um prazo pt: a tarefa deveria ser executada em algum dia do intervalo 1..pt. A cada
tarefa test´a associada uma multa n˜ao-negativa mt. Se uma dada tarefa t´e executada depois do prazo pt, sou
obrigado a pagar a multa mt(mas a multa n˜ao depende do n´umero de dias de atraso).
Problema: Programar as tarefas (ou seja, estabelecer uma bije¸c˜ao entre as tarefas e os dias de trabalho) de
modo a minimizar a multa total.
Escreva um algoritmo guloso para resolver o problema. Prove que seu algoritmo est´a correto. Analise o consumo
de tempo.
7. A entrada ´e uma seq¨uˆencia de n´umeros x1, x2,...,xnonde n´e par. Pro jete que particione a entrada em n/2
pares da seguinte maneira. Para cada par, computamos a soma de seus n´umeros. Denote por s1, s2,...,sn/2as
n/2 somas. O algoritmo deve encontrar uma parti¸c˜ao que minimize a m´aximo das somas e deve ser t˜ao eficiente
quanto poss´ıvel. Explique porque ele funciona e determine a sua complexidade.
8. Descreva um algoritmo eficiente que, dado um conjunto {x1, x2,...,xn}de pontos na reta real, determine o menor
conjunto de intervalos fechados de comprimento um que cont´em todos os pontos dados. Justifique informalmente
o seu algoritmo e analise a sua complexidade.
9. Considere uma estrada calma e longa, com algumas poucas casas `a beira. (Podemos imaginar a estrada como
uma linha reta, com uma extremidade leste e uma extremidade oeste.) Suponha que, apesar da atmosfera
buc´olica, os moradores dessas casas s˜ao ´avidos usu´arios de telefones celulares. Vocˆe quer colocar esta¸c˜oes-base
de telefonia celular ao longo da estrada, de maneira que toda casa esteja a no m´aximo 6 quil´ometros de uma das
esta¸c˜oes-base.
Dˆe um algoritmo eficiente que atinge esse objetivo usando um n´umero m´ınimo de esta¸c˜oes-base. Justifique sua
resposta.