Você está na página 1de 9

Algoritmos e Complexidade

Ana Teresa Freitas


INESC-
INESC-ID/IST
3/17/2005 1

O que um algoritmo?

Algoritmos: Sequncia de instrues necessrias para a resoluo


de um problema bem formulado [passveis de implementao em
computador]

Estruturas de Dados: forma ou processo de guardar informao

Algoritmos eficientes usam "boas" estruturas de dados

3/17/2005 2

1
Algoritmos

Estratgia:
especificar (definir propriedades)
arquitectura (algoritmo e estruturas de dados)
Analise de complexidade (tempo de execuo e
memria)
implementar (numa linguagem de programao)
testar (submeter entradas e verificar observncia das
propriedades especificadas)

3/17/2005 3

Algoritmos como rea de estudo e


investigao
Suficientemente antiga que os conceitos bsicos e
a informao essencial so bem conhecidos
Suficientemente nova de forma a permitir novas
descobertas e novos resultados
Imensas reas de aplicao:
cincia
engenharia
comerciais

3/17/2005 4

2
Relao entre Algoritmos e Estruturas de
Dados
Algoritmos so mtodos para resolver problemas
problemas tm dados
dados so tratados (neste contexto) computacionalmente
O Processo de organizao dos dados pode determinar a
eficincia do algoritmo
algoritmos simples podem requerer estruturas de dados complexas
algoritmos complexos podem requerer estruturas de dados simples

Para maximizar a eficincia de um algoritmo as estruturas de


dados utilizadas tm de ser projectadas em simultneo com
o desenvolvimento do algoritmo

3/17/2005 5

Anlise de Algoritmos
Para avaliar e comparar o desempenho de dois
algoritmos:
executamos ambos (muitas vezes) para ver qual mais rpido
fornece indicaes sobre o desempenho e informao sobre como
efectuar uma anlise mais profunda
Que dados usar?
dados reais: verdadeira medida do custo de execuo
dados aleatrios: assegura-nos que as experincias testam o
algoritmo e no apenas os dados especficos
Caso mdio
dados perversos: mostram que o algoritmo funciona com qualquer
tipo de dados
Pior caso!
dados benficos:
Melhor caso
3/17/2005 6

3
Anlise de Algoritmos
Anlise precisa uma tarefa complicada
algoritmo implementado numa dada linguagem
linguagem compilada e programa executado num
dado computador
difcil prever tempos de execuo de cada instrues e
antever optimizaes
muitos algoritmos so "sensveis" aos dados de entrada
muitos algoritmos no so bem compreendidos
Para prever o tempo de execuo de um programa
apenas necessrio um pequeno conjunto de
ferramentas matemticas
3/17/2005 7

Anlise: Crescimento de Funes


O tempo de execuo geralmente dependente de
um nico parmetro N
ordem de um polinmio
tamanho de um ficheiro a ser processado, ordenado, etc
ou medida abstracta do tamanho do problema a
considerar (usualmente relacionado com o nmero de
dados a processar)

Quando h mais de um parmetro


procura-se exprimir todos os parmetros em funo de
um s
faz-se uma anlise em separado para cada parmetro

3/17/2005 8

4
Anlise: Crescimento de Funes
Os Algoritmos tm tempo de execuo
proporcional a
1 - muitas instrues so executadas uma s vez ou
poucas vezes (se isto for verdade para todo o programa
diz-se que o seu tempo de execuo constante)

logN - tempo de execuo logartmico (cresce


ligeiramente medida que N cresce) (quando N duplica
log N aumenta mas muito pouco; apenas duplica
quando N aumenta para N2)

N - tempo de execuo linear (tpico quando algum


processamento feito para cada dado de entrada)
(situao ptima quando necessrio processar N
dados de entrada) (ou produzir N dados na sada)
3/17/2005 9

Anlise: Crescimento de Funes


N log N - tpico quando se reduz um problema em sub-
problemas, se resolve estes separadamente e se combinam
as solues (se N 1 milho N log N perto de 20 milhes)

