Lista de Exercícios 1 – Análise de Complexidade Questão 1

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