Questões de Divisão e Conquista

Tamanho: px
Começar a partir da página:

Download "Questões de Divisão e Conquista"

Transcrição

1 Questões de Divisão e Conquista 1. Potência de inteiros Certo ou errado? O algoritmo abaixo Pot(n,k) calcula n k, para n e k inteiros. Sua complexidade é O(k): Pot(n, k): se (k = 0): retornar 1 senão se (k é par): retornar Pot(n,k/2)*Pot(n/k2) senão: retornar n*pot(n,k/2)*pot(n,k/2) 2. Seqüência de Farey Uma fração h / k é dita própria se ela situa-se entre 0 e 1 e se h e k não possuem fatores comuns. Para um inteiro n 1, a Sequência de Farey de ordem n, F n, é a sequência das frações próprias cujos denominadores não excedem 1, incluindo-se as frações 0/1 e 1/1, em ordem crescente. Por exemplo, F 5 é a sequência: 0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1 O aluno Davi Barreto descobriu uma forma recursiva interessante de criar a seqüência, para n > 2. Começa-se com as frações 0/1 1/2 1/1, e seleciona-se a fração 1/2. Recursivamente, cria-se, primeiro à esquerda e depois à direita da fração selecionada, uma nova fração. A fração criada à esquerda, tem o numerador obtido pela soma do numerador da fração selecionada com o numerador da fração anterior na sequência, até o momento. O denominador é obtido de forma semelhante. A fração da direita é obtida pela operação análoga entre a fração selecionada e a próxima fração da sequência, até o momento. As novas frações só são criadas se o denominador calculado for menor ou igual a n. Após a criação de cada uma dessas frações, aplica-se a mesma operação a cada uma delas. a) Escrever um algoritmo para criar a seqüência

2 3. Solução do Gustavo para Torneio O aluno Gustavo Ribeiro inventou uma solução especial para a tabela de Torneio, quando n é um quadrado ímpar (9, 25,...). Nessa solução, trabalha-se com grupos de k elementos (k = n 1/2 ). Escreve-se a tabela básica para k. Em seguida, substitui-se cada número da coluna 1 por uma matriz kx1, contendo os números do grupo k. No restante da matriz, cada número é substituido por uma permutação circular adequada dos elementos do grupo e o bye é substituído pela solução básica de emparelhamento do próprio grupo. Exemplificar essa solução para n = 9 e argumentar que ela é correta. 4. Seleção Quer-se selecionar o k-ésimo menor elemento de um conjunto de números. Escrever um algoritmo recursivo, baseado no procedimento de partição usado no Quicksort, para fazer essa seleção Moedas Falsas Tem-se n moedas numeradas de 1 a n. O peso de uma moeda normal é k. Sabe-se que duas das moedas são falsas e pesam k+1 cada uma. Quer-se descobrir as moedas falsas com um número de pesagens pequeno, O(log n). Você dispõe de uma balança eletrônica que dá o peso de uma seqüência de moedas. Ao executar o Procedimento Peso(i 1, i 2 ), um mecanismo coloca a seqüência de moedas de números i 1 a i 2 na balança e retorna o peso dessas moedas. a) Escrever um algoritmo para fazer essa tarefa. b) Argumentar que o número de pesagens é o desejado.

3 6. Busca por Faixa em árvores binárias de busca Descrever uma solução recursiva para o problema de busca por faixa em uma árvore binária de busca. Escrever o algoritmo correspondente e analisar sua complexidade. Na busca por faixa são dados os valores iniciais e finais de um intervalo (p, q) e quer-se listar, em ordem ascendente, todas as chaves da árvore compreendidas entre esses dois valores (inclusive). 7. Torre de Hanói revisitada Refazer o algoritmo para a torre de Hanoi, considerando que se tenha 4 varetas e não mais 3. Explicar a idéia recursiva utilizada e avaliar a complexidade do algoritmo sugerido. 8. Azulejos Dada uma parede de dimensões 2 x n, escrever as recorrência para calcular T(n) = número de maneiras distintas para azulejar essa parede, usando: a) apenas azulejos de dimensões 2 x 1. b) azulejos de dimensões 2 x 1 ou 2 x 2. Por exemplo, para o caso a), T(2) = 2 e T(8) = 34. Já, para o caso b), T(2) = 3 e T(8) = Potência de Matrizes Em inúmeras aplicações matemáticas, é necessário calcular M k a potência k de uma matriz M(n x n), com k inteiro. Escrever um algoritmo recursivo para fazer esse cálculo e determinar a complexidade do algoritmo. Evidentemente, deseja-se um algoritmo com complexidade inferior a k.n Sequências de 1 s Escrever a recorrência e o correspondente algoritmo de Programação Dinâmica para a solução do seguinte problema: Determinar a quantidade de strings de bits de tamanho n onde não existem 2 ou mais bits 1 em sequência.

4 Ex: para n = 3, T(3) = 5, correspondendo aos strings 000, 001, 010, 100, 101.Dica: formular a recorrência considerando a terminação dos strings do tipo procurado. 11. Maior retângulo Tem-se uma praça retangular, cujas coordenadas do ponto inferior esquerdo são (0,0) e do canto superior direito (L,C) e três árvores no meio da praça, simplificadamente representadas pelos pontos p1(x1, Y1), p2(x2,y2) e P3(X3,Y3). Quer-se construir uma quadra de tênis que seja o maior retângulo possível, com lados paralelos aos eixos, e que não contenha nenhuma árvore dentro. Descrever uma idéia para resolver o problema por divisão e conquista. Em seguida, escrever o algoritmo correspondente. Dica: Um ponto dentro de um retângulo redefine problemas menores de mesma natureza de que forma? 12. Par de pontos mais próximos no plano Tem-se n pontos (x i, y i ), 1 i n, no plano, já ordenados pela coordenada x. Explique como seria uma abordagem de divisão e conquista para determinar o par de pontos mais próximos desse conjunto. Não precisa escrever o algoritmo. 13. Bipartição de Conjuntos. Dado um conjunto S de números 1 a n, uma bipartição de S é a realocação de seus elementos em dois subconjuntos não vazios. Por exemplo, para S = {1,2,3}, as bipartições distintas são {{1}{2, 3}} {{1,2} {3}} e {{1, 3}, {2}}. a) Escrever a recorrência que calcula o número de bipartições distintas de S. Explicar a recorrência. b) Escrever um algoritmo recursivo com memorização para esse problema.

5 14. Quadrados de Feynman Feynman, um físico famoso que gostava de quebra-cabeças, propôs o seguinte problema: determinar T(n), o número de quadrados distintos em um grid n x n formados de quadradinhos 1 x 1. O exemplo abaixo mostra que T(2) = 5. a) Escrever a recorrência que calcula T(n). b) Escrever um algoritmo de Divisão e Conquista com memorização para calcular T(n).

6 15. Gray Code refletido Um Gray Code para n bits é uma sequência de todas as 2 n codificações distintas com n bits, tal que um termo da sequência somente difere do anterior em 1 bit. A primeira coluna da tabela abaixo mostra um GC para n = 2 e a última, um GC para n = 3. Para n=1, o código é 0 1. GC p/ n=2 GC p/ n = Um Gray Code refletido para n bits é obtido do Gray Code para n-1 bits. Acrescenta-se, inicialmente 0 antes de todos elemento, refle-se esse código e depois troca-se o primeiro 0 por 1 na segunda metade. As colunas 2 a 4 mostram como obter GC p/ n = 3 a partir de um para n = 2. Escrever um algoritmo recursivo para criar um Gray Code refletido para n bits. 16. Fibonacci por matriz O n-ésimo (n > 0) termo da série de Fibonacci pode ser calculado através da seguinte expressão, envolvendo matrizes: (Fib(n) Fib(n-1)) = (1 0) x M n-1, onde M é a matriz 2 x 2: M = Escrever um algoritmo com complexidade O(log n) para calcular Fib(n). Dica: usar a mesma idéia do exercício mostrado para potenciação de inteiros.

7 17. Pista de esquí As alturas dos pontos de uma pista de esqui estão representadas em um matriz n x n. Escrever um algoritmo de divisão e conquista que descobre qual tamanho do maior percurso de descida. Em um percurso de descida, a sequência de alturas têm que ser decrescentes. Suponha que se pode movimentar na matriz apenas pelos pontos cardeais (N,S,L,O). Por exemplo, na matriz 3 x 3 abaixo, o maior intinerário de descida tem tamanho 6 ( ) Dicas : 1. O problema infantil da recorrência é um ponto cujos vizinhos são todos maiores que ele. O percurso de descida que começa nesse ponto tem valor Considere que a matriz tem duas linhas e duas colunas suplementares, nas bordas da matriz, cuja altura é. 18. Contagem de inversões. O número de inversões de uma sequência é a soma, para cada elemento, do número de elementos menores à sua direita. Por exemplo, a sequência B A D C tem 2 inversões ( A depois de B e C depois de D ). A contagem de inversões pode ser feita usando o MERGESORT, durante os merges. Reescrever o Mergesort para fazer essa contagem.

8 Questões de Programação Dinâmica 1. Partição de conjuntos O número de maneiras distintas para se particionar um conjunto com n itens distintos em exatamente k subconjuntos não vazios, T(n,k) é dado pela recorrência: T(n,k) = 0, se (n < k); T(n,k) = 1, se (k = 1); T(n,k) = k.t(n-1,k) + T(n-1,k-1), se (k > 1); Exemplo: T(4,3) = 6, correspondendo às partições: {{1},{2},{3,4}}, {{1},{2,3},{4}}, {{1},{2,4},{3}}, {{1,2},{3},{4}}, {{1,3},{2},{4}}, {{1,4},{2},{3}}. a) Explicar a recorrência acima. b) Escrever um algoritmo de Programação Dinâmica para calcular T(n,n). 2. Quadrados Todo numero inteiro N maior que 1 pode ser escrito como a soma de quadrados de números menores. Escrever um algoritmo de Programação Dinâmica que descobre o menor número de termos nessa soma. Ex: N = 4, 1 termo; N = 50, 2 termos; N = 3, 3 termos.

9 3. Percurso em Matriz Considere uma matriz M(a x b) contendo inteiros e o seguinte jogo: você começa na posição (x,1) e anda para a direita até chegar na última coluna da matriz. Se você está na posição (x,y), então você pode passar para uma das posições (x+1,y-1), (x+1,y), (x+1,y+1), se existirem. Em cada posição que passa, recolhe o valor da mesma. Quer-se saber o maior valor que você consegue quando chega no final do percurso. a) Escreva um algoritmo de PD para resolver o problema. b) Exemplifique na matriz 4 x 8 abaixo, começando no ponto (x,1), com x = (NLPN mod 4 +1,1) Salada de frutas. Suponha que em um cesto existam n tipos de frutas, com as quantidades de cada fruta expressas em um vetor F[1..n]. Escrever um algoritmo de Programação Dinâmica que calcula quantas saladas de frutas distintas podem ser feitas usando-se t frutas. (Duas saladas são diferentes se a quantidade de qualquer fruta for diferente nas duas saladas). Dica: Usar uma matriz C(txn), onde C(i,j) = solução do problema para t=i e n = j. Exemplificar o algoritmo para t = 8 e n = 4, F= [ 2, 2, 3, 4].

10 5. Viagem Suponha que uma matriz D(n x n) guarde os custos de viagens entre todos os pares das n cidades de um país. Você quer fazer uma viagem da cidade A para a cidade B, mas quer parar em alguma cidade diferente C no caminho. Escreva um algoritmo para, dada a matriz D, as cidades A e B, escolher qual deve ser a cidade C para o custo total da viagem ser mínimo. Justificar seu algoritmo.

