Universidade Federal de Minas Gerais Projeto e Análise de Algoritmos Instituto de Ciências Exatas 2º Semestre de 2013 PPGCC Profs. Jussara, Luiz, Sebastián, Wagner Data de Entrega: 03/04/2017 Valor: 5 Pontos Lista de Exercícios 1 – Análise de Complexidade Questão 1 – Invariantes, Recursividade O algoritmo de busca binária funciona da seguinte forma: dados um vetor ordenado A e um elemento x a ser pesquisado, escolhe-se primeiramente o elemento central do vetor (A[meio]). Se esse elemento for igual a x, a busca termina. Senão a busca é repetida/continua nos subvetores da direita ou esquerda caso x seja respectivamente maior ou menor que A[meio], até que não haja mais elementos a serem comparados. Considere nessa questão que o elemento x está sempre presente no vetor. a) Um possível algoritmo não recursivo para a busca binária é mostrado abaixo. Prove que esse algoritmo funciona usando invariantes de loop. esq = 0; dir = n-1; while(esq != dir) { meio = (esq + dir) / 2; if(x==A[meio]) esq = dir = meio; else if(x<A[meio]) dir = meio-1; else esq = meio+1; } printf("Achou na posição %d", esq); b) Implemente um algoritmo recursivo para realizar a busca binária. c) Qual a complexidade do seu algoritmo? Para isso, determine e resolva a equação de recorrência para o pior caso da busca binária usando os 3 métodos vistos em sala. Questão 2 – Notação Assintótica Considerando que f(n) = o(g(n)), prove se as afirmativas abaixo são verdadeiras ou falsas a) f(n) + g(n) = (f(n)) c) f(n) + g(n) = (g(n)) b) f(n) + g(n) = O(f(n)) d) g(n) = (f(n)) (continua) Questão 3 – Análise Probabilística Considere o algoritmo de ordenação por seleção mostrado abaixo, no qual as trocas só são efetuadas se o menor elemento encontrado pelo loop interno for diferente do elemento a[j]. void Selecao(int a[], int n){ int i,j,iMin; // os n elementos do vetor estão nas posições [0..n-1] for (j = 0; j < n-1; j++) { iMin = j; for (i = j+1; i < n; i++) { if (a[i] < a[iMin]) iMin = i; } if (iMin != j) troca(a[j],a[iMin]); } } Utilizando análise probabilística, mostre qual é o número de trocas efetuado pelo algoritmo no caso médio. Questão 4 - Análise Amortizada a) Considere que sejam feitas n operações em uma estrutura de dados, cada operação com um índice i, i=1,2,3,...,n. Cada operação tem um custo i, se i for uma potência de dois ou 1 em caso contrário. Use o método de análise agregada para determinar o custo amortizado por operação. b) Repita a sua análise usando o “método da contabilidade” (accouting method). c) Repita a sua análise usando o “método potencial” (potential method).