N2 - tempo de execuo quadrtico (tpico quando preciso


processar todos os pares de dados de entrada) (prtico apenas
em pequenos problemas, ex: produto matriz - vector)

N3 - tempo de execuo cbico (para N = 100, N3 = 1 milho,


ex: produto de matrizes)

2N - tempo de execuo exponencial (provavelmente de pouca


aplicao prtica; tpico em solues de fora bruta) (para N
= 20, 2N = 1 milho; N duplica, tempo passa a ser o
quadrado)
3/17/2005 10

5
Anlise: Notao "O grande"
A notao matemtica que nos permite suprimir detalhes na
anlise de algoritmos

Definio: uma funo g(N) diz-se ser O(f(N)) se existem


constantes c0 e N0 tais que g(N) < c0 f(N) para qualquer N >
N0

A notao usada com trs objectivos:


limitar o erro que feito ao ignorar os termos menores nas frmulas
matemticas
limitar o erro que feito na anlise ao desprezar parte de um
programa que contribui de forma mnima para o custo/complexidade
total
permitir-nos classificar algoritmos de acordo com limites superiores
no seu tempo de execuo

3/17/2005 11

Notao O grande - Representao Grfica

Limitar uma funo com


c0 f(N)
uma aproximao O N0
g(n) = O(f(N))

- g(N) debaixo de uma


curva com o g(N)
andamento de f() a
partir de um dado N

f(N)

3/17/2005 12

6
Metodologia para determinao de
complexidade
Suponha o seguinte cdigo

for (i = 0; i < N; i++) { instrues; }


contabilizao do nmero de instrues simples: N iteraes e em
cada uma so executadas um numero constante de instrues: O(N)

Suponha o cdigo seguinte:

for (i = 0; i < N; i++) {


for (j = 0; j < N; j++) {
instrues;
}
}
contabilizao do nmero de instrues ainda simples: loop interno
O(N) e executado N vezes: O(N2)

3/17/2005 13

Algoritmos Tecnicas de projecto

Procura exaustiva ou fora bruta (Brute Force)


O algoritmo examina todas as alternativas possveis
para encontrar uma soluo particular
Normalmente no encontra uma soluo em tempo til,
mas garante que a encontra

Branch-and-bound ( Pruning)
Ignora um conjunto de alternativas desnecessrias
Menor tempo de execuo e garante que encontra a
soluo

3/17/2005 14

7
Algoritmos Tecnicas de projecto

Procura gannciosa (Greedy)


Muitos algoritmos tm procedimentos iterativos
e escolhem em cada iterao um nmero de
possveis alternativas
Escolhe as alternativas mais atractivas, umas
podem levar soluo outras no
Pode no levar soluo correcta

3/17/2005 15

Algoritmos Tecnicas de projecto

Programao dinmica (Dynamic


Programming)
Parte o problema em sub-problemas e utiliza as
solues dos sub-problemas para construir a
soluo do problema original
O nmero de sub-problemas pode se tornar
demasiado grande
Pode ser demasiado dispendioso relativamente
ao tempo de execuo
3/17/2005 16

8
Algoritmos Tecnicas de projecto

Dividir para conquistar (Divide-and-Conquer)


Resolver um problema grande pode ser muito difcil,
mas resolver dois problemas menores pode se tornar
significativamente mais simples
Divide o problema em problemas menores e resolve
cada um de uma forma independente
Combina as solues de todos os sub-problemas para
obter a soluo do problema original
A etapa de recombinao das solues normalmente
crtica e dispendiosa em termos de tempo
3/17/2005 17

Algoritmos Tecnicas de projecto

Aprendizagem (Machine Learning)


Baseiam a sua estratgia na anlise computacional de
dados previamente coleccionados

Aleatrios (Randomized)
Em cada passo pode ser atirada uma moeda ao ar para
decidir o passo seguinte
Existem problemas prticos onde estes algoritmos so
competitivos relativamente aos algoritmos
determinsticos

3/17/2005 18