11 6. Número de soluções da Mochila Escrever um algoritmo que determina, para cada valor de mochila, de 1 a M, o número de soluções distintas. Existem q ítens com pesos dados no vetor W. Ex com M=12, 4 ítens 2, 3, 2, Corte de tronco Um tronco de tamanho n deve ser dividido em tamanhos t 1, t 2,... t k, dados. O custo de cada corte é proporcional ao tamanho do tronco. Escreva um algoritmo indicando a melhor seqüência de cortes, para que se tenha custo mínimo no processo.

12 8. Azulejos II Quer-se azulejar uma parede de tamanho 2 x n, estando disponíveis quantidades ilimitadas dos 2 tipos de azulejos seguintes. O primeiro é um retângulo 1x2, o segundo é um trominó 2x1 (retângulo 2x2 sem um dos quadradinhos). a) Escrever a recorrência que calcula T(n) = número de maneiras distintas de azulejar uma parede 2 x n, usando os 2 tipos de azulejos. (Dica: considerar 2 recorrências interligadas: T(n) = como desejamos, ou seja, paredes terminadas de forma lisa; T1(n) = paredes que terminam com um trominó. Esta contagem é auxiliar, apenas). b) Escrever um algoritmo de Programação Dinâmica(PD) para calcular T(n). c) Preencher a tabela de PD para n = Comboio Um conjunto com n carros está em uma fila para atravessar uma ponte que suporta no máximo dois carros de cada vez. São dados os tempos de travessia dos carros (dois carros atravessando levam o tempo total do mais lento). Determinar o tempo mínimo de travessia do conjunto, dados os tempos de travessia de cada carro. Ex: N = 10, e tempos de travessia como no vetor D:

13 21. Partição Monotônica de Inteiros Uma partição monotônica de um inteiro n é uma forma de escrever n como soma de números positivos distintos. Quer-se determinar T(n,n) = número de maneiras distintas de fazer partições monotônicas para dado inteiro n. a) Reescrever a recorrência da Partição de Inteiros estudada, para considerar apenas o caso de partições monotônicas. b) Reescrever o algoritmo de Programação Dinâmica correspondente. Dica: observe que T(1,1) = 1; T(2,2) = 1; T(3,3) = 2; T(4,4) = 2; T(10,10) = Mochila com ítens alternativos Considere o seguinte problema: tem-se t cartas, onde, em cada lado está escrito um número distinto. Quer-se saber se é possível obter um valor M usando combinações das cartas, mas só podendo usar um dos dois lados de cada carta. Modifique o algoritmo da Mochila em vetor para resolver esse problema: Mochila(): K[0] 0 para j 1 até M incl.: K[j] -1 para i 1 até t incl: para j M..P[i] incl.: se ( K[j] = -1 e K[j-P[i]] 0 ): K[j] i Mostrar o resultado do seu algoritmo para M=10 e o seguinte conjunto de 3 cartas: {(2, 5), {3, 6), (3, 9)}. 23. Recorrência 1 Considere a seguinte recorrência: a) T(i, j) = 1, se i=0 ou j=0 b) T(i, j) = T(i+1, j-1) + T(i-1, j), se i > 0 e j > 0 Escreva um algoritmo de PD para calcular T(n, p).

14 24. Mochila com ítnes negativos Considere o algoritmo para preenchimento da Mochila (0/1), em vetor: Mochila(): K[0] 0 para j 1 até M incl.: K[j] -1 para i 1 até t incl: para j M..P[i] incl.: se ( K[j] = -1 e K[j-P[i]] 0 ): K[j] i Explicar como modificar o algoritmo se quisermos considerar a possibilidade de haver também pesos negativos. Considere que os pesos estão inversamente ordenados (isto é, os negativos são os últimos a serem considerados). Justificar o algoritmo. 25. Recorrência 2 Considere a seguinte recorrência: a) T(, 0) = 1 b) T(0, p) = 0, se p > 0 c) T(n, p) = T(n-1, p+1) + T(n+1, p-1), n > 0, p > 0 É possível implementar essa recorrência com Programação Dinâmica? Explicar.

15 26. Troco facilitado Considere um país com 6 tipos de moeda que valem 100, 50, 25, 10, 5 e 1, respectivamente Suponha que você fez uma compra e pode facilitar o troco para o vendedor, passando algumas moedas para ele. Tanto você quanto ele dispõem de um número ilimitado de moedas de qualquer tipo. Escrever um algoritmo para, dado um valor n, entre 1 e 1000, indicar o menor número de moedas envolvidas em uma operação desse tipo. Por exemplo, se n = 95, o menor número de moedas envolvidas é 2, ou seja, você dá uma moeda de 5 e recebe uma moeda de 100 como troco. 27. Particionamento de uma cadeia de dígitos decimais Considere uma cadeia com 8 dígitos decimais, que deve ser particionada em três parte s tal que cada parte tenha pelo menos 1 dígito e a soma dos números gerados seja máxima. Note que o particionamento pode gerar números com zeros à esquerda a) Escrever uma recorrência para a otimização. b) Escrever um algoritmo de PD para resolver o problema. EX: deve ser particionado com 0, 2, , com soma Jogo Matemático. Dados n números inteiros, descobrir se existe uma expressão especial entre os (n-1) primeiros, cujo resultado seja o último. Uma expressão especial é uma expressão sem parêntesis, contendo somente os operadores binários + - * /, que deve ser calculada da esquerda para a direita, sem prioridade especial de operadores. O operador / funciona como o div do Pascal (divide e trunca). Sabe-se também que nenhum resultado intermediário pode estar fora da faixa 1000, Ex: Dados , temos a expressão simples: 20*5-8/7 = 13. Dica: Adaptar o algoritmo da Mochila. 29. Azulejos Quer-se azulejar uma parede de tamanho 3 x n, estando disponíveis quantidades ilimitadas dos 2 tipos de azulejos seguintes. O primeiro é um retângulo 1x1, o segundo é um retângulo 2x2. a) Escrever a recorrência que calcula T(n) = número de maneiras distintas de azulejar uma parede 3 x n, usando os 2 tipos de azulejos. b) Escrever um algoritmo de Programação Dinâmica(PD) para calcular T(n). c) Preencher a tabela de PD para n = 7.

16 Questões de Guloso 1. Travessia Tem-se n pessoas que querem atravessar uma ponte à noite, sendo que só podem passar até 2 de cada vez. Só há uma lanterna, que é necessária para a travessia. Cada pessoa leva um tempo distinto para a atravessar a ponte. Escrever um algoritmo guloso que calcula o tempo total mínimo para a travessia. Justificar o algoritmo. Ex: Para n = 4, se os tempos individuais forem 10, 5, 2, 1, o tempo total mínimo é 17; se forem 10, 10, 10, 1, o tempo mínimo é Abastecimento Escrever um algoritmo guloso para a solução do seguinte problema: "Dados n postos de gasolina, numerados de 1 a n, determinar o número mínimo de paradas para abastecimento numa viagem que passa por todos os postos, conhecendo-se as distâncias entre eles, o consumo e a capacidade do tanque do carro e sabendo-se que a viagem começa no posto 1." b) Argumentar que a solução é correta. 3. Seleção de Tarefas (problema do Paulo Vitor) São dadas n tarefas unitárias que devem todas ser executadas por um único processador. Para cada tarefa t i são dados 3 parâmetors: l i, r i, p i : l i é a data limite da mesma; r i é a receita que será auferida se a tarefa for realizada até a data limite; p i é a penalidade que deverá ser paga pelo executor, caso a tarefa não seja realizada até a data limite (se isso ocorrer ele não recebe a receita e ainda paga a penalidade). a) Escrever um algoritmo guloso que obtem a maior diferença entre as receitas e as penalidades. b) justificar que a solução gulosoa está correta. 4. Prestador de serviços. Um prestador de serviços tem N tarefas para realizar. Para cada tarefa são dadas duas informações: o tempo para sua realização (em dias) e uma multa diária que o prestador de serviços tem que pagar para os dias anteriores ao começo da tarefa. Em cada dia o prestador de serviços só pode trabalhar em uma tarefa. a) Escrever um algoritmo guloso que determina a menor multa total que o prestador de serviços terá que pagar. b) Argumentar que a solução do problema é gulosa.

17 Ex: Para é 8. N = 2, informações respectivas 2/5, 2/4, a multa mínima total 5. Corte de chapa em quadrados Quer-se cortar uma chapa retangular, de dimensões n x m, em quadrados 1x1 ou 2x2, tal que se tenha o menor número de quadrados possível. Veja o exemplo para n = 3, m = 3, cujo número de quadrados é 6. a) Descreva um algoritmo guloso para, dados n e m, determinar o número mínimo de quadrados 1x1 e 2x2 possível. b) Argumente que seu algoritmo está correto. 6. Prestador de serviços. Um prestador de serviços tem N tarefas para realizar. Para cada tarefa são dadas duas informações: o tempo para sua realização (em dias) e uma multa diária que o prestador de serviços tem que pagar para os dias anteriores ao começo da tarefa. Em cada dia o prestador de serviços só pode trabalhar em uma tarefa. a) Escrever um algoritmo guloso que determina a menor multa total que o prestador de serviços terá que pagar. b) Argumentar que a solução do problema é gulosa. Ex: Para N = 2, informações respectivas 2/5, 2/4, a multa mínima total é Batalhão. Um batalhão com N soldados, comandados por um único oficial, tem que executar N tarefas, cada uma delas sob a responsabilidade de um soldado e cada uma independente das demais. Para a execução da tarefa, cada soldado tem que ser treinado pelo comandante e, após o treinamento, pode iniciar a tarefa. Para cada soldado são dados o tempo de treinamento e a duração de sua tarefa. a) Escrever um algoritmo guloso que determina o menor tempo possível para executar todo o conjunto de tarefas. b) Argumentar que a solução do problema é gulosa. Ex: Para N = 3, tempos 2/5, 3/2, 2/1, o tempo minimo é Cobertura por trechos unitários Tem-se um segmento base sb = (0, n) e n segmentos s 1...s n, cada s i = (c i, f i ), com 0 c i < f i n, todos os valores inteiros. Quer-se saber se é possível e como cobrir o segmento base com os segmentos dados, tal que cada um deles

18 cubra apenas uma parte de tamanho unitário. Escrever um algoritmo guloso para fazer essa tarefa. Por exemplo, se sb = (0, 4), s 1 = (1,3), s 2 = (2,3), s 3 = (0,4), s 4 = (3, 4), é possível cobrir sb, e a cobertura dos trechos unitários (0,1),...(3,4) é, respectivamente, a seguinte {s 3, s 1, s 2, s 4 }. Argumentar que o algoritmo está correto. 9. Corte de chapas Uma máquina de corte tem capacidade para cortar até p chapas empilhadas e faz apenas um corte reto de cada vez. O problema de determinar o número mínimo de cortes para que uma chapa retangular com dimensões n x m seja transformada em n.m quadrados de lado 1 pode ser resolvido de forma gulosa, escolhendo-se para corte, a cada passo, as p chapas de maior área e cortando-as aproximadamente ao meio. Argumente que este enfoque guloso resolve corretamente o problema dado. Ex: para uma chapa 5x6, com p = 5, são necessários 8 cortes. 10. Compra de produtos calóricos Uma pessoa dispõe de n reais para comprar a maior quantidade possível de calorias. Alguns dos produtos são vendidos por ítem e outros a granel. Cada produto tem um preço p i e um valor calórico v i associados, além do tipo de venda, t i, é claro. Escrever um algoritmo que fornece o máximo desejado. Justificar o algoritmo. Ex: n = 13 item: (5, 15) (3, 3) granel (4, 8), (6,11) , , Ex: N = 4, 1 termo; N = 50, 2 termos; N = 3, 3 termos. 11. Tarefas com máquinas universais Tem-se duas máquinas que podem realizar uma série de tipos tarefas (1 a n). As tarefas têm todas duração de 1 dia. Quando cada máquina muda a tarefa a realizar, é necessária uma grande preparação para a mudança, que deve ser evitada sempre que possível. Dada uma sequência de m tarefas (indicadas pelo seu tipo), onde cada uma vai ser executada em um dia diferente, quer-se saber o número mínimo de trocas de tarefas no conjunto das máquinas para realizar

