Você está na página 1de 2

Universidade Federal de Campina Grande

Departamento de Sistemas e Computao


Curso de Bacharelado em Cincia da Computao
Disciplina: Anlise e Tcnicas de Algoritmos
Professor: Thiago Emmanuel Pereira

Aluna(o) / matricula: __________________________________________________

Prova 1 - 20/12/2016

1. Responda de maneira breve


a. O que voc entende por um algoritmo guloso?
b. Quais as vantagens e desvantagens de usar algoritmos gulosos?
c. Que tipo de problema tipicamente resolvido com algoritmos gulosos?
d. Em que ocasio geralmente se aplica anlise amortizada?

2. Prove a corretude do algoritmo de Fibonnaci abaixo

Fib(n)
if n = 0 then
return 0
else
a=0
b=1
i=2
while i n do
c=a+b
a=b
b=c
i=i+1
return b

3. Cansei! Aps 3 anos sem frias vou pegar a estrada no dia 30 de dezembro atravessando o
serto paraibano at chegar no Rio Grande do Norte. Quando o tanque do meu carro est
cheio, possvel dirigir por d quilmetros (autonomia do veculo). Meu guia de viagem
mostra todos os n pontos em que posso abastecer, da origem at o destino. Mostra tambm
a distncia entre todos os pontos de abastecimento. Eu quero parar o mnimo de vezes
possvel para abastecer durante essa viagem. Escreva um algoritmo guloso que decida,
dada a autonomia do veculo e um vetor de distncia entre os pontos de abastecimento
(considere que existe um ponto tanto na origem quanto no destino), em que pontos eu devo
parar para abastecer. Obviamente, no desejvel que falte gasolina no carro. Para
simplificar seu algoritmo, considere que eu comearei a viagem com o tanque cheio. Alm
disso, considere que eu sempre completo o tanque com combustvel em cada parada de
reabastecimento.

Entrada: Uma sequncia (d1 , d2 , d3 , ..., dn2 , dn1 ) , onde di a distncia entre os postos de
gasolina di e di+1 .
Sada: Uma sequncia (s1 , s2 , s3 , ..., sn2 , sn1 , sn ) que indica a programao de paradas. Assim,
quando si = 0 , no devo parar no posto i . Por sua vez, quando si = 1 , devo parar no ponto i
a) Implemente o algoritmo (pseudo-cdigo, C, python ou java)
b) Fornea a complexidade do algoritmo. Justifique sua resposta.

4. Um problema comum em desenho auxiliado com computador a remoo de linhas ocultas


--- linhas obscurecidas por outras partes do desenho. Voc deve escrever um algoritmo para
auxiliar arquitetos no desenho de horizontes de cidades dada a localizao dos edifcios da
cidade. Para tornar o problema tratvel, todas as construes tm formas retangulares e
esto sobre o mesmo nvel do solo. Ainda, para simplificar o problema, a cidade definida
em duas dimenses. Um edifcio definido como uma tripla ordenada (Li , Hi , Ri) onde Li e
Ri so as coordenadas da direita e esquerda, respectivamente, do edifcio i (0 < Li < Ri) e Hi
a altura do edifcio. No diagrama abaixo os edifcios so mostrado esquerda e definidos
pelas triplas

(1, 11, 5),(2, 6, 7),(3, 13, 9),(12, 7, 16),(14, 3, 25),(19, 18, 22),(23, 13, 29),(24, 4, 28)

o horizonte, mostrado na direita, representado pela sequncia:

(1, 11, 3, 13, 9, 0, 12, 7, 16, 3, 19, 18, 22, 3, 23, 13, 29, 0)

Entrada: A entrada do algoritmos uma sequncia (lista ou vetor) das triplas (nmero
inteiros) dos edifcios. Todas as triplas so ordenadas por Li, a coordenada esquerda do
edifcio, de maneira que o edifcio com a menor coordenada esquerda o primeiro elemento
da sequncia.
Sada: A sada uma sequncia que descreve o horizonte como definido no exemplo acima.
Nessa sequncia (v 1 , v 2 , v 3 , ..., v n2 , v n1 , v n ) , v i para um nmero par i representar uma linha
horizontal (a altura de um edifcio). Por sua vez, quando i um nmero mpar, v i
representar uma linha vertical (baseada no eixo-x, portanto). A ltima entrada no vetor que
representa o horizonte sempre 0.
a) Implemente o algoritmo (pseudo-cdigo, C, python ou java)
b) Fornea a complexidade do algoritmo. Justifique sua resposta.