Académique Documents
Professionnel Documents
Culture Documents
A importancia
dos algoritmos para a computacao Dificuldade intrnseca de problemas
Exemplos:
de entrega de uma
calcular as rotas dos caminhoes
distribuidora de bebidas em Sao Paulo, minimizando a O mundo ideal: os computadores tem velocidade de
distancia percorrida. (vehicle routing) processamento e memoria infinita. Neste caso, qualquer
calcular o numero
mnimo de containers para transportar algoritmo e igualmente bom e esta disciplina e inutil!
um conjunto de caixas com produtos. (bin packing 3D) ..
Porem.
calcular a localizacao e o numero
mnimo de antenas de O mundo real: computadores tem velocidade de
celulares para garantir a cobertura de uma certa regiao processamento e memoria limitadas.
geografica. (facility location)
e muito mais. . . Neste caso, faz muita diferenca ter um bom algoritmo.
importante saber identificar quando estamos lidando com um
E
problema N P-completo!
de um vetor de n elementos
Exemplo: ordenacao O que acontece quando ordenamos um vetor de um
Suponha que os computadores A e B executam de elementos? Qual algoritmo e mais rapido?
milhao
por segundo, respectivamente.
1G e 10M instrucoes Algoritmo 1 na maquina A:
Ou seja, A e 100 vezes mais rapido que B. 2.(106 )2 instruc
oes
2000 segundos
109 instruc
oes/segundo
Algoritmo 1: implementado em A por um excelente
programador em linguagem de maquina
(ultra-rapida). Algoritmo 2 na maquina B:
Executa 2n2 instrucoes.
50.(106 log 106 ) instruc
oes
100 segundos
107 instruc
oes/segundo
Algoritmo 2: implementado na maquina B por um
Ou seja, B foi VINTE VEZES mais rapido do que A!
programador mediano em linguagem de alto nvel
dispondo de um compilador mais-ou-menos. de elementos, esta razao
Se o vetor tiver 10 milhoes sera
Executa 50n log n instrucoes. de 2.3 dias para 20 minutos!
Exemplo de pseudo-codigo Corretude de algoritmos
: rearranja um vetor
Algoritmo O RDENA -P OR -I NSERC AO
A[1 . . . n] de modo que fique crescente.
Maquinas RAM
Maquinas RAM
Salvo mencionado o contrario, usaremos o Modelo Abstrato
RAM (Random Access Machine): executa operacoes aritmeticas
(soma, subtracao,
divisao,
multiplicacao, piso, teto), comparacoes,
simula maquinas convencionais (de verdade),
movimentacao de dados de tipo basico
e fluxo de controle
possui um unico
processador que executa instrucoes (teste if/else, chamada e retorno de rotinas) em tempo
sequencialmente,
constante,
tipos basicos numeros
sao inteiros e reais, Certas operacoes ficam em uma zona cinza, (por
ha um limite no tamanho de cada palavra de memoria:
se
exemplo, exponenciacao).
a entrada tem tamanho n, entao cada inteiro/real e Veja mais detalhes do modelo RAM no [CLRS].
representado por c log n bits onde c 1 e uma contante.
Problema: Primalidade
A complexidade de tempo (= eficiencia) de um algoritmo e
o numero
basicas
de instrucoes que ele executa em
Entrada: inteiro n do tamanho da entrada.
funcao
Tamanho: (numero
de bits de n) lg n = log2 n
Adota-se uma atitude pessimista e faz-se uma analise de
pior caso.
Problema: Ordenacao
Determina-se o tempo maximo
necessario para resolver
uma instancia de um certo tamanho.
Entrada: vetor A[1 . . . n] disso, a analise
Alem concentra-se no comportamento do
Tamanho: n lg U onde U e o maior numero
em A[1 . . . n] algoritmo para entradas de tamanho GRANDE = analise
assintotica.
Medida de complexidade e eficiencia de algoritmos
Vantagens do metodo
de analise proposto
Ordenacao em um (sub)vetor ordenado
Insercao
1 j n
20 25 35 40 44 55 38 99 10 65 50
baseado
Vamos comecar estudando o algoritmo de ordenacao
Agora A[1 . . . j] esta ordenado.
no metodo
de insercao.
chave = 38
1 i j n
20 25 35 40 44 55 38 99 10 65 50
Pseudo-codigo
1 i j n
O RDENA -P OR -I NSERC A O(A, n)
20 25 35 40 44 55 99 10 65 50
1 para j 2 ate n faca
1 i j n 2 chave A[j]
20 25 35 40 44 55 99 10 65 50 3 Insere A[j] no subvetor ordenado A[1..j 1]
1 i j n 4 i j 1
20 25 35 40 44 55 99 10 65 50 5 enquanto i 1 e A[i] > chave faca
6 A[i + 1] A[i]
1 i j n
7 i i 1
20 25 35 38 40 44 55 99 10 65 50 8 A[i + 1] chave
Analise do algoritmo Complexidade do algoritmo
total
Tempo de execucao Melhor caso
Como se ve, entradas de tamanho igual (i.e., mesmo valor de e da forma an + b para constantes a
Este tempo de execucao
n), podem apresentar tempos de execucao diferentes ja que o e b que dependem apenas dos ci .
valor de T (n) depende dos valores dos tj . e uma
Portanto, no melhor caso, o tempo de execucao
linear no tamanho da entrada.
funcao
que
Temos entao
Quando o vetor A esta em ordem decrescente, ocorre o pior
caso para Ordena-Por-Insercao. Para inserir a chave em n(n + 1)
T (n) = c1 n + c2 (n 1) + c4 (n 1) + c5 1
A[1 . . . j 1], temos que compara-la
com todos os elementos 2
neste subvetor. Assim, tj = j para j = 2, . . . , n. n(n 1) n(n 1)
+ c6 + c7 + c8 (n 1)
Lembre-se que: 2 2
n
c c6 c7 2 c5 c6 c7
5
X n(n + 1) = + + n + c1 + c2 + c4 + + c8 n
j= 1 2 2 2 2 2 2
2 (c2 + c4 + c5 + c8 )
j=2
e
n
X n(n 1) no pior caso e da forma an2 + bn + c
O tempo de execucao
(j 1) = .
2 constantes que dependem apenas dos ci .
onde a, b, c sao
j=2
e uma funcao
Portanto, no pior caso, o tempo de execucao
quadratica no tamanho da entrada.
Complexidade assintotica de algoritmos
Analise
assintotica quadraticas
de funcoes
quadratica
Considere a funcao 3n2 + 10n + 50:
Como dito anteriormente, na maior parte desta disciplina,
n 3n2 + 10n + 50 3n2
estaremos nos concentrando na analise de pior caso e
64 12978 12288
no comportamento assintotico dos algoritmos
128 50482 49152
(instancias de tamanho grande).
512 791602 786432
Considere um algoritmo que tem como complexidade (de 1024 3156018 3145728
quadratica
pior caso) uma funcao an2 + bn + c, onde 2048 12603442 12582912
constantes absolutas que dependem apenas
a, b, c sao 4096 50372658 50331648
dos custos ci . 8192 201408562 201326592
O estudo assintotico nos permite jogar para debaixo do 16384 805470258 805306368
tapete os valores destas constantes, i.e., aquilo que 32768 3221553202 3221225472
independe do tamanho da entrada (neste caso os valores
de a, b e c).
3n2 e o termo dominante quando n e grande.
Como se ve,
Por que podemos fazer isso ?
De um modo geral, podemos nos concentrar nos termos
dominantes e esquecer os demais.
C. de Souza, C. Nunes, O. Lee, P. de Rezende
MC448 Analise 2
de Algoritmos I versao C. de Souza, C. Nunes, O. Lee, P. de Rezende
MC448 Analise 2
de Algoritmos I versao
assintotica
Notacao Algoritmos recursivos
e o paradigma de divisao-e-conquista
Recursao
Exemplo de divisao-e-conquista: Mergesort
Relembrando: o objetivo e rearranjar A[p . . . r ], com p r , em Relembrando: o objetivo e rearranjar A[p . . . r ], com p r , em
ordem crescente. ordem crescente.
M ERGESORT(A, p, r ) M ERGESORT(A, p, r )
1 se p < r 1 se p < r
2 q (p + r )/2
entao 2 q (p + r )/2
entao
3 M ERGESORT(A, p, q) 3 M ERGESORT(A, p, q)
4 M ERGESORT(A, q + 1, r ) 4 M ERGESORT(A, q + 1, r )
5 I NTERCALA(A, p, q, r ) 5 I NTERCALA(A, p, q, r )
p q r p q r
A 66 33 55 44 99 11 77 22 88 A 33 44 55 66 99 11 77 22 88
Mergesort Mergesort
Relembrando: o objetivo e rearranjar A[p . . . r ], com p r , em Relembrando: o objetivo e rearranjar A[p . . . r ], com p r , em
ordem crescente. ordem crescente.
M ERGESORT(A, p, r ) M ERGESORT(A, p, r )
1 se p < r 1 se p < r
2 q (p + r )/2
entao 2 q (p + r )/2
entao
3 M ERGESORT(A, p, q) 3 M ERGESORT(A, p, q)
4 M ERGESORT(A, q + 1, r ) 4 M ERGESORT(A, q + 1, r )
5 I NTERCALA(A, p, q, r ) 5 I NTERCALA(A, p, q, r )
p q r p q r
A 33 44 55 66 99 11 22 77 88 A 11 22 33 44 55 66 77 88 99
M ERGESORT(A, p, r )
1 se p < r
M ERGESORT(A, p, r )
2 q (p + r )/2
entao
1 se p < r
3 M ERGESORT(A, p, q)
2 q (p + r )/2
entao
4 M ERGESORT(A, q + 1, r )
3 M ERGESORT(A, p, q)
5 I NTERCALA(A, p, q, r )
4 M ERGESORT(A, q + 1, r )
5 I NTERCALA(A, p, q, r )
O algoritmo esta correto?
Qual e a complexidade de M ERGESORT?
A corretude do algoritmo Mergesort apoia-se na corretude do
algoritmo Intercala e pode ser demonstrada por inducao Seja T (n) := o consumo de tempo maximo
(pior caso) em
em n := r p + 1. de n = r p + 1
funcao
mais adiante.
Aprenderemos como fazer provas por inducao
C. de Souza, C. Nunes, O. Lee, P. de Rezende
MC448 Analise 2
de Algoritmos I versao C. de Souza, C. Nunes, O. Lee, P. de Rezende
MC448 Analise 2
de Algoritmos I versao
M ERGESORT(A, p, r ) M ERGESORT(A, p, r )
1 se p < r 1 se p < r
2 q (p + r )/2
entao 2 q (p + r )/2
entao
3 M ERGESORT(A, p, q) 3 M ERGESORT(A, p, q)
4 M ERGESORT(A, q + 1, r ) 4 M ERGESORT(A, q + 1, r )
5 I NTERCALA(A, p, q, r ) 5 I NTERCALA(A, p, q, r )
Obtemos o que chamamos de formula
de recorrencia (i.e.,
uma formula definida em termos de si mesma).
T (1) = (1)
T (n) = T (n/2) + T (n/2) + (n) para n = 2, 3, 4, . . .
Em geral, ao aplicar o paradigma de divisao-e-conquista,
Crescimento de funcoes
chega-se a um algoritmo recursivo cuja complexidade
T (n) e uma formula
de recorrencia.
necessario
E resolver a recorrencia!
entao Mas, o que
significa resolver uma recorrencia?
Significa encontrar uma formula fechada para T (n).
No caso, T (n) = (n lg n). Assim, o consumo de tempo do
Mergesort e (n lg n) no pior caso.
Veremos mais tarde como resolver recorrencias.
Assintotica
Notacao de Funcoes
Comparacao
de funcoes
Vamos expressar complexidade atraves em assintoticamente, ou seja, para
Vamos comparar funcoes
variaveis
que descrevam o tamanho de instancias do valores grandes, desprezando constantes multiplicativas e
problema. Exemplos: termos de menor ordem.
Problemas de aritmetica arbitraria:
de precisao numero
de
bits (ou bytes) dos inteiros.
Problemas em grafos: numero
de vertices e/ou arestas n = 100 n = 1000 n = 104 n = 106 n = 109
Problemas de ordenacao de vetores: tamanho do vetor. log n 2 3 4 6 9
Busca em textos: numero
de caracteres do texto ou do n 100 1000 104 106 109
padrao procurado. n log n 200 3000 4 104 6 106 9 109
que expressam complexidade
Vamos supor que funcoes n2 104 106 108 1012 1018
100n2 + 15n 1, 0015 106 1, 00015 108 1010 1014 1020
sempre positivas, ja que estamos medindo numero
sao de
2n 1, 26 1030 1, 07 10301 ? ? ?
operacoes.
Definicao:
Definicao:
O(g(n)) = {f (n) : existem constantes positivas c e n0 tais O(g(n)) = {f (n) : existem constantes positivas c e n0 tais
que 0 f (n) cg(n), para todo n n0 }. que 0 f (n) cg(n), para todo n n0 }.
Informalmente, dizemos que, se f (n) O(g(n)), entao
f (n) Informalmente, dizemos que, se f (n) O(g(n)), entao
f (n)
cresce no maximo rapidamente quanto g(n).
tao
cresce no maximo rapidamente quanto g(n).
tao
cg Exemplo:
1 2
f
2n 3n O(n2 )
Valores de c e n0 que satisfazem a` definicao
sao
1
c= e n0 = 7.
tempo
2
n tamanho
Classe Classe
Definicao:
Definicao:
(g(n)) = {f (n) : existem constantes positivas c e n0 tais (g(n)) = {f (n) : existem constantes positivas c e n0 tais
que 0 cg(n) f (n), para todo n n0 }. que 0 cg(n) f (n), para todo n n0 }.
Informalmente, dizemos que, se f (n) (g(n)), entao
f (n) Informalmente, dizemos que, se f (n) (g(n)), entao
f (n)
lentamente quanto g(n).
cresce no mnimo tao lentamente quanto g(n).
cresce no mnimo tao
f Exemplo:
1 2
cg
2n 3n (n2 )
Valores de c e n0 que satisfazem a` definicao
sao
1
c= e n0 = 7.
tempo
14
n tamanho
Definicao:
Definicao:
(g(n)) = {f (n) : existem constantes positivas c1 , c2 e n0 (g(n)) = {f (n) : existem constantes positivas c1 , c2 e n0
tais que 0 c1 g(n) f (n) c2 g(n), tais que 0 c1 g(n) f (n) c2 g(n),
para todo n n0 }. para todo n n0 }.
Informalmente, dizemos que, se f (n) (g(n)), entao
f (n) Informalmente, dizemos que, se f (n) (g(n)), entao
f (n)
rapidamente quanto g(n).
cresce tao rapidamente quanto g(n).
cresce tao
c2g
Exemplo:
f
1 2
cg 2n 3n (n2 )
Valores de c1 , c2 e n0 que satisfazem a` definicao
sao
1 1
c1 = , c2 = e n0 = 7.
tempo
14 2
n tamanho
Classe o Classe
Definicao:
Definicao:
o(g(n)) = {f (n) : para toda constante positiva c, existe uma (g(n)) = {f (n) : para toda constante positiva c, existe uma
constante n0 > 0 tal que 0 f (n) < cg(n), constante n0 > 0 tal que 0 cg(n) < f (n),
para todo n n0 }. para todo n n0 .}
Informalmente, dizemos que, se f (n) o(g(n)), entao
f (n) Informalmente, dizemos que, se f (n) (g(n)), entao
f (n)
cresce mais lentamente que g(n). cresce mais rapidamente que g(n).
Exemplo: Exemplo:
1000n2 o(n3 ) 1
1000 n
2 (n)
Para todo valor de c, um n0 que satisfaz a` definicao
e e
Para todo valor de c, um n0 que satisfaz a definicao
1000 n0 = 1000c + 1.
n0 = + 1.
c
f (n)
f (n) o(g(n)) se lim = 0.
n g(n)
Transitividade:
f (n) Se f (n) O(g(n)) e g(n) O(h(n)), entao
f (n) O(h(n)).
f (n) O(g(n)) se lim < .
n g(n)
Se f (n) (g(n)) e g(n) (h(n)), entao
f (n) (h(n)).
f (n)
f (n) (g(n)) se 0 < lim < . Se f (n) (g(n)) e g(n) (h(n)), entao
f (n) (h(n)).
n g(n)
de comparacao
Quais as relacoes assintotica
dessas funcoes?
Reflexividade:
f (n) O(f (n)). 2
f (n) (f (n)). log n
f (n) (f (n)). n
n log n
Simetria:
f (n) (g(n)) se, e somente se, g(n) (f (n)). n2
100n2 + 15n
Simetria Transposta: 2n
f (n) O(g(n)) se, e somente se, g(n) (f (n)).
f (n) o(g(n)) se, e somente se, g(n) (f (n)).
b vezes
z }| {
Exponencial:
Funcao ab
= a.a. . . . .a.
Regra de LHopital:
Logaritmo: loga b = x ax = b
Funcao Supondo que limn f (n), limn g(n) sao ambos nulos
loga bc = c loga b ou ambos iguais a e limn f (n)/g (n) exista, entao
b
loga bc = loga b + loga c ( loga c = loga b loga c) limn f (n)/g(n) = limn f (n)/g (n).
aloga b = b
de
Isso ajuda bastante no caso de comparacao
loga b = logc b/ logc a (mudanca de base)
complexidades de algoritmos uma vez que,
polinomiais, exponenciais e
Derivadas (em x): funcoes que descrevem complexidades
frequentemente, as funcoes
funcoes
logartmicas. Considere que u e v sao de x: polilogartmicas ou exponenciais!
sao
d(u + v ) = d(u) + d(v ) = u + v
Pn) = u.d(v
d(uv )+ u.v + v .u
Pvn .d(u) =i1 (regra do produto) equivalente para a
Exerccio: a partir da definicao
i
d( i=0 ai .x ) = i=1 ai .i.x
o(.) (o-pequeno), use a regra de LHopital
notacao para
d(ln x) = 1/x
d(eu ) = eu .du provar que f (n) = n log n e o(g(n)) para g(n) = n2 .
d(ax ) = ax . ln a