19 toda a sequência das tarefas. Observe que em cada dia apenas uma das máquinas estará trabalhando. No exemplo abaixo, apenas 1 troca é feita, quando a máquina 1 muda da tarefa 1 para a 2. Tarefas(tipos) Máquina a) Escreva um algoritmo guloso para o problema. b) Argumente que a solução está correta. 12. Compra de ações Suponha que você tenha 1000 reais e vai aplicar na Bolsa de Valores numa determinada empresa, comprando e vendendo ações dessa empresa dentro de determinado período. Suponha também que não há despesas para a compra e venda de ações. Dadas as cotações diárias das ação dessa empresa no período, considere o algoritmo para determinar o maior lucro possível que você poderia ter feito no período. a) descreva uma solução para o problema e argumente que a solução é gulosa. b) Mostre que, para um período de 10 dias com as as seguintes cotações você teria um lucro máximo de 5000 reais Parafusagem de placas São dadas n placas já posicionadas em um telhado e quer-se parafusar todas essas placas de maneira a formar um conjunto único. Para cada placa são informadas as posições dos seus extremos. Suponha que cada parafuso pode ser usado para juntar várias placas e que esse parafuso tenha largura desprezível. a)escrever um algoritmo guloso para determinar o número mínimo de parafusos a serem colocados para fazer essa tarefa. b) Justificar sua solução. Veja no exemplo que, para as l placas (1, 3), (4,6), (7,9), (2,8) são necessários 3 parafusos.

20 14. Foco. Quer-se fazer f otos de uma cena com vários objetos. A cena desenrola-se ao longo de um eixo horizontal. Cada objeto da cena só fica nítido se o centro da foto estiver dentro de um intervalo desse eixo. Você quer tirar o menor número de fotos para obter todos os objetos corretamente focados. Por exemplo, se tivermos 3 objetos com intervalos de foco (1, 4), (2,5) e (5, 7), basta tirar duas fotos. A primeira com centro do foco em qualquer ponto do intervalo (2,4), conseguindo focar os dois primeiros objetos e a segunda com centro em qualquer ponto do intervalo (5,7), focando o terceiro. Dados n objetos e seus intervalos de foco, escrever um algoritmo guloso que determina o menor número de fotos a serem tiradas para obter todos os objetos em foco. Justificar que seu algoritmo pode ser guloso. 15. Sequência NDNC Fazer um algoritmo que constrói uma sequência NDNC com n números dados. Analisar a complexidade do algoritmo e provar que ele está correto. Numa sequência NDNC os números de índice ímpar formam uma sequência não decrescente e os de índice par, uma sequência não crescente. Além disso, a soma dos números de índice ímpar é maior ou igual à soma dos números de índice par. Ex: Seqüência antimonotônica. Dada uma seqüência de números positivos inteiros S = {s 1, s 2,... s n }, uma subseqüência A de S é uma sequência de elementos retirados de S, mantendo a ordem relativa dos mesmos. A subseqüência A = {a 1, a 2,... a n }, é dita antimonotônica se ela tiver 1 ou 2 elementos ou, quando tiver mais que 2 elementos, e tormarmos quaisquer três elementos consecutivos de A, a i, a i+1, a i+2, temos uma das seguintes relações: a) a i < a i+1 > a i+2, ou b) a i > a i+1 < a i+2 Por exemplo, dada S = { 5, 4, 2, 6}, temos as subseqüências antimonotônicas: {5}, {4}, {2}, {6}, {5,4}, {5,2}, {5,6}, {4,2}, {4,6}, {2,6}, {5,4,6}, {5,2,6}, {4,2,6}. a) Mostrar uma subseqüência antimonotônica de tamanho máximo para cada um dos seguintes casos: {5, 4, 3, 2, 1}, {1, 2, 3, 4, 5}, {1, 5, 2, 4, 3}, {1, 2, 3, 5, 4}. b) Escrever um algoritmo guloso para determinar o tamanho da maior subseqüência antimonotônica de uma seqüência dada S, representada em um vetor de n elementos. c) Argumentar que o algoritmo desenvolvido está correto.

21 Questões de Backtracking 1. Partição de inteiros Escrever um algoritmo (backtracking) que gera todas as partições para dado inteiro n. Ex: Para n = 4, a saída é: Quadrado Dados n varetas de tamanhos inteiros, verificar se é possível formar um quadrado juntando as varetas em quatro segmentos de mesmo tamanho e usando todas as varetas. 3. Resta 1 Simplificado Escrever um algoritmo que calcula o número mínimo de pinos restantes em um jogo Resta 1 simplificado, dada uma configuração inicial. No jogo simplificado existem 12 buracos em série, sendo que, na configuração inicial, podem existir de 0 a 12 pinos em qualquer posição. A retirada de um pino é feita quando um vizinho pula esse pino, indo ocupar um buraco. Para uma configuração, os buracos serão representados por - e os pinos por o. Exemplos: -ooo---ooo-- -> 4; oooooooooooo -> 12; > 0; oooooooooo-o -> 1 4. Permutações com repetições. Modificar o algoritmo de Backtracking de geração de Permutações, para o caso em que há elementos repetidos no conjunto. Neste caso, não devem ser impressas permutações iguais. Ex: para {2, 7, 2, 2} as permutações são: , , e Bigger Square, please! Fazer um algoritmo que exiba, para n inteiro, todas as somas quadrados de números inteiros menores que n cujo valor seja n 2. de

22 6. Quadrado mágico 4 x 4 Escrever um algoritmo, usando Backtracking, para gerar todos os quadrados mágicos 5 x 5. Um quadrado mágico n x n, com n ímpar, é uma matriz n x n, onde cada elemento é distinto e pertence ao intervalo (1, n 2 ), sendo constante tanto a soma dos elementos das linhas, quanto das colunas e diagonais. Essa constante é igual a n(n 2 + 1)/2. 7. Grupamentos Escrever um algoritmo, usando Backtracking, para gerar todos os grupamentos binários distintos de um conjunto de n elementos, com n par. Um grupamento binário é o particionamento do conjunto em n/2 outros conjuntos, com 2 elementos cada. Veja a seguir todos os 15 grupamentos binários distintos para o conjunto de 6 elementos, {A, B, C, D, E, F}: {AB} {CD} {EF}, {AB} {CE} {DF}, {AB} {CF} {DE}, {AC} {BD} {EF}, {AC} {BE} {DF}, {AC} {BF} {DE}, {AD} {BC} {EF}, {AD} {BE} {CF}, {AD} {BF} {CE}, {AE} {BC} {DF}, {AE} {BD} {CF}, {AE} {BF} {CE}, {AF} {BC} {DE}, {AF} {BD} {CE}, {AF} {BE} {CD}. Dica: gerar lexicograficamente o resultado, que é uma permutação dos elementos. Notar que, neste caso, só é possível preencher as posições de ordem ímpar da permutação (primeiros elementos de cada um dos n/2 conjuntos da partição) com apenas um elemento. 8. Árvore de Jogo Construir, avaliando, a árvore de Jogo para a continuação do jogo da velha, cuja situação está expressa no seguinte diagrama: X 0 X 0 O computador joga com X e é a vez dele jogar. Para a construção da árvore, fazer a poda alfa-beta que diminui, sensivelmente, o número de nós da árvore. 9. Subconjuntos com soma limitada Dado um conjunto T com n inteiros e um valor s, escrever um algoritmo que conta o número de subconjuntos de T cuja soma dos elementos é igual ou inferior a s.

23 10. Jogo da Velha Mostrar, através da árvore de jogo, que a seguinte configuração do jogo da velha é vitoriosa para o computador (é a vez do computador jogar, x = jogada do computador, o do oponente): x o Você deve usar a poda de valor limite e pode representar as configurações de forma agrupada, quando a resposta do computador for a mesma para todas as configurações do grupo. 11. Jogo de Palitos com 2 colunas Uma versão diferent e do Jogo de Palitos estudado em sala é quando existem 2 filas de palitos, contendo n 1 e n 2 palitos, respectivamente. A mudança da regra é que, a cada vez, só se pode tirar palitos de uma fila. As demais regras permanecem as mesmas. Mostrar e avaliar a árvore de jogo para n 1 = 3 e n 2 = 2. Usar memorização, podas de simetria e valor limite, ordenação de opções e a simetria especial: T(p,q) = T(q,p), onde p e q são as quantidades de palitos de cada uma das filas. 12. Recorrência para o Jogo de Palitos A solução do problema dos palitos pode ser dada pela recorrência abaixo: T(n) = 1, se 1 n 3. T(n) = max (-T(n-1), -T(n-2), -T(n-3)) Prove, por indução, que a solução dessa recorrência é: T(n) = -1 se n for múltiplo de 4; T(n) = 1, caso contrário. 15. Cavalos pacíficos Escreva um algoritmo de backtracking que obtenha o número máxim o de cavalos que se pode colocar em um tabuleiro de xadrez n x n, tal que os cavalos não se ataquem.

24 16. Jogo da Matriz O jogo da matriz é jogado em turnos entre João e Maria. A matriz n x n tem números positivos e negativos. João escolhe uma linha e Maria uma coluna. Maria paga a João o valor da intersecção escolhida. O jogo segue, sendo que cada nova escolha tem que ser para linha ou coluna não escolhida anteriormente. Supondo que os dois jogadores joguem bem, quer-se saber quanto João recebe no final (ou paga para Maria, caso o total seja negativo). Esse problema tem uma solução por árvore de jogo, mas tem outra solução examinando-se permutações de n elementos. Explique como é esta solução, escreva o algoritmo e mostre o resultado ótimo na matriz abaixo, 3 x Jogo de Euclides Criar e avaliar a árvore de jogo para o seguinte jogo de turnos: são dados dois números a e b. A cada turno um jogador subtrai do maior número um múltiplo do menor, desde que o resultado não seja negativo. O maior número é substituído pela diferença. Ganha quem conseguir o número zero primeiro. Por exemplo, para a = 12 e b = 7, uma seqüência do jogo poderia ter sido: (neste caso ganha o primeiro jogador). Usar a = 20 b = 6 + NLN mod 4 (NLN = número de letras do nome completo). 18. Codificação binária Escrever um algoritmo de Backtracking para gerar todas as configurações binárias distintas com n bits, tendo exatamente p bits 0, para n e p dados. Ex: para n = 4 e p = 2, a saída é: 0011, 0101, 0110, 1001, 1010, Jogo de palitos com duas colunas Considere o jogo de Palitos com duas colunas, uma delas contendo n 1 palitos e a outra n 2, tal que, a cada rodada, o jogador da vez tem que retirar de 1 a 3 palitos de uma das colunas, vencendo aquele que retirar os últimos palitos. Prove, usando indução finita e qualquer recurso de árvore de jogo, que o primeiro jogador perde quando n 1 - n 2 é divisível por 4 e ganha nos outros casos.

