Aulas 26, 27 - Sandra de Amo

Propaganda
Pós-graduação em Ciência da Computação – UFU
Disciplina – Análise de Algoritmos
Profa. Sandra de Amo
Exercício – AULAS 26,27
Exercício 1.
a) Execute o algoritmo de força bruta O(n!) para resolver o problema do Caixeiro
Viajante no seguinte input:
n = 5 (5 cidades), e matriz de distâncias dada na tabela abaixo:
1
2
3
4
5
1
0 3 8 5 4
3 0 2 2 5
3
8 2 0 5 2
4
5 2 5 0 7
5
4 5 2 7 0
A cidade do Caixeiro de onde ele sai e para onde deve voltar após ter realizado o tour
pelas outras 4 é a cidade 1.
2
b) Execute o algoritmo de programação dinâmica de complexidade O(2n) sobre o mesmo
input do item (a).
Exercicio 2.
Mostre que n! ≠ O(an) para nenhum real a.
Conclua que o algoritmo PD para o caixeiro viajante é de ordem de complexidad menor do que
o algoritmo força bruta.
Sugestão: use o fato de que an = O(n!) (mostrado em lista de exercicios da 1ª parte da matéria
de AA), e que:
lim an /n! = 0
n∞
(mostrado em material disponível na página da disciplina referente a Aula 27).
Exercicio 3. Projete um algoritmo de programação dinâmica para resolver o problema da
Mochila (com e sem repetição) em O(nV), onde V = soma dos valores dos produtos
disponíveis.
Exercicio 4. Uma subsequência contígua de uma lista S é uma subsequência constituida de
elementos consecutivos de S. Por exemplo, se S = (5,15, -30, 10, -5, 40, 10) então (15,-30,10) é
uma subsequência contígua mas (5,15,40) não é.
Pede-se: Dê um algoritmo de complexidade em tempo linear que resolve a seguinte tarefa:
INPUT: Uma lista de números inteiros a1,a2, ..., an (negativos ou positivos ou nulos)
OUTPUT: A subsequência contigua de mairo soma.
(Sugestão: Para cada j ϵ {1,2,...,n} considere as subsequências contiguas finalizando na posição
j).
Exercicio 5. Yuckdonald’s está pensando em abrir uma cadeia de restaurantes ao longo da
rodovia Anchieta. As n possiveis localizações são nos marcos m1, m2, ..., mn, onde cada marco
corresponde à distância deste local para o inicio da rodovia (marco zero). Existem algumas
restrições a serem obedecidas:
- Em cada local, Yuckdonald’s pode abrir no máximo um único restaurante. O lucro
esperado da abertura de um restaurante no marco mi é de pi, onde pi > 0 e i = 1,...,n. Assim,
cada marco mi pode ter um ou nenhum restaurante.
- Dois restaurantes quaisquer da cadeia devem estar distantes de no minimo k km,
onde k > 0.
Pede-se: projete um algoritmo de programação dinâmica para encontrar a melhor
distribuição dos restaurantes ao longo dos marcos, isto é, a que produz maior lucro para o
Yuckdonald’s, satisfazendo as restrições impostas. Isto é, você deve restornar um array A de n
posições, contendo 0’s e 1’s, cada posição do array correspondendo a um dos marcos; A[i] = 1
se um restaurante é aberto no marco i e A[i]=0 caso contrário.
Exercicio 6. Dado um string de n caracteres s[1,..,n] quer-se descobrir se tal string
corresponde a um texto “corrompido”, isto é, um texto de onde foram retirados os sinais de
pontuação (algo do tipo eugostodecinema). Você deseja reconstruir o documento utilizando
um dicionário que está disponivel sob forma de uma função booleana dict( ) definida da
seguinte maneira: para qualquer string w:
dict(w) = true se w é uma palavra válida
dict(w) = false caso contrário.
(a) Projete um algoritmo de Programação Dinâmica que determina se um string s[.] pode
ser reconstituido como uma sequência da palavras válidas segundo a função dict. A
complexidade do algoritmo deve ser O(n2)
(b) Analise a complexidade do algoritmo
(c) Se o string de entrada corresponde a uma sequência de palavras válidas, o algoritmo
deve restornas esta sequência. Por exemplo, se o algoritmo recebe como input o string
eugostodecinema, ele deve retorna “SIM” e a sequência de palavras válidas (eu, gosto,
de, cinema).
Download