Pós-graduação em Ciência da Computação – UFU Disciplina – Análise de Algoritmos Profa. Sandra de Amo Exercícios – AULA 9 Exercicio 1. Execute passo a passo o algoritmo de multiplicação de inteiros de n bits visto em aula, de complexidade O(n2) para os inputs: x = 10011011 e y = 10111010 (escritos na base 2). Exercicio 2: Faça o mesmo do exercicio 1, mas utilizando o algoritmo de Gauss, mais eficiente (com 3 chamadas recursivas ao invés de 4), visto em aula. Exercicio 3: Começando com uma fórmula recursiva T(n) = 2 T(n/2) + O(n), onde T(n) = tempo do algoritmo para entradas de tamanho n, é possivel, através de substituições sucessivas, encontrar uma fórmula para T(n), em função somente de n, como mostrado abaixo. Usando o fato de que O(n) ≤ cn, e que T(1) = O(1) temos : T(n) = 2 T(n/2 ) + O(n) ≤ 2 T(n/2) + cn O padrão genérico é: Fazendo k = log2 n = número total de níveis Pede-se: Faça o mesmo para as seguintes recorrências: 1. Faça o mesmo para a seguintes recorrência: T(n) = 3T(n/2) + O(n). Qual o termo geral k-ésimo nests caso. E qual valor de k deve ser utilizado no final para obter a fórmula sem recorrência ? 2. Agora tente a recorrência T(n) = T(n-1) + O(1), um caso que não é coberto pelo Teorema Mestre visto em aula. Você pode resolver esta fórmula também, encontrando uma fórmula “pura”, sem recorrência ? Exercicio 4: Suponha que você tem os seguintes algoritmos para resolver um problema e precisa escolher um. Qual a complexidade em tempo de cada um dos algoritmos e qual deles você escolheria ? • O Algoritmo A resolve problemas de tamanho n dividindo-os em 5 subproblemas com input com tamanho n/2, resolvendo recursivamente cada subproblema e combinando as soluções em tempo linear. • O Algoritmo B resolve problemas de tamanho n dividindo-os em 2 subproblemas com input de tamanho n-1, resolvendo recursivamente cada subproblema e combinando as soluções em tempo constante. • O Algoritmo C resolve problemas de tamanho n dividindo-os em 9 subproblemas com input de tamanho n/3, resolvendo recursivamente cada subproblema e combinando as soluções em tempo O(n2). Exercicio 5: Quantas linhas (em função de n, usando a notação O) o seguinte programa imprime? Escreva uma fórmula de recorrência para L(n) = número de linhas impresso pelo programa e resolva esta recorrência como no exercício 3. Você pode supor que n é uma potência de 2. Exercicio 6. Dado um array ordenado de inteiros distintos A[1,...,n], você quer descobrir se existe um índice i tal que A[i] = i. Dê um algoritmo do tipo dividir para conquistar que resolva este problema e cuja complexidade seja O(log n)> Exercicio 7. Resolva as seguintes relações de recorrência e dê a ordem assintótica correspondente O(.) para cada uma delas