25 QUESTÕES DE CERTO/ERRADO Responder C(Certo) ou E(Errado), sendo que cada resposta errada anula uma certa. 1.( ) Podemos fazer um algoritmo por Backtracking para resolver o problema Torneio, mas sua complexidade é maior que a do algoritmo por Divisão e Conquista. 2.( ) Em uma árvore de Huffman, se o símbolo A tem frequência maior que a do símbolo B, então A está sempre em uma folha mais próxima da raiz que a da folha de B. 3.( ) O Merge Ótimo entre 4 arquivos de tamanhos 300, 400, 500 e 600, respectivamente, executa 3600 operações. 4.( ) A solução do problema Troco Mínimo usando um conjunto de 3 moedas com valores {1, 7, 22} pode ser gulosa. 5.( ) Quando todas as chaves em um vetor são iguais, o Quicksort faz O(n) comparações para ordenar esse vetor. 6.( ) Para encontrar uma solução (não necessariamente a ótima) para o problema da Torre de Hanoi com n discos e 4 varetas (ao invés de 3), podemos usar a seguinte ideia recursiva: a) Se (n 3) o problema pode ser resolvido diretamente. b) Se (n > 3) Então: b.1) Leva n/2 discos da vareta 1 para a vareta 2, usando as 4 varetas como armazenamento temporário. b.2) Leva n/2 discos restantes da vareta 1 para a 4, usando apenas as varetas 1, 3 e 4 como armazenamento temporário. b.3) Leva os n/2 discos da vareta 2 para a vareta 4, usando as 4 varetas como armazenamento temporário. 7.( ) Quando todas as chaves em um vetor são iguais, o Quicksort faz O(n) comparações para ordenar esse vetor. 8.( ) Utilizando o algoritmo dos slides para montar uma tabela de Torneio, onde o número de times é uma potência de 2, é sempre possível fazer com que a última rodada do campeonato seja como no campeonato brasileiro, onde todos os jogos são regionais (cada jogo envolve dois times de uma mesma região). 9.( ) Usando recursão com memorização para o problema Moedas, com as moedas brasileiras, podemos afirmar que para calcular T(6, 600) o número de subproblemas a serem resolvidos é sempre menor que 1000.

26 10.( ) O algoritmo abaixo Pot(n,k) calcula n k, para n e k inteiros. Sua complexidade é O(k): Pot(n, k): Se (k = 0) Então Retornar 1 Senão Se (k é par) Então Retornar Pot(n,k/2)*Pot(n/k2); Senão Retornar n*pot(n,k/2)*pot(n/k2); 11.( ) O algoritmo abaixo Comb(n,k) calcula o número de combinações de n k a k. Sua complexidade é O(n*k); Comb(n, k); Se (k = n) Então Retornar 1 Senão Se (k > n) Então Retornar 0 Senão Se (k = 0) Então Retornar 1 Senão Retornar Comb(n-1,k)+Comb(n-1,k-1); 12.( ) A solução por Backtracking para o problema Damas Pacífica s em um tabuleiro n x n testa apenas algumas das permutações de n elementos. 13.( ) Podemos fazer um algoritmo por Backtracking para resolver o problema Torneiro, mas sua complexidade é maior que a do algoritmo por Divisão e Conquista. 14.( ) A utilização da técnica de Árvore de Jogo sempre permite encontrar um caminho vencedor para o computador. 15.( ) A complexidade do algoritmo de Partição Aproximada por Backtracking é polinomial no número de inteiros a particionar. 16.( ) Considere a recorrência abaixo para resolver determinado problema, onde queremos calcular T(m, m). Então podemos fazer um algoritmo de programação dinâmica tal que preenchamos uma matriz T(m * m) por linha: T(1, 1) = 1 T(n,p) = 0, p n T(n, p) = min 0 q n (T(n-q, p-1) + T(2n-q, p) + q) para p > 1, n > 1 17.( ) Considere a recorrência abaixo para resolver determinado problema, onde queremos calcular T(m, m). Então podemos fazer um algoritmo de programação dinâmica tal que preenchamos uma matriz T(m * m) por coluna: T(1, 1) = 1 T(n,p) = 0, p n T(n, p) = min 0 q n (T(n-q, p-1) + T(2n-q, p) + q) para p > 1, n > 1 18.( ) A partir do preenchimento da matriz K(q * M) para o problema Mochila, onde q é o número de ítens e M o tamanho da Mochila, podemos obter todas as

27 soluções para o preenchimento de determinada mochila com valor igual ou inferior a M. 19.( ) Considerando um conjunto de q ítens e duas mochilas de capacidade M, podemos preencher as duas mochilas de forma a se ter o máximo peso total, usando a seguinte idéia: preenchemos a matriz para a capacidade 2M e tomamos o menor valor menor ou igual a 2M para o qual foi encontrada uma solução. 20.( ) Considerando um conjunto de q ítens e duas mochilas de capacidade M, podemos preencher as duas mochilas de forma a se ter o máximo peso total, usando a seguinte idéia: preenchemos a matriz para a capacidade M e tomamos duas vezes o menor valor menor ou igual a M para o qual foi encontrada uma solução. 21.( ) Na solução do Produto de Matrizes por programação Dinâmica, para se obter a solução para o produto de uma sequência de matrizes M1...Mn, tem-se que resolver todos os subproblemas envolvendo qualquer combinação de produto das matrizes 1 a n. 22.( ) Considerando a matriz preenchida por programação dinâmica para o problema Distância de Edição, podemos encontrar a sequência de transformações começando uma busca na posição (0, 0). 23.( ) Em uma árvore de Huffman, se o símbolo A tem frequência maior que a do símbolo B, então A está em uma folha mais próxima da raiz que a da folha de B. 24.( ) O Merge Ótimo entre 4 arquivos de tamanhos 300, 400, 500 e 600, respectivamente, executa 3600 operações. 25.( ) A solução do problema Troco Mínimo usando um conjunto de 3 moedas com valores 1, 7 e 22 pode ser gulosa. 26.( ) Para encontrar uma solução (não necessariamente a ótima) para o problema da Torre de Hanoi com n discos e 4 varetas (ao invés de 3), podemos usar a seguinte idéia recursiva: a) Se (n 3) o problema pode ser resolvido diretamente. b) Se (n > 3) Então: b.1) Leva n/2 discos da vareta 1 para a vareta 2, usando as 4 varetas como armazenamento temporário. b.2) Leva n/2 discos restantes da vareta 1 para a 4, usando apenas as varetas 1, 3 e 4 como armazenamento temporário. b.3) Leva os n/2 discos da vareta 2 para a vareta 4, usando as 4

28 varetas como armazenamento temporário. 27.( ) Quando todas as chaves em um vetor são iguais, o Quicksort faz O(n) comparações para ordenar esse vetor. 28.( ) Usando recursão com memorização para o problema Moedas, com as moedas brasileiras, podemos afirmar que para calcular T(6, 600) o número de subproblemas a serem resolvidos é sempre menor que ( ) O algoritmo abaixo Pot(n,k) calcula n k, para n e k inteiros. Sua complexidade é O(k): Pot(n, k): se (k = 0): retornar 1 senão se (k mod 2 = 0): retornar Pot(n,k/2)*Pot(n/k2) senão: retornar n*pot(n,k/2)*pot(n/k2) 30.( ) A solução por Backtracking para o problema Damas Pacífica s em um tabuleiro n x n testa apenas algumas das permutações de n elementos. 31.( ) Podemos fazer um algoritmo por Backtracking para resolver o problema Torneio, mas sua complexidade é maior que a do algoritmo por Divisão e Conquista. 32.( ) Em uma árvore de Huffman, se o símbolo A tem frequência maior que a do símbolo B, então A está em uma folha mais próxima da raiz que a da folha de B. 33.( ) O Merge Ótimo entre 4 arquivos de tamanhos 300, 400, 500 e 600, respectivamente, executa 3600 operações. 34.( ) A solução do problema Troco Mínimo usando um conjunto de 3 moedas com valores 1, 7 e 22 pode ser gulosa. 35.( ) Considere a recorrência abaixo para resolver determinado problema, onde queremos calcular T(m, m). Então podemos fazer um algoritmo de programação dinâmica tal que preenchamos uma matriz T(m * m) por coluna: T(1, 1) = 1 T(n,p) = 0, p n T(n, p) = min 0 q n (T(n-q, p-1) + T(2n-q, p) + q) para p > 1, n > 1

29 A CLASSIFICAR ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ Questão 3. (3 pontos) Sequência decrescente máxima em matriz. Dada uma matriz M(a x b) com inteiros positivos, escrever uma recorrência que determina, para cada célula, qual o tamanho da sequência estritamente decrescente máxima começando naquela célula e podendo prosseguir nas 4 direções cardeais. Escrever o algoritmo de PD correspondente. No exemplo abaixo, a sequência máxima tem tamanho 9 e está ilustrada Questão 4. (3 pontos) Árvore de Jogo Reescrever o algoritmo da Mochila com peso e valor, itens únicos, usando recursão com memorização. Questão 2. (3 pontos) Partições posicionais. Escrever a recorrência para calcular o número de partições posicionais de um inteiro n. Nesse tipo de partição a posição de cada parcela importa. Por exemplo, as partições posicionais de 3 são: 3, 2 1, 1 2, Escrever um algoritmo de PD para resolver o problema. Questão 3. (3 pontos) Partição aproximada em 3 conjuntos Explique (não precisa escrever o algoritmo) como seria um algoritmo para fazer a melhor partição aproximada de um conjunto com n (n > 2) inteiros positivos, em três subconjuntos. A melhor partição aproximada, nesse caso, seria aquela cuja soma das diferenças absolutas entre os totais de cada par de subconjuntos fosse mínima. Questão 3. (2 pontos) - Mochila fracionária Na versão fracionária do problema Mochila Peso e Valor, os ítens podem ser fracionados (por exemplo, os ítens são diversos metais em pó). Então, o problema pode ser descrito da seguinte forma: Dados n ítens com pesos respectivos p 1... p n e valores respectivos v 1... v n, determinar as frações dos ítens que preenchem uma mochila de capacidade M com o maior valor total possível. a) Escreva um algoritmo gulos o para resolver o problema. b) Argument e que a solução é gulosa. Questão 4. (2 pontos) - Arranjos com repetições Escreva um algoritmo de Backtracking para, dados n e q gerar todos os arranjos com repetições dos números 1 a n, com q elementos em cada arranjo. Por exemplo, se n=3 e q = 2, são gerados os arranjos: 1 1, 1 2, 1 3, 2 1, 2 2, 2 3, 3 1, 3 2, 3 3.

