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).