You are on page 1of 2

Disciplina:

Estrutura de Dados e Algoritmos Docente: Prof. Doutor. Manuel Zunguze




Ficha Nr. 1

Tema: Complexidade de Algoritmos


1. Perdido em uma terra muito distante, você se encontra em frente a um muro de
comprimento infinito para os dois lados (esquerda e direita). Em meio a uma escuridão
total, você carrega um lampião que lhe possibilita ver apenas a porção do muro que se
encontra exatamente à sua frente (o campo de visão que o lampião lhe proporciona
equivale exatamente ao tamanho de um passo seu). Existe uma porta no muro que você
deseja atravessar. Supondo que a mesma esteja a n passos de sua posição inicial (não se
sabe se à direita ou à esquerda), elabore um algoritmo para caminhar ao longo do muro
que encontre a porta em O(n) passos. Considere que n é um valor desconhecido
(informação pertencente à instância). Considere que a ação composta por dar um passo
e verificar a posição do muro correspondente custa O(1).


2. Provar que 3n ≠ O(2n).


3. Considere os seguintes algoritmos:
a) int a,b, aux; b) float media, notas[100];
scanf(“%d%d”,&a,&b); int i, soma = 0, media;
aux = a; for(i=0;i<=100;i++) {
a = b; printf(“entre com a nota”);
b = aux; scanf(“%d”,&notas[i]);
printf(“%d , %d”,a,b); soma = soma + notas[i];
}
media = soma/100;
printf(“A media é: %d”, media);

c) for(i=0;i<=N_LIN1;i++){ d) for(j=1;j<=n;j++){
for(j=0;j<=N_COL2;j++){ for(k=1;k<=n;k++){
C[i,j] = 0; p=p+1;
for(k=0;k<=N_COL1;k++){ }}
C[i,j] = C[i,j] + A[i,k] * B[k,j];
}}}

Faça um estudo comparativo e determine qual ou quais dos 4 algoritmos tem a maior
complexidade.

Lema: Aprender a aprender, Construir e Inovar



4. Dois algoritmos A e B possuem complexidade n5 e 2n, respectivamente. Você utilizaria o
algoritmo B ao invés do A. Em qual caso? Exemplifique.


5. Por muitas vezes damos atenção apenas ao pior caso dos algoritmos. Explique o porque.


6. Para duas funções g(n) e f(n) temos que f(n)=θ(n) se somente se f(n)=Ω(g(n)) e
f(n)=O(g(n)). Explique o teorema acima.


7. Podemos definir o seguinte algoritmo para calcular a ordem de complexidade de
algoritmos não recursivos:
1- Escolher o parâmetro que indica o tamanho da entrada;
2- Identificar a operação básica (comparação, atribuição);
3- Estabeleça uma soma que indique quantas vezes sua operação básica foi executada
(pior caso);
4- Utilize regras para manipulação de soma e fórmulas definindo uma função de
complexidade;
5- Encontre a ordem de complexidade
a) Baseando-se no algoritmo acima determine a ordem de complexidade do algoritmo
abaixo:
MaxMin(vetor v)
max=v[1];
min=v[1];
para i=2 até n faça
se v[1]> max então max=v[1]; fim se
se v[1]< min então min=v[1]; fim se
fim para;
fim.
b) Podemos dizer que o algoritmo acima é O(n2)? Justifique.

Lema: Aprender a aprender, Construir e Inovar