30 Questão 4. (2 pontos) Combinações com repetições Considere o algoritmo estudado, mostrado a seguir para exibir as combinações de n ítens, q a q. Modifique esse algoritmo para listar combinações com repetições. Por exemplo, para n = 3, q = 2, ele deve dar como saída: 1 1, 1 2, 1 3, 2 2, 2 3, 3 3. Comb(n, q, t): Para i de t a n: P[++np] i; Se np = q) Então Imprimir P Senão Comb(n, q, i+1); np--; Fp; Fim; Externamente: np 0; Comb(n, q, 1); Questão 5. (2 pontos) MDC de 3 números Um algoritmo recursivo para calcular o MDC entre 2 números é o seguinte: MDC(a,b): Se (b = 0) Então Retornar a Senão Retornar Retornar (b, a mod b); Fim; Completar o algoritmo recursivo abaixo, para calcular o MDC entre 3 números: MDC3(a, b, c): Se ((b = 0) e (c = 0)) Então Retornar a; Senão se (c = 0) Então Retornar MDC3(b, a mod b, 0) Senão Retornar... Fim; Questão 2. (2,5 pontos) - Torres pacíficas em retângulos É dado um tabuleiro n x n e n retângulos inscritos no retângulo do tabuleiro. Quer-se saber se é possível colocar uma torre dentro de cada retângulo tal que as n torres não se ataquem. Escrever um algoritmo guloso para indicar se o problema tem solução ou não e indicar a solução. Argumentar que o algoritmo está correto. T 1 T 2 T 3 T 4 Questão 3. (2,5 pontos) Soma de quadrados Escrever um algoritmo de backtracking para, dado um inteiro n > 0, escrever todas as formas em que esse número pode ser escrito como soma de cubos menores. Ex: n = =

31 30= = = = Questão 2. (2,5 pontos) - Empacotamento. Uma empresa vende 6 tipos de produtos, embalados em cubos de lados de valores 1 a 6, respectivamente. Quando a empresa despacha uma venda, ela empacota os produtos comprados apenas em pacotes cúbicos de lados 3 ou 6, total ou parcialmente preenchidos. Cadea pacote pode conter vários produtos, desde que que as dimensões sejam coerentes. Dadas as quantidades de compra de cada tipo de produto, determinar quantos pacotes que podem ser formados, tal que seu volume seja mínimo. Se houver mais de uma solução, deve-se usar a que usa o número mínimo de pacotes. a) Escrever um algoritmo guloso para o problema. b) Argumentar que a solução é gulosa. Ex: Para compras de 100, 0, 6, 0, 1, 8 (respectivamente o número de produtos tipo 1, ), o número mínimo de pacotes será 16 (9 de 6 e 7 de 3). Questão 3. (3 pontos) Particionamento aproximado em três subconjuntos Discutir a idéia de um algoritmo (não precisa escrever esse algoritmo) para particionar um conjunto de inteiros em 3 subconjuntos, A, B, C, de forma a minimizar a soma S(A)-S(B) + S(A)-S(C) + (S(B)-S(C), onde S(X) é a soma dos elementos de X. Mostrar um exemplo. Questão 4. (3 pontos) Quadrado Latino Um quadrado latino n x n é um quadrado n x n contendo apenas elementos de 1 a n, tal que cada linha e cada coluna do quadrado seja uma permutação de 1 a n. Escrever um algoritmo de backtracking que gera todos os quadrados latinos de tamanho n x n. Veja um exemplo de um quadrado latino 4 x 4: Dicas: usar duas matrizes QL e QC, ambas n x n, para guardar a informação de que valores já foram usados em determinada linha e coluna, respectivamente. Começar o preenchimento na célula (1,1) e preencher uma célula a cada passo do backtracking. Questão 4. (3 pontos) Vetores encadeados São dados n vetores que devem ser encadeados formando uma cobertura. Quer-se saber qual a área máxima possível dessa cobertura. Por exemplo, para o conjunto de vetores (1,0), (1,1) e (2,1), a cobertura de área máxima é a da esquerda da figura(área de =5,5). A configuração da direita é pior(área de 1+0,5+1+2=4,5). Argumentar que a solução do problema é gulosa e consiste em ordenar adequadamente os vetores. Mostre o critério de ordenação.

32 Questão 3. (3 pontos) 2 menores inteiros de um conjunto S com n elementos O algoritmo seguinte obtém os 2 menores valores de um conjunto, por divisão e conquista. DM(S); Se ( S = 1) Então retornar (s 1, ) Senão Se ( S = 2) Então Se (s 1 < s 2 ) Então Retornar (s 1, s 2 ) Senão Retornar (s 2,s 1 ) Senão n S ; m n/2 ; (a,b) DM({s 1,...,s m }); (c,d) DM({s m+1,...s n }); Se (a < c) Então Retornar (a, min(b,c)) Senão Retornar (c, min(a,d)); Fim; a) Argumentar que o algoritmo está correto b) Calcular o número de comparações quando n é potência de 2. c) Escrever um algoritmo não recursivo para resolver o problema, fazendo o mesmo número de comparações que esse algoritmo. Questão 4. (3 pontos) Representação Fibonacci de inteiros positivos Qualquer inteiro positivo pode ser representado, de forma única, como soma de termos não consecutivos da série Fibonacci ( ). Por exemplo: 44= a) Escreva um algoritmo guloso para determinar os termos da soma da representação de um inteiro positivo n (n ) nesse sistema.. b) Explique como as propriedades da representação são refletidas no algoritmo. c) Qual seria a estratégia para provar que o algoritmo está correto? Questão 3. (3 pontos) Tarefas com penalidade total mínima Considere uma variante do problema de Sequenciamento de Tarefas com Receita máxima, onde para cada tarefa T i estão associados três valores, l i, r i e p i. Todas as tarefas têm que ser executadas e aquelas feitas além da data limite (l i ), pagam uma penalidade diária (p i ). Escrever um algoritmo de backtracking para determinar um seqüenciamento das tarefas que gera uma penalidade total mínima. Questão 2. (2,5 pontos) Palíndromos : Dado um string S de tamanho n, contendo caracteres nas posições 1 a n, quer-se calcular o número de substrings distintos que formam palíndromos. Aquí chamamos substring o resultado da eliminação de qualquer quantidade de caracteres do string inicial, não necessariamente em sequência. A recorrência para esse cálculo, descrita a seguir, usa T(i,j) = número buscado, considerando o substring contínuo das posições i a j de S. O cálculo de T(i,j) pode ser feito pela recorrência abaixo: T(i,i) = 1; T(i,j) = 0, se i > j;

33 T(i,j) = T(i,j-1)+T(i+1,j) + 1, se s i = s j ou T(i,j-1)+T(i+1,j) -T(i+1,j-1), cc s p = caracter na posição p de S. Exemplo: S = MARIA T(1,5) = 8. Os palíndromos são: M, A, R, I, A, AA, ARA, AIA. a.1) Explicar a recorrência acima. a.2) Mostrar o cálculo do número de palíndromos para o STRING ARARA. a.3) Escreve r um algoritmo recursivo com Memorização para calcular T(1,n). Questão 3. (2,5 pontos) Soma de quadrados e cubos Todo número inteiro pode ser escrito como soma de quadrados e cubos de números inteiros menores. Considere o problema de encontrar T(n) = menor número de parcelas desse tipo para dado n. Escrever a recorrência para resolver o problema e, em seguida, o algoritmo de PD correspondente. Exs: T(28) = 2 ( ); T(29) = 2 ( ); Questão 4. (2,5 pontos) Transformação na Distância de Edição Escrever um algoritmo para mostrar uma possível transformação de um string A em outro string B, segundo os conceitos de Distância de Edição. A saída deve ser assim: a) se tiver havido a inclusão do caracter b j então escrever "+b j " b) se tiver havido a deleção do caracter a i então escrever "-a i " c) se o caracter a i tiver se mantido ou transformado para b j, escrever "a i b j " Quando houver mais de uma alternativa, obedecer a prioridade de a) a c). Por exemplo : na transformação de " AAT " para " ATA " a saída é " AA-A+A ". Questão 4. (2,5 pontos) Backtracking + Mochila Suponha que foi preenchida o vetor K para o problema da Mochila, com ítens únicos. Escrever um algoritmo de Backtracking que, usando esse vetor, indique todas as soluções para o problema, para dada capacidade da Mochila: Ex: Para M = 8 e 5 itens com pesos 1, 2, 2, 3, 5, o programa deveria ter saída equivalente à seguinte: 8 = = = = 3+5 Questão 4. (3 pontos) Contagem de grupamentos Escrever a recorrência para contar os grupamentos distintos de n elementos, cada grupo com p elementos, onde p é divisor de n. Em um grupamento, os n elementos são particionados em n/p grupos com p elementos em cada grupo. Por exemplo, para n = 6 e p = 2, sendo os elementos A B C D E F, a resposta é 15 e os 15 grupamentos distintos são: AB CD EF, AB CE DF, AB CF DE, AC BD EF, AC BE DF, AC BF DE, AD BC EF, AD BE CF, AD BF CD, AE BC DF, AE BD CF, AE BF CD, AF BC DE, AF BD CE, AF BE CD Questão 4. (3 pontos) Backtracking x PD no dominó São dadas n peças de dominó, e dois inteiros, x e y. Quer-se saber se é possível, de alguma maneira, colocar as peças, em sentido vertical, lado a lado, tal que a soma superior seja igual a x e a soma inferior seja igual a y. a) Quando n 10, o problema pode ser resolvido eficientemente por Backtracking. Explicar um algoritmo para fazer isso (não precisa escrever o algoritmo).

Método Guloso. Troco mínimo. Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) junho/2012. Troco mínimo. Troco mínimo

Método Guloso. Troco mínimo. Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) junho/2012. Troco mínimo. Troco mínimo Notas de aula da disciplina IME - ALGORITMOS E ESTRUTURAS DE DADOS II Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) Troco mínimo Dados os tipos de moedas de um país, determinar o número mínimo

Leia mais

Backtracking. Backtracking

Backtracking. Backtracking Notas de aula da disciplina IME 0-0 ALGORITMOS E ESTRUTURAS DE DADOS II Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) É uma técnica de solução de problemas (construção de algoritmos) que eamina

Leia mais

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/30 3 - INDUÇÃO E RECURSÃO 3.1) Indução Matemática 3.2)

Leia mais

Divisão e conquista. Eficiência de divisão e conquista

Divisão e conquista. Eficiência de divisão e conquista Divisão e conquista Divisão: resolver recursivamente problemas mais pequenos (até caso base) Conquista: solução do problema original é formada com as soluções dos subproblemas á divisão quando o algoritmo

Leia mais

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013 Lista 1 - PMR2300 Fabio G. Cozman 3 de abril de 2013 1. Qual String é impressa pelo programa: p u b l i c c l a s s What { p u b l i c s t a t i c void f ( i n t x ) { x = 2 ; p u b l i c s t a t i c void

Leia mais

Divisão e conquista. Há divisão quando o algoritmo tem pelo menos 2 chamadas recursivas no corpo

Divisão e conquista. Há divisão quando o algoritmo tem pelo menos 2 chamadas recursivas no corpo Divisão e conquista Divisão: resolver recursivamente problemas mais pequenos (até caso base) Conquista: solução do problema original é formada com as soluções dos subproblemas á divisão quando o algoritmo

Leia mais

Programação Dinâmica Partição de Inteiros

Programação Dinâmica Partição de Inteiros Notas de aula da disciplina IME -8 ALGORITMOS E ESTRUTURAS DE DADOS II Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) abril/9 Partição de Inteiros Dado n inteiro, determinar o número de maneiras

Leia mais

5ª Lista de Exercícios de Programação I

5ª Lista de Exercícios de Programação I 5ª Lista de Exercícios de Programação I Instrução As questões devem ser implementadas em C. Questões que envolvam leitura de matrizes, a construção dessas matrizes pode ser realizada através da geração

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos Complexidade de Algoritmos O que é um algoritmo? Sequência bem definida e finita de cálculos que, para um dado valor de entrada, retorna uma saída desejada/esperada. Na computação: Uma descrição de como

Leia mais

Sociedade Brasileira de Matemática OLIMPÍADA DE MATEMÁTICA DO ESTADO DO RIO GRANDE DO NORTE COLETÂNEA DE PROBLEMAS N O

Sociedade Brasileira de Matemática OLIMPÍADA DE MATEMÁTICA DO ESTADO DO RIO GRANDE DO NORTE COLETÂNEA DE PROBLEMAS N O Olimpíada Brasileira de Matemática Sociedade Brasileira de Matemática PROGRAMA DE EDUCAÇÃO TUTORIAL OLIMPÍADA DE MATEMÁTICA DO ESTADO DO RIO GRANDE DO NORTE COLETÂNEA DE PROBLEMAS N O 01-2007 Problema

Leia mais

Módulo Tópicos Adicionais. Recorrências

Módulo Tópicos Adicionais. Recorrências Módulo Tópicos Adicionais Recorrências Módulo Tópico Adicionais Recorrências 1 Exercícios Introdutórios Exercício 1 Considere a sequência definida por x 1 d e x n r + x n 1, para n > 1 Trata-se de uma

Leia mais

SOLUÇÕES NÍVEL 1 2ª. FASE 2017

SOLUÇÕES NÍVEL 1 2ª. FASE 2017 SOLUÇÕES NÍVEL 1 2ª. FASE 2017 N1Q1 Solução item a) Como a casa pintada está na linha 3, Ana sorteou o número 3 e, como ela também está na coluna 4, concluímos que Pedro sorteou o número 1, pois 4 3 =

