Você está na página 1de 13

Capítulo II

FUNDAMENTOS DA
ANÁLISE DA EFICIÊNCIA
DO ALGORITMO

Complemento de Algoritmo e
27/09/2018 Complexidade 1
Resumo

 Análise matemática de algoritmos não


recursivos

 Análise matemática de algoritmos


recursivos

Complemento de Algoritmo e
27/09/2018 Complexidade 2
Análise matemática de
algoritmos não recursivos

Complemento de Algoritmo e
27/09/2018 Complexidade 3
Análise matemática para algoritmos não
recursivos
Procedimento a seguir para análise matemática do algoritmo não
recursivo.

1. Encontre a variável que indica o tamanho de entrada.


2. Identifique a operação básica do algoritmo (normalmente isto
encontra-se dentro do ciclo)
3. Verifique se o número de vezes que é executado a operação
básica do algoritmo depende do tamanho de entrada. Se alem
disso, isto depende também de uma outra propriedade, as
eficiências do pior caso, o caso médio e se necessário, melhor
caso devem ser analisadas em separado.
4. Construa o somatório expressando o número de vezes a
operação básica do algoritmo é executado.
5. Usando as fórmulas e regras de manipulação de somatórios,
encontre uma forma próxima para a conta ou encontre a sua
ordem de crescimento.
Complemento de Algoritmo e
27/09/2018 Complexidade 4
Exemplo 1: Elemento máximo
 Determina o valor de maior elemento num dado vector
 Entrada: Um vector A[0.. n–1] de números reais
 Saída: O valor de maior elemento de A

maxElemento(A[0.. n–1])
maxval <– A[0]
para i <-1 até n-1 faça
se A[i] > maxval
maxval <- A[i]
retorna maxval

 Medida do tamanho de entrada -?


 Operação Básica -? (operação realizada na maioria das vezes)
 Quantas vezes é a operação básica executada?
Complemento de Algoritmo e
27/09/2018 Complexidade 5
Exemplo2: Problema de Unicidade

 Determina se todos elementos de um dado vector são distintos


 Entrada: Um vector A[0.. n–1]
 Saída: Retorna “verdade” se todos elementos no vector A são distintos e
“falso” caso contrário
unicidade(A[0.. n–1])
para i <-1 até n-2 faça
para j <- i+1 até n-1 faça
se A[i] = A[j]
retorna falso
retorna verdade

 Medida do tamanho de entrada -?


 Operação Básica -? (operação realizada na maioria das vezes)
 Quantas vezes é executada a operação básica?
Nota: são o pior caso e o melhor caso o mesmo? Complemento de Algoritmo e
27/09/2018 Complexidade 6
Example 2 – Análise do pior caso
Dois casos - ambos igualmente ruim
1. Os dois últimos elementos são os únicos que são iguais
2. Não existem dois elementos iguais
Quantas comparações são feitas para cada um desses
casos?

n2 n2 n2 n2

C pior
( n)   1   (n  1)  (i  1)  1   (n  i  1)
i  0 j i 1 i 0 i 0

 (n  1)  (n  2)  (n  3)  ...  1
(n  1)n n 2  n n 2
    O(n 2 )
2 2 2
Complemento de Algoritmo e
27/09/2018 Complexidade 7
Exemplo 3: Multiplicação de Matriz

Complemento de Algoritmo e
27/09/2018 Complexidade 8
Exemplo 3: Multiplicação de Matriz

 Multiplica duas matrizes de ordem n usando a definição


 Entrada: Duas matrizes A e B de ordem n
 Saída: Matriz C=AB

multMatriz(A[0.. n–1,0.. n-1], B[0.. n–1,0.. n-1])


para i <-0 até n-1 faça
para j <- 0 até n-1 faça
para k <- 0 até n-1 faça
C[i,j] <- C[i,j] + A[i,k]*B[k,j]
retorna C

 Medida do tamanho de entrada -?


 Operação Básica -? (operação realizada na maioria das vezes)
 Quantas vezes é a operação básica executado?
Nota: são o pior caso e o melhor caso o mesmo?
Complemento de Algoritmo e
27/09/2018 Complexidade 9
Pior caso
n 1 n 1 n 1
C ( n)   1
i 0 j 0 k 0
n 1 n 1
C ( n)   n
i 0 j 0
n 1
C ( n)   n  n  O ( n )
2 3 3

i 0

Complemento de Algoritmo e
27/09/2018 Complexidade 10
Exemplo 4: Contagem de dígitos binários

Complemento de Algoritmo e
27/09/2018 Complexidade 11
Exemplo 4: Contagem de dígitos binários

 Entrada: Um número positivo n


 Saída: A quantidade de digitos binário de n na sua representação binária.

binario(n)
cont <- 1
enquanto n > 1 faça
cont <- cont +1
n <- n/2
retorna cont

 Este algoritmo não pode ser investigado exactamente do mesmo modo


dos exemplos anteriores são.
 Qual é a operação feita com mais frequência?
 Quantas vezes isso acontece (somatórios não se aplica aqui)
◦ n é dividido ao meio cada vez assim que deve acontecer cerca de log2n vezes
Complemento de Algoritmo e
27/09/2018 Complexidade 12
Próxima aula

 Análise matemática de algoritmos


recursivos

Complemento de Algoritmo e
27/09/2018 Complexidade 13