Você está na página 1de 15

Análise e Síntese de Algoritmos

Sidnei Cruz
Departamento de Engenharias e Ciências do Mar
Uni-CV

2013/2014

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 1 / 13


Algoritmos

Algoritmo

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 2 / 13


Algoritmos

Algoritmo

Procedimento computacional bem denido que aceita uma dada


entrada e produz uma dada saída.
I Ferramenta para resolver um problema computacional bem denido
F Ordenação de sequências de valores
F Caminhos mais curtos em grafos dirigidos
F etc · · ·

Pseudo-Código

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 2 / 13


Algoritmos

Algoritmo

Procedimento computacional bem denido que aceita uma dada


entrada e produz uma dada saída.
I Ferramenta para resolver um problema computacional bem denido
F Ordenação de sequências de valores
F Caminhos mais curtos em grafos dirigidos
F etc · · ·

Pseudo-Código

Utilizado na descrição de algoritmos


Apresentar os detalhes essenciais de um algoritmo sem a verbosidade
das linguagens de programação

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 2 / 13


Exemplo Ordenação

Entrada: sequência de valores A[1..n]


Objectivo: ordenar valores em A de forma crescente
Saída: sequência de valores ordenados A[1..n]
InsertionSort
1 for j = 2 to length[A]
2 do key = A[j]
3 i = j - 1
4 while i > 0 and A[i] > key
5 do A[i+1] = A[i]
6 i = i - 1
7 A[i+1] = key

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 3 / 13


Análise de Algoritmo

Medidas de Complexidade

Tempo necessário (execução)


Espaço necessário

Tanto o tempo como o espaço dependem do tamanho da entrada


Entrada depende do problema que o algoritmo pretende resolver
Exemplo: No InsertionSort uma medida razoável é o número de
elementos a ordenar
Exemplo: Num grafo as medidas utilizadas são o número de vértices e
o de arcos

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 4 / 13


Tempo de execução

n f (n) = n f (n) = n2 f (n) = 2 n


f(n) = n!
10 0.01 µs 0.10 µs 1.00 µs 3.63 ms
20 0.02 µs 0.40 µs 1.00 ms 77.1 anos
30 0.03 µs 0.90 µs 1.00 s 8.4 * 1015 anos
40 0.04 µs 1.60 µs 18.3 min
50 0.05 µs 2.50 µs 13 dias
100 0.10 µs 10 µs 4 * 1013 anos
1000 1.00 µs 1 ms

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 5 / 13


Tempo de execução

Exemplo: Algoritmo InsertionSort


I ci: custo de executar a instrução i
I t
j : número de vezes que ciclo while é executado para cada j,
j=2,...,n

InsertionSort

. Custo #Exec
InsertionSort(A)
. c1 n
1 for j = 2 to length[A] . c2 n-1
2 do key = A[j] . c3 n-1
c4 P tj : j = 2..n
P
3 i = j - 1 .
4 while i > 0 and A[i] > key . c5 P tj − 1: j = 2..n
5 do A[i+1] = A[i] . c6 tj − 1: j = 2..n
6 i = i - 1 . c7 n-1
7 A[i+1] = key

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 6 / 13


Tempo de execução

Exemplo: Algoritmo InsertionSort


IT(n) : tempo de execução do algoritmo em função do número de
elementos a ordenar
T (P
n) = c 1n + c 2(n − 1) + c 3(n − 1) + c 4 nj=2 tj + c 5 nj=2 tj − 1 +
P P

c 6 nj=2 tj − 1 + c 7(n − 1)

I O tempo de execução depende da sequência a ordenar !

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 7 / 13


Tempo de execução

Análise melhor-caso

Sequência de entrada já ordenada


T (n) = c 1n + c 2(n − 1) + c 3(n − 1) + c 4(n − 1) + c 7(n − 1)
T (n) = an + b

T(n) é função linear de n

Análise pior-caso

Sequência de entrada ordenada por ordem inversa


t = j para j = 2...n
j

T (n) = an 2
+ bn + c

T(n) é função quadrática de n

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 8 / 13


Análise pior-caso

Uso do pior-caso como valor para a complexidade

Representa um limite superior/inferior no tempo de execução


Ocorre numerosas vezes
O valor médio é muitas vezes próximo do pior-caso
Geralmente é mais fácil de calcular

Caso-médio

Importante em algoritmos probabilísticos


É necessário saber a distribuição dos problemas

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 9 / 13


Notação Assimptótica

Objectivo é caracterizar tempos de execução dos algoritmos para


tamanhos arbitrários das entradas
A notação assimptótica permite estabelecer taxas de crescimento dos
tempo de execução dos algoritmos em função dos tamanhos das
entradas
Constantes multiplicativas e aditivas tornam-se irrelevantes
I Nota: Tempo de execução de cada instrução não é essencial para o
comportamento assimptótico de um algoritmo
Simbolos da notação assimptótica
I ΘO Ω
I oω

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 10 / 13


Notação Assimptótica
A notação mais comummente usada para medir algoritmos é O
(big-Oh), que permite expressar um limite superior da complexidade
Notação O: Limite Assimptótico Superior

O(g(n)) = {f(n): existem constantes positivas c e n , tal que


0

0≤ f(n) ≤ cg(n), para n ≥ n0 }


f(n) = O(g(n)), signica f(n)∈ O (g (n))

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 11 / 13


Notação Assimptótica
A notação (big Ω) permite expressar um limite inferior da
complexidade
Notação Ω: Limite Assimptótico Inferior
Ω(g(n)) = {f(n): existem constantes positivas c e n , tal que
0

0≤ cg(n) ≤ f(n), para n ≥ n0 }


f(n) = Ω(g(n)), signica f(n)∈ Ω(g (n))

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 12 / 13


Notação Assimptótica
A notação Θ (big Theta) permite expressar uma estimativa precisa da
complexidade de um algoritmo
Notação Θ: Limite Assimptótico Apertado
Θ(g(n)) = {f(n): existem constantes positivas c1, c2 e n , tal que
0

0≤ c1g(n) ≤ f(n) ≤ c2g(n), para n ≥ n0 }


f(n) = Θ(g(n)), signica f(n)∈ Θ(g (n))

S.Cruz (DECM/Uni-CV) Análise e Síntese de Algoritmos (ASA) 2013/2014 13 / 13

Você também pode gostar