Leia mais

Exercícios: Recursão

Exercícios: Recursão Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem C Exercícios: Recursão 1. Faça uma função recursiva que calcule e retorne o fatorial

Leia mais

DINTER UFF/IFTM - Análise e Síntese de Algoritmos - Lista de Exercícios

DINTER UFF/IFTM - Análise e Síntese de Algoritmos - Lista de Exercícios DINTER UFF/IFTM - Análise e Síntese de Algoritmos - Lista de Exercícios - 2013 1. Uma pessoa sobe uma escada composta de n degraus, com passos que podem alcançar entre 1 e k n degraus. Escrever equações

Leia mais

Introdução Paradigmas

Introdução Paradigmas Introdução Paradigmas Recursividade Algoritmos tentativa e erro Divisão e conquista Programação dinâmica Algoritmos gulosos Algoritmos aproximados 1 Introdução O projeto de algoritmos requer abordagens

Leia mais

PUC-Rio Departamento de Informática Prof. Marcus Vinicius S. Poggi de Aragão Período: Horário: 4as-feiras de 13 às 16 horas - Sala 520L

PUC-Rio Departamento de Informática Prof. Marcus Vinicius S. Poggi de Aragão Período: Horário: 4as-feiras de 13 às 16 horas - Sala 520L PUC-Rio Departamento de Informática Prof. Marcus Vinicius S. Poggi de Aragão Período: 20047.1 Horário: 4as-feiras de 13 às 16 horas - Sala 520L PROJETO E ANÁLISE DE ALGORITMOS (INF 2926) Lista 1 1. Considere

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Principais paradigmas do projeto de algoritmos - Recursividade - Tentativa e erro - Divisão e Conquista - Programação dinâmica - Algoritmos Gulosos e de Aproximação

Leia mais

1ª LISTA DE EXERCÍCIOS

1ª LISTA DE EXERCÍCIOS UNIVERSIDADE SALGADO DE OLIVEIRA CURSO DE SISTEMAS DE INFORMAÇÃO DISCIPLINA: TEORIA DA COMPUTAÇÃO E ALGORITMOS PROF: GIULIANO PRADO DE MORAIS GIGLIO 1ª LISTA DE EXERCÍCIOS 1) Sobre variáveis, responda

Leia mais

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS. Aluno (s): 01 ATIVIDADE. Revisão de Conteúdo

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS. Aluno (s): 01 ATIVIDADE. Revisão de Conteúdo INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS DISCIPLINA: Lab. de Programação PROF: MSc. Flávio Barros PERÍODO: 2 DATA: Aluno (s): 01 ATIVIDADE / / Revisão de Conteúdo

Leia mais

Recursividade. Objetivos do módulo. O que é recursividade

Recursividade. Objetivos do módulo. O que é recursividade Recursividade Objetivos do módulo Discutir o conceito de recursividade Mostrar exemplos de situações onde recursividade é importante Discutir a diferença entre recursividade e iteração O que é recursividade

Leia mais

Classes, Herança e Interfaces

Classes, Herança e Interfaces Escola de Artes, Ciências e Humanidades EACH-USP ACH2002 Introdução à Ciência da Computação II Professor: Delano Medeiros Beder revisada pelo professor: Luciano Digiampietri EACH Segundo Semestre de 2011

Leia mais

JOGOS Bruno Holanda, Fortaleza CE

JOGOS Bruno Holanda, Fortaleza CE JOGOS Bruno Holanda, Fortaleza CE Nível Iniciante Problemas sobre jogos estão entre os mais atrativos para a maioria dos alunos que estão iniciando o seu gosto pela matemática e, por isso, vêm ganhando

Leia mais

Introdução à Análise Algoritmos

Introdução à Análise Algoritmos Introdução à Análise Algoritmos Notas de aula da disciplina IME 4-182 Estruturas de Dados I Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) abril/218 Ordenação por SELEÇÃO: Idéia: Dado um vetor

Leia mais

1. O retângulo da figura a seguir está dividido em 7 quadrados. Se a área do menor quadrado é igual a 1, a área do retângulo é igual a:

1. O retângulo da figura a seguir está dividido em 7 quadrados. Se a área do menor quadrado é igual a 1, a área do retângulo é igual a: XXV OLIMPÍADA BRASILEIRA DE MATEMÁTICA Primeira Fase Nível - A duração da prova é de horas. - Não é permitido o uso de calculadoras nem consultas a notas ou livros. - Você pode solicitar papel para rascunho.

Leia mais

Exercícios: Vetores e Matrizes

Exercícios: Vetores e Matrizes Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem C Exercícios: Vetores e Matrizes 1 Vetores 1. Faça um programa que possua um vetor

Leia mais

NÍVEL 3 - Prova da 2ª fase - Soluções

NÍVEL 3 - Prova da 2ª fase - Soluções NÍVEL 3 - Prova da ª fase - Soluções QUESTÃO 1 (a) Se o Dodó colocar um número x no visor e apertar, aparece o valor x 3 4 3 5 de f ( x) =. Logo, para x = 4, o valor que vai aparecer é f (4) = = =,5. x

Leia mais

MA14 - Aritmética Lista 1. Unidades 1 e 2

MA14 - Aritmética Lista 1. Unidades 1 e 2 MA14 - Aritmética Lista 1 Unidades 1 e 2 Abramo Hefez PROFMAT - SBM 05 a 11 de agosto 2013 Unidade 1 1. Mostre, por indução matemática, que, para todo n N {0}, a) 8 3 2n + 7 b) 9 10 n + 3.4 n+2 + 5 2.

Leia mais

Problemas dos Círculos Matemáticos. Problemas extras para o Capítulo 4

Problemas dos Círculos Matemáticos. Problemas extras para o Capítulo 4 Problemas dos Círculos Matemáticos Problemas extras para o Capítulo 4 Problemas dos Círculos Matemáticos - Capítulo 4 1 Exercícios Introdutórios Exercício 1. Quantos triângulos existem na figura abaixo?

Leia mais

Aula prática 5. Funções Recursivas

Aula prática 5. Funções Recursivas Programação Funcional UFOP DECOM 2014.1 Aula prática 5 Funções Recursivas Resumo Definições recursivas são comuns na programação funcional. Nesta aula vamos aprender a definir funções recursivas. Sumário

Leia mais

Buscando um Invariante

Buscando um Invariante Resolução de Problemas Lista 01 com dicas e discussão Faça mentalmente as seguintes multiplicações: 1. 27 37 2. 21 23 Invente e resolva um problema, usando como inspiração o problema anterior. Decida o

Leia mais

ANÁLISE DE ALGORITMOS

ANÁLISE DE ALGORITMOS ANÁLISE DE ALGORITMOS Paulo Feofiloff Instituto de Matemática e Estatística Universidade de São Paulo agosto 2009 Introdução P. Feofiloff (IME-USP) Análise de Algoritmos agosto 2009 2 / 102 Introdução

Leia mais

Programação Estruturada

Programação Estruturada Programação Estruturada Recursão Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Recursão Recursão 1 Recursão 2

Leia mais

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira Lista de exercícios sobre contagem de operações Prof. João B. Oliveira 1. metodo m ( Vetor V ) int i, res = 0; para i de 1 a V.size res = res + V[i]; return res; Soma de elementos de um vetor, O( ). 2.

Leia mais

Modelagem com relações de recorrência. Exemplo: Determinada população dobra a cada ano; população inicial = 5 a n = população depois de n anos

Modelagem com relações de recorrência. Exemplo: Determinada população dobra a cada ano; população inicial = 5 a n = população depois de n anos Relações de recorrência 8. RELAÇÕES DE RECORRÊNCIA Introdução a relações de recorrência Modelagem com relações de recorrência Solução de relações de recorrência Exemplos e aplicações Relações de recorrência

Leia mais

XXXIV OLIMPÍADA BRASILEIRA DE MATEMÁTICA PRIMEIRA FASE NÍVEL 2 (8º. e 9º. anos) GABARITO

XXXIV OLIMPÍADA BRASILEIRA DE MATEMÁTICA PRIMEIRA FASE NÍVEL 2 (8º. e 9º. anos) GABARITO XXXIV OLIMPÍADA BRASILEIRA DE MATEMÁTICA PRIMEIRA FASE NÍVEL (8º. e 9º. anos) GABARITO GABARITO NÍVEL 1) B 6) D 11) B 16) C 1) A ) E 7) E 1) B 17) D ) D 3) B 8) B 13) D 18) C 3) D 4) B 9) E 14) D 19) C

Leia mais

Lista 2 - PMR2300/3200

Lista 2 - PMR2300/3200 Lista 2 - PMR2300/3200 Fabio G. Cozman, Thiago Martins 8 de março de 2015 1. Qual String é impressa pelo programa: p u b l i c c l a s s What { p u b l i c s t a t i c void f ( i n t x ) { x = 2 ; p u

Leia mais

,12 2, = , ,12 = = (2012) 2.

,12 2, = , ,12 = = (2012) 2. 1 QUESTÃO 1 Usando a comutatividade da multiplicação, podemos escrever 1000 0,1,01 100 = 1000,01 00 0,1 = 01 01 = (01). QUESTÃO Observe que para obter o primeiro retângulo foi necessário escrever quatro

Leia mais

Recursividade, Tentativa e Erro

Recursividade, Tentativa e Erro Recursividade, Tentativa e Erro Túlio Toffolo www.toffolo.com.br Marco Antônio Carvalho marco.opt@gmail.com BCC402 Aula 07 Algoritmos e Programação Avançada Na aula anterior Prova 2 Na aula de hoje Técnicas

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Dividir e Conquistar IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/83 Projeto de Algoritmos por Divisão

Leia mais

Jogos e Brincadeiras I. 1. Brincadeiras

Jogos e Brincadeiras I. 1. Brincadeiras Polos Olímpicos de Treinamento Curso de Combinatória - Nível 1 Prof. Bruno Holanda Aula 1 Jogos e Brincadeiras I 1. Brincadeiras Nesta primeira parte da aula resolveremos duas questões retiradas da Olimpíada

Leia mais

ESTRUTURAS DE REPETIÇÃO - PARTE 2

ESTRUTURAS DE REPETIÇÃO - PARTE 2 AULA 16 ESTRUTURAS DE REPETIÇÃO - PARTE 2 16.1 A seqüência de Fibonacci Um problema parecido, mas ligeiramente mais complicado do que o do cálculo do fatorial (veja as notas da Aula 14), é o do cálculo

Leia mais

EXERCÍCIOS DE RECORDAÇÃO DE ALGORITMOS

EXERCÍCIOS DE RECORDAÇÃO DE ALGORITMOS UNIVERSIDADE SALGADO DE OLIVEIRA CURSO DE SISTEMAS DE INFORMAÇÃO DISCIPLINA: LINGUAGEM DE PROGRAMAÇÃO I PROF: GIULIANO PRADO DE MORAIS GIGLIO EXERCÍCIOS DE RECORDAÇÃO DE ALGORITMOS 0) Faça um algoritmo

Leia mais

RESOLUÇÃO DCC-UFRJ MATEMÁTICA COMBINATÓRIA 2006/2 PROVA Considere a soma. S n = n 2 n 1

RESOLUÇÃO DCC-UFRJ MATEMÁTICA COMBINATÓRIA 2006/2 PROVA Considere a soma. S n = n 2 n 1 DCC-UFRJ MATEMÁTICA COMBINATÓRIA 2006/2 PROVA 1 1. Considere a soma S n = 1 2 0 + 2 2 1 + 3 2 2 + + n 2 n 1. Mostre, por indução finita, que S n = (n 1)2 n + 1. Indique claramente a base da indução, a

Leia mais

INTEIROS. Luciana Santos da Silva Martino. lulismartino.wordpress.com PROFMAT - Colégio Pedro II. 25 de agosto de 2017

INTEIROS. Luciana Santos da Silva Martino. lulismartino.wordpress.com PROFMAT - Colégio Pedro II. 25 de agosto de 2017 Sumário REPRESENTAÇÃO DOS NÚMEROS INTEIROS Luciana Santos da Silva Martino lulismartino.wordpress.com lulismartino@gmail.com PROFMAT - Colégio Pedro II 25 de agosto de 2017 Sumário 1 Sistemas de Numeração

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Algoritmos de Ordenação em Tempo Linear IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/38 Algoritmos de Ordenação em Tempo Linear Limite Assintótico

Leia mais

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante).

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante). Divisão e Conquista Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 27 Divisão e Conquista É uma técnica para resolver problemas (veremos outras técnicas mais adiante). Consiste em 3 passos: Dividir

Leia mais

IV MARATONA DE PROGRAMAÇÃO INTERNA UERJ 18/06/2011. Este caderno contém 11 páginas com a descrição de 10 problemas 1 definidos a seguir:

IV MARATONA DE PROGRAMAÇÃO INTERNA UERJ 18/06/2011. Este caderno contém 11 páginas com a descrição de 10 problemas 1 definidos a seguir: IV MARATONA DE PROGRAMAÇÃO INTERNA UERJ 18/06/011 Este caderno contém 11 páginas com a descrição de 10 problemas 1 definidos a seguir: A - Liquidação!!! B Quadratura do retângulo II C Bolas chinesas II

Leia mais

Aplicações das Técnicas Desenvolvidas. Soluções de Exercícios e Tópicos Relacionados a Combinatória. 2 a série E.M.

Aplicações das Técnicas Desenvolvidas. Soluções de Exercícios e Tópicos Relacionados a Combinatória. 2 a série E.M. Aplicações das Técnicas Desenvolvidas Soluções de Exercícios e Tópicos Relacionados a Combinatória 2 a série E.M. Professores Tiago Miranda e Cleber Assis Aplicações das Técnicas Desenvolvidas Soluções

Leia mais

Técnicas de análise de algoritmos

Técnicas de análise de algoritmos CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Técnicas de análise de algoritmos Algoritmos e Estruturas de Dados I Natália Batista https://sites.google.com/site/nataliacefetmg/ nataliabatista@decom.cefetmg.br

Leia mais

Problema de seleção de atividades. Aula 14. Exemplo. Algoritmos Gulosos. Algoritmos Gulosos. Intervalo: par ordenado de números

Problema de seleção de atividades. Aula 14. Exemplo. Algoritmos Gulosos. Algoritmos Gulosos. Intervalo: par ordenado de números Problema de seleção de atividades Aula 14 Algoritmos Gulosos Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Intervalo: par ordenado de números [s[i],f[i]): início e fim do intervalo

Leia mais

Algoritmos e Lógica de Programação. 6ª Lista de Exercícios Comandos de Repetição

Algoritmos e Lógica de Programação. 6ª Lista de Exercícios Comandos de Repetição Algoritmos e Lógica de Programação 6ª Lista de Exercícios Comandos de Repetição 1. Qual a saída do programa abaixo? int i; for (i = 0; i < 10; i += 2) printf("%d\n", i / 2); 2. Qual a saída do programa

Leia mais

MATRIZES - PARTE Mais exemplos Multiplicação de duas matrizes AULA 26

MATRIZES - PARTE Mais exemplos Multiplicação de duas matrizes AULA 26 AULA 26 MATRIZES - PARTE 2 26. Mais exemplos Nesta aula, veremos mais dois algoritmos envolvendo matrizes. O primeiro deles calcula a matriz resultante da multiplicação de duas matrizes e utiliza três

Leia mais

CEFET/RJ Disciplina: Inteligência Artificial Professor: Eduardo Bezerra Lista de exercícios 02

CEFET/RJ Disciplina: Inteligência Artificial Professor: Eduardo Bezerra Lista de exercícios 02 . CEFET/RJ Disciplina: Inteligência Artificial Professor: Eduardo Bezerra Lista de exercícios 02 Créditos: alguns itens desta lista são adaptados do material da disciplina CS188 - Artificial Intelligence

Leia mais

Soluções dos Exercícios do Capítulo 2

Soluções dos Exercícios do Capítulo 2 A MATEMÁTICA DO ENSINO MÉDIO Volume 1 Soluções dos Exercícios do Capítulo 2 2.1. Seja X = {n N; a + n Y }. Como a Y, segue-se que a + 1 Y, portanto 1 X. Além disso n X a + n Y (a + n) + 1 Y n + 1 X. Logo

Leia mais

Prova da segunda fase - Nível 3

Prova da segunda fase - Nível 3 Caro Aluno, Parabéns pela sua participação na nona edição da Olimpíada de Matemática de São José do Rio Preto! Lembre-se de que uma Olimpíada é diferente de uma prova escolar. Muitas vezes, as questões

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Professor Ariel da Silva Dias Algoritmos Divisão e Conquista Construção incremental Resolver o problema para um sub-conjunto dos elementos de entrada; Então, adicionar

Leia mais

Programação Dinâmica. Programação Dinâmica Partição de Inteiros. Programação Dinâmica Partição de Inteiros. Programação Dinâmica Partição de Inteiros

Programação Dinâmica. Programação Dinâmica Partição de Inteiros. Programação Dinâmica Partição de Inteiros. Programação Dinâmica Partição de Inteiros Notas de aula da disciplina IME -8 ALGORITMOS E ESTRUTURAS DE DADOS II Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) Partição de Inteiros Dado n inteiro, determinar o número de maneiras de

Leia mais

Métodos de Ordenação Parte 4

Métodos de Ordenação Parte 4 Métodos de Ordenação Parte 4 Introdução à Ciência de Computação II Prof. Diego Raphael Amancio Baseado no material do Prof. Rudinei Goularte e Prof. Thiago A. S. Pardo 1 Ordenação por Intercalação Revisando...

Leia mais

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Medida do Tempo de Execução de um Programa David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Classes de Comportamento Assintótico Se f é uma função de complexidade para um algoritmo F, então

Leia mais

Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante

Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante Introdução Soma máxima de uma subsequência contígua Problema do troco Quantidade de formas de dar troco Problema da

Leia mais

Estruturas de Repetição

Estruturas de Repetição Algoritmos e Estruturas de Dados I (DCC/003) Estruturas de Repetição Aula Tópico 4 (while, for) 1 Problema 10 Suponha que soma (+) e subtração (-) são as únicas operações disponíveis em C. Dados dois números

Leia mais

AULA 24. Algoritmos p.856/905

AULA 24. Algoritmos p.856/905 AULA 24 Algoritmos p.856/905 Máximo divisor comum CLRS 31.1 e 31.2 Algoritmos p.857/905 Divisibilidade Suponha que a, b e d são números inteiros. Dizemos que d divide a se a = k d para algum número inteiro

Leia mais

ALGORITMOS COM SELEÇÃO 1 - ESTRUTURA CONDICIONAL (ESTRUTURAS DE CONTROLE)

ALGORITMOS COM SELEÇÃO 1 - ESTRUTURA CONDICIONAL (ESTRUTURAS DE CONTROLE) Algoritmos e Estruturas de Dados 1 Prof. Eduardo 1 ALGORITMOS COM SELEÇÃO 1 - ESTRUTURA CONDICIONAL (ESTRUTURAS DE CONTROLE) Até o momento da disciplina vimos comandos de entrada, processamento e saída

Leia mais

QUESTÕES DE PROVAS ANTIGAS

QUESTÕES DE PROVAS ANTIGAS CT-24 QUESTÕES DE PROVAS ANTIGAS ) Preencha a tabela abaixo com Î ou Ï: ω(log n) Θ(n) O(n log n) Ω(n 2 ) o(n ) 6n + 2n 2 + 2.log n + 4n + n.log n + log n 2) Dada a árvore binária abaixo, escreva os seus

Leia mais

1. Descubra quantos e quais são os triângulos equiláteros que podem. ser construídos com os vértices nos pontos da rede isométrica limitada

1. Descubra quantos e quais são os triângulos equiláteros que podem. ser construídos com os vértices nos pontos da rede isométrica limitada Problemas Curiosos 1. Descubra quantos e quais são os triângulos equiláteros que podem ser construídos com os vértices nos pontos da rede isométrica limitada dada a seguir: 2. Quantos e quais são os triângulos

Leia mais

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( ) Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista (2.1-2.2) DECOM/UFOP 2013/1 5º. Período Anderson Almeida Ferreira Adaptado do material desenvolvido por Andréa Iabrudi

Leia mais

Otimização Combinatória - Parte 4

Otimização Combinatória - Parte 4 Graduação em Matemática Industrial Otimização Combinatória - Parte 4 Prof. Thiago Alves de Queiroz Departamento de Matemática - CAC/UFG 2/2014 Thiago Queiroz (DM) Parte 4 2/2014 1 / 33 Complexidade Computacional

Leia mais

CIC 111 Análise e Projeto de Algoritmos II

CIC 111 Análise e Projeto de Algoritmos II CIC 111 Análise e Projeto de Algoritmos II Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 27 Square root algorithms Combining algorithms Integer partitions Mo s algorithm Square

Leia mais

XXXVII OLIMPÍADA PAULISTA DE MATEMÁTICA Prova da Primeira Fase 9 de agosto de 2014 Nível (6º e 7º anos do Ensino Fundamental)

XXXVII OLIMPÍADA PAULISTA DE MATEMÁTICA Prova da Primeira Fase 9 de agosto de 2014 Nível (6º e 7º anos do Ensino Fundamental) XXXVII OLIMPÍADA PAULISTA DE MATEMÁTICA Prova da Primeira Fase 9 de agosto de 2014 Nível (6º e 7º anos do Ensino Fundamental) Resoluções www.opm.mat.br PROBLEMA 1 a) O total de segundos destinados à visualização

Leia mais

38 a OLIMPÍADA BRASILEIRA DE MATEMÁTICA 2 a Fase Nível 1 (6 o ou 7 o ano)

38 a OLIMPÍADA BRASILEIRA DE MATEMÁTICA 2 a Fase Nível 1 (6 o ou 7 o ano) 38 a OLIMPÍADA BRASILEIRA DE MATEMÁTICA a Fase Nível 1 (6 o ou 7 o ano) GABARITO PARTE A - Cada problema vale 5 pontos CRITÉRIO DE CORREÇÃO: PARTE A Na parte A serão atribuídos 5 pontos para cada resposta

Leia mais

Lista de Figuras Figura 1 1: Figura 1 2: Figura 1 3: Figura 1 4: Figura 1 5: Figura 1 6: Figura 1 7: Figura 2 1: Figura 2 2: Figura 2 3: Figura 2 4:

Lista de Figuras Figura 1 1: Figura 1 2: Figura 1 3: Figura 1 4: Figura 1 5: Figura 1 6: Figura 1 7: Figura 2 1: Figura 2 2: Figura 2 3: Figura 2 4: Lista de Figuras Figura 1 1: Diagrama de Funcionamento do Laço while 34 Figura 1 2: Diagrama de Funcionamento do Laço do-while 35 Figura 1 3: Diagrama de Funcionamento do Laço for 36 Figura 1 4: Diagrama

Leia mais

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO. 4 a Lista de Exercícios Gabarito de algumas questões.

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO. 4 a Lista de Exercícios Gabarito de algumas questões. UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO MATEMÁTICA COMBINATÓRIA 4 a Lista de Exercícios Gabarito de algumas questões. Este gabarito foi feito direto no computador

Leia mais

Exercícios de Linguagem C

Exercícios de Linguagem C Exercícios de Linguagem C Aspectos básicos 1. Fazer um programa para receber um número inteiro de segundos do usuário e imprimir a quantidade correspondente em horas, minutos e segundos. 2. Fazer um programa

Leia mais

ALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão

ALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão Luiz Leão luizleao@gmail.com http://www.luizleao.com Conteúdo Programático 2.1 - Definições recursivas 2.2 - Como implementar recursividade 2.3 - Quando não usar recursividade 2.4 - Desenvolvendo algoritmos

Leia mais

Polos Olímpicos de Treinamento. Aula 1. Curso de Combinatória - Nível 2. Prof. Bruno Holanda

Polos Olímpicos de Treinamento. Aula 1. Curso de Combinatória - Nível 2. Prof. Bruno Holanda Polos Olímpicos de Treinamento Curso de Combinatória - Nível 2 Prof. Bruno Holanda Aula 1 Lógica Nos últimos anos, a participação brasileira em competições internacionais de matemática vem melhorado significamente.

Leia mais

PEGUE 10. Quantidade: 08 unidades

PEGUE 10. Quantidade: 08 unidades 1 PEGUE 10 Materiais Um tabuleiro e 66 cartas redondas com os numerais de 1 a 7 nas seguintes quantidades: 1 22 cartas; 6-2 cartas; 2-16 cartas; 7-2 cartas; 3-12 cartas; Coringa 1 carta. 4-7 cartas; 5-4

Leia mais

Calculou as bases do trapézio corretamente: +3 pontos

Calculou as bases do trapézio corretamente: +3 pontos 1. O quadrado ABCD abaixo tem área 144 cm 2 e seus lados satisfazem BC 3P C, CD 4DQ e AD 5AR (notação: dados dois pontos X e Y, denotamos a medida do segmento que liga X à Y por XY ). Responda o que se

Leia mais

Prog A B C A e B A e C B e C A,B e C Nenhum Pref

Prog A B C A e B A e C B e C A,B e C Nenhum Pref Polos Olímpicos de Treinamento Curso de Combinatória - Nível 2 Prof. Bruno Holanda Aula 2 Lógica II Quando lemos um problema de matemática imediatamente podemos ver que ele está dividido em duas partes:

Leia mais

OPRM a Fase Nível 1 01/09/18 Duração: 4 horas

OPRM a Fase Nível 1 01/09/18 Duração: 4 horas 1. Augusto propõe ao seu amigo o seguinte desafio: na figura abaixo, os números naturais de 1 a 12 são escritos de forma que a soma de quatro números em uma linha reta é a mesma para todas as linhas. Alguns

Leia mais

ALGORITMOS E PROGRAMAÇÃO DE COMPUTADORES I. Trabalho 1 (T1)

ALGORITMOS E PROGRAMAÇÃO DE COMPUTADORES I. Trabalho 1 (T1) ALGORITMOS E PROGRAMAÇÃO DE COMPUTADORES I Trabalho 1 (T1) Grupo de até três acadêmicos; Entregar os algoritmos escritos; Entregar as implementações dos algoritmos em arquivo organizados em uma pasta,

Leia mais

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b. Lista 1 8 de abril de 2013 1 Exercícios Básicos 1.1 Na bibliografia Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b. 1.2 Outros 1. Projete

Leia mais

UNIVERSIDADE FEDERAL DE PERNAMBUCO Lista de Exercícios / Cálculo Numérico 1ª Unidade

UNIVERSIDADE FEDERAL DE PERNAMBUCO Lista de Exercícios / Cálculo Numérico 1ª Unidade 1) Analise as alternativas abaixo e marque V para verdadeiro e F para falso. No segundo caso, explique como as tornaria verdadeiras: ( ) O método das secantes é utilizado para solucionar um problema de

Leia mais

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010 Universidade Federal de Ouro Preto Instituto de Ciências Exatas e Biológicas Programa de Pós-Graduação em Ciência da Computação Projeto e Análise de Algoritmos - 1 o semestre de 2010 Professor: David Menotti

Leia mais

Ficha 1 Noções de sequência e decisão em algoritmia

Ficha 1 Noções de sequência e decisão em algoritmia Ficha 1 Noções de sequência e decisão em algoritmia 1. Ler uma temperatura em Celsius e converter para Fahrenheit. Elabore o algoritmo e especifique as estruturas de dados necessárias para a resolução

Leia mais

38ª OLIMPÍADA BRASILEIRA DE MATEMÁTICA PRIMEIRA FASE NÍVEL 2 (8º e 9º anos do Ensino Fundamental) GABARITO

38ª OLIMPÍADA BRASILEIRA DE MATEMÁTICA PRIMEIRA FASE NÍVEL 2 (8º e 9º anos do Ensino Fundamental) GABARITO 38ª OLIMPÍADA BRASILEIRA DE MATEMÁTICA PRIMEIRA FASE NÍVEL 2 (8º e 9º anos do Ensino Fundamental) GABARITO GABARITO NÍVEL 2 1) C 6) B 11) B 16) D 21) A 2) C 7) C 12) C 17) D 22) A 3) D 8) E 13) D 18) C

Leia mais

Backtracking. Pequenos Bispos

Backtracking. Pequenos Bispos Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM Disciplina: BCC202 - Estruturas de Dados I Professores: Túlio A. Machado Toffolo

Leia mais

XXI Olimpíada de Matemática do Estado do Rio Grande do Norte. Prova do Nível I Em 25/09/2010

XXI Olimpíada de Matemática do Estado do Rio Grande do Norte. Prova do Nível I Em 25/09/2010 XXI Olimpíada de Matemática do Estado do Rio Grande do Norte Prova do Nível I Em 25/09/2010 Problema 1 Um professor de Matemática definiu a seguinte operação entre dois números naturais: Ele exemplificou

Leia mais

OPEMAT. Olimpíada Pernambucana de Matemática

OPEMAT. Olimpíada Pernambucana de Matemática OPEMAT Olimpíada Pernambucana de Matemática - 206 Nível. O ano de 206 está acabando, vamos ver se você conhece bem esse número. Para isso, julgue os itens a seguir: (V) (F) A maior potência de 2 que divide

Leia mais

LISTA DE EXERCÍCIOS MÊS 04

LISTA DE EXERCÍCIOS MÊS 04 São José dos Campos, 05 de Junho de 2008 Disciplina: CES 10 Introdução à Computação. Semestre 2008-2º Período Professor: Carlos Henrique Quartucci Forster Estagiária: Michelle de Oliveira Parreira Instituto

Leia mais

Percebendo Padrões. Vitor T T T F T T T F T T T F T T T F T T T F Maria T T T T T T T F F F T T T T T T T F F F

Percebendo Padrões. Vitor T T T F T T T F T T T F T T T F T T T F Maria T T T T T T T F F F T T T T T T T F F F Polos Olímpicos de Treinamento Curso de Combinatória - Nível 1 Prof. Bruno Holanda Aula 6 Percebendo Padrões Uma das principais habilidades que deve ser desenvolvida pelos alunos que desejam ter um bom

Leia mais

Aulas 5 e 6 / 28 e 30 de março

Aulas 5 e 6 / 28 e 30 de março Aulas 5 e / 8 e 30 de março 1 Notação de soma e produto Como expressar a seguinte soma de uma maneira mais concisa? 1 + + 3 3 + + 10? Note que as parcelas são semelhantes, e que a única coisa que varia

Leia mais

MC102 Aula 27 Recursão II

MC102 Aula 27 Recursão II MC102 Aula 27 Recursão II Instituto de Computação Unicamp 17 de Novembro de 2016 Roteiro 1 Recursão Relembrando 2 Cálculo de Potências 3 Torres de Hanoi 4 Recursão e Backtracking 5 Exercício (Instituto

Leia mais

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches CT-234 Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural Carlos Alberto Alonso Sanches CT-234 2) Algoritmos recursivos Indução matemática, recursão, recorrências Indução matemática Uma

Leia mais

Hewlett-Packard CONJUNTOS NUMÉRICOS. Aulas 01 a 08. Elson Rodrigues, Gabriel Carvalho e Paulo Luiz Ramos

Hewlett-Packard CONJUNTOS NUMÉRICOS. Aulas 01 a 08. Elson Rodrigues, Gabriel Carvalho e Paulo Luiz Ramos Hewlett-Packard CONJUNTOS NUMÉRICOS Aulas 01 a 08 Elson Rodrigues, Gabriel Carvalho e Paulo Luiz Ramos Ano: 2019 Sumário CONJUNTOS NUMÉRICOS... 2 Conjunto dos números Naturais... 2 Conjunto dos números

Leia mais

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista Algoritmos de Ordenação Profº Carlos Alberto T. Batista E-mail: carlos.batista@facape.br carlos36_batista@yahoo.com.br Por que ordenar os dados? Encontrar elementos em uma lista torna-se algo simples e

Leia mais

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos. Edson Prestes Edson Prestes Programação Dinâmica A programação dinâmica costuma ser aplicada a problemas de otimização resultando, em geral, em algoritmos mais eficientes que os mais diretos. Esse método é útil quando

Leia mais

Contagem I. Figura 1: Abrindo uma Porta.

Contagem I. Figura 1: Abrindo uma Porta. Polos Olímpicos de Treinamento Curso de Combinatória - Nível 2 Prof. Bruno Holanda Aula 4 Contagem I De quantos modos podemos nos vestir? Quantos números menores que 1000 possuem todos os algarismos pares?

Leia mais

Comandos de Repetição

Comandos de Repetição Programação de Computadores I UFOP DECOM 2013 2 Exercícios de Revisão Comandos de Repetição Sumário 1 Testes de Compreensão 1 2 Exercícios de Programação 2 1 Testes de Compreensão 1 Determine o valor de

Leia mais

CIC 110 Análise e Projeto de Algoritmos I

CIC 110 Análise e Projeto de Algoritmos I CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá Algoritmos Gulosos AULA 06 Algoritmos Gulosos Um algoritmo guloso constrói uma solução para

Leia mais