Vous êtes sur la page 1sur 18

Introducao

O que veremos nesta disciplina?



MC448 Analise de Algoritmos I
Como provar a corretude de um algoritmo
Estimar a quantidade de recursos (tempo, memoria) de
Cid C. de Souza

Candida N. da Silva um algoritmo = analise
de complexidade
Orlando Lee
Tecnicas e ideias gerais de projeto de algoritmos:
Pedro J. de Rezende
divisao-e-conquista, dinamica,
programacao algoritmos
gulosos, etc

Tema recorrente: natureza recursiva de varios problemas
16 de marco de 2017

A dificuldade intrnseca de varios
problemas: inexistencia
de algoritmos eficientes

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

Algoritmos Exemplos de problemas: teste de primalidade

Problema: determinar se um dado numero


e primo.
O que e um algoritmo?
Exemplo 1:
Informalmente, um algoritmo e um procedimento
computacional bem definido que: Entrada: 9411461
recebe um conjunto de valores como entrada e
primo.
Sada: E
produz um conjunto de valores como sada.
Equivalentemente, um algoritmo e uma ferramenta para Exemplo 2:
resolver um problema computacional. Este problema define a
precisa que deve existir entre a entrada e a sada do
relacao Entrada: 8411461
algoritmo.
e primo.
Sada: Nao

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

Exemplos de problemas: ordenacao
Instancia de um problema

um vetor A[1 . . . n] e crescente se A[1] . . . A[n].


Definicao:
Uma instancia de um problema e um conjunto de valores que
serve de entrada para esse.
Problema: rearranjar um vetor A[1 . . . n] de modo que fique
crescente. Exemplo 1:
Entrada: Os numeros
instancias
9411461 e 8411461 sao do problema
de primalidade.
1 n
33 55 33 44 33 22 11 99 22 55 77 Exemplo 2:
O vetor
Sada:
1 n
1 n 33 55 33 44 33 22 11 99 22 55 77
11 22 22 33 33 33 44 55 55 77 99
e uma instancia

do problema de ordenacao.

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


A importancia
dos algoritmos para a computacao Dificuldade intrnseca de problemas

Infelizmente, existem certos problemas para os quais nao



se conhece algoritmos eficientes capazes de resolve-los.
para o
Onde se encontram aplicacoes chamados problemas N P-completos.
Eles sao
uso/desenvolvimento de algoritmos eficientes?
Curiosamente, nao
foi provado que tais algoritmos nao
projetos de genoma de seres vivos
existem!
rede mundial de computadores

comercio
eletronico
Esses problemas tem a caracterstica notavel de que se
planejamento da producao de industrias
todos
um deles admitir um algoritmo eficiente entao

logstica de distribuicao admitem algoritmos eficientes.
games e filmes
Por que devo me preocupar com problemas
...
N P-completos ?
Problemas dessa classe surgem em inumeras

situacoes

praticas!

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
Dificuldade intrnseca de problemas Algoritmos e tecnologia

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!

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

Algoritmos e tecnologia Algoritmos e tecnologia

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!

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

Algoritmos e tecnologia Conclusoes de algoritmos
Descricao

O uso de um algoritmo adequado pode levar a ganhos


Podemos descrever um algoritmo de varias maneiras:

extraordinarios de desempenho. de alto nvel: C,
usando uma linguagem de programacao
importante quanto o projeto de
Isso pode ser tao Pascal, Java, etc.
hardware.
implementando-o em linguagem de maquina diretamente
significativa que nao
A melhora obtida pode ser tao
executavel em hardware
poderia ser obtida simplesmente com o avanco da
em portugues
tecnologia.

em um pseudo-codigo de alto nvel, como no livro [CLRS]
As melhorias nos algoritmos produzem avancos em outras

componentes basicas (pense nos
das aplicacoes Usaremos, essencialmente, as duas ultimas
alternativas nesta
compiladores, buscadores na internet, etc). disciplina.

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


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.

Um algoritmo (que resolve um determinado problema)


(A, n)
O RDENA -P OR -I NSERC AO esta correto se, para toda instancia

do problema, ele para
1 para j 2 ate n faca e devolve uma resposta correta.
2 chave A[j]
Algoritmos incorretos tambem tem sua utilidade, se
3 Insere A[j] no subvetor ordenado A[1 . . . j 1]
soubermos prever a sua probabilidade de erro.
4 i j 1
5 enquanto i 1 e A[i] > chave faca Nesta disciplina, vamos trabalhar apenas com algoritmos
6 A[i + 1] A[i] corretos.
7 i i 1
8 A[i + 1] chave

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
Complexidade de algoritmos Modelo Computacional

Uma possibilidade e definir um modelo computacional de


basta saber que um dado algoritmo para.
Em geral, nao
uma maquina.
Se ele for muuuuuuuito leeeeeeento, tera pouca utilidade.
O modelo computacional estabelece quais os recursos
Queremos projetar/desenvolver algoritmos eficientes basicas
disponveis, as instrucoes e quanto elas custam

(rapidos). (= tempo).

Mas o que seria uma boa medida de eficiencia de um Dentro desse modelo, podemos estimar atraves de uma
algoritmo?
analise
matematica o tempo que um algoritmo gasta em
Nao estamos interessados em quem programou, em que do tamanho da entrada
funcao

linguagem foi escrito e nem em qual a maquina executado!
(= analise de complexidade).

Queremos um criterio uniforme para comparar algoritmos.
A analise de complexidade depende sempre do modelo
computacional adotado.

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


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.

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
Tamanho da entrada
Medida de complexidade e eficiencia de algoritmos

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.

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


Medida de complexidade e eficiencia de algoritmos
Vantagens do metodo
de analise proposto

O modelo RAM e robusto e permite prever o


Um algoritmo e chamado eficiente se a funcao
que mede

comportamento de um algoritmo para instancias
sua complexidade de tempo e limitada por um polinomio

GRANDES.
no tamanho da entrada.
Por exemplo: n, 3n 7, 4n2 , 143n2 4n + 2, n5 . O modelo permite comparar algoritmos que resolvem um
mesmo problema.

Mas por que polinomios?

Polinomios funcoes
sao bem comportadas.
A analise e mais robusta em relacao
as
` evolucoes


tecnologicas.

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

Desvantagens do metodo
de analise proposto

Fornece um limite de complexidade pessimista sempre


considerando o pior caso.
real, nem todas as instancias
Em uma aplicacao ocorrem

com a mesma frequencia e e possvel que as instancias

ruins ocorram raramente. Comecando a trabalhar
fornece nenhuma informacao
Nao sobre o comportamento

do algoritmo no caso medio.

A analise de complexidade de algoritmos no caso medio e
e
bastante difcil, principalmente, porque muitas vezes nao

claro o que e o caso medio.

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


Ordenacao em um (sub)vetor ordenado
Insercao
1 j n
20 25 35 40 44 55 38 99 10 65 50

O subvetor A[1 . . . j 1] esta ordenado.


Problema: ordenar um vetor em ordem crescente Queremos inserir a chave = 38 = A[j] em A[1 . . . j 1] de
modo que no final tenhamos:
Entrada: um vetor A[1 . . . n] 1 j n
Sada: vetor A[1 . . . n] rearranjado em ordem crescente 20 25 35 38 40 44 55 99 10 65 50

baseado
Vamos comecar estudando o algoritmo de ordenacao
Agora A[1 . . . j] esta ordenado.

no metodo
de insercao.

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

Como fazer a insercao
Ordena-Por-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

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


Analise do algoritmo Complexidade do algoritmo

Objetivo: determinar o tempo de execucao (ou


complexidade de tempo) de Ordena-Por-Insercao em
O que e importante analisar ?
do tamanho de entrada.
funcao
?
finitude: o algoritmo para Para o problema de Ordenacao vamos usar como
corretude: o algoritmo faz o que promete ? tamanho de entrada a dimensao do vetor e ignorar o
sao
complexidade de tempo: quantas instrucoes valores dos seus elementos (modelo RAM).

necessarias no pior caso para ordenar os n elementos ? A complexidade de tempo de um algoritmo e o numero
de
basicas
instrucoes elementares ou primitivas)
(operacoes
Por enquanto, analisemos apenas a complexidade de tempo ! que executa a partir de uma entrada.
Exemplo: comparacao e atribuicao
entre numeros
ou

variaveis
numericas, aritmeticas,
operacoes etc.

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
Vamos contar ? Vamos contar ?
O RDENA -P OR -I NSERC A O(A, n) Custo
# execucoes O RDENA -P OR -I NSERC A O(A, n) Custo # execucoes
1 para j 2 ate n faca c1 ? 1 para j 2 ate n faca c1 n
2 chave A[j] c2 ? 2 chave A[j] c2 n1
3 Insere A[j] em A[1 . . . n] 0 ? 3 Insere A[j] em A[1 . . . n] 0 n1
4 i j 1 c4 ? 4 i j 1 c4 Pn 1
n
5 enquanto i 1 e A[i] > chave faca c5 ? 5 enquanto i 1 e A[i] > chave faca c5 t
Pn j=2 j
6 A[i + 1] A[i] c6 ? 6 A[i + 1] A[i] c6 j=2 (tj 1)
7 i i 1 c7 ? Pn
7 i i 1 c7 j=2 (tj 1)
8 A[i + 1] chave c8 ? 8 A[i + 1] chave c8 n1

A constante ck representa o custo (tempo) de cada execucao
A constante ck representa o custo (tempo) de cada execucao
da linha k . da linha k .
Denote por tj o numero
de vezes que o teste no laco Denote por tj o numero
de vezes que o teste no laco
enquanto na linha 5 e feito para aquele valor de j. enquanto na linha 5 e feito para aquele valor de j.

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

total
Tempo de execucao Melhor caso

O melhor caso de Ordena-Por-Insercao ocorre quando o vetor


T (n) de Ordena-Por-Insercao
Logo, o tempo total de execucao A ja esta ordenado. Para j = 2, . . . , n temos A[i] chave na
e a soma dos tempos de execucao de cada uma das linhas do linha 5 quando i = j 1. Assim, tj = 1 para j = 2, . . . , n.
algoritmo, ou seja:
P Logo,
T (n) = c1 n + c2 (n 1) + c4 (n 1) + c5 nj=2 tj
Pn Pn
+ c6 j=2 (tj 1) + c7 j=2 (tj 1) T (n) = c1 n + c2 (n 1) + c4 (n 1) + c5 (n 1) + c8 (n 1)
+ c8 (n 1) = (c1 + c2 + c4 + c5 + c8 )n (c2 + c4 + c5 + c8 )

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

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
Pior Caso
Pior caso continuacao

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.

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


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

Usando notacao assintotica,


dizemos que o algoritmo
tem complexidade de tempo de pior
Ordena-Por-Insercao
caso (n2 ). O que e o paradigma de divisao-e-conquista?

Isto quer dizer duas coisas:
Como mostrar a corretude de um algoritmo recursivo?
a complexidade de tempo e limitada (superiormente)

assintoticamente por algum polinomio da forma an2 para Como analisar o consumo de tempo de um algoritmo
alguma constante a, recursivo?
para todo n suficientemente grande, existe alguma O que e uma formula

de recorrencia?

instancia de tamanho n que consome tempo pelo menos
dn2 , para alguma contante positiva d.
O que significa resolver uma formula
de recorrencia?

Mais adiante discutiremos em detalhes o uso da notacao

assintotica
em analise de algoritmos.

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

e o paradigma de divisao-e-conquista
Recursao
Exemplo de divisao-e-conquista: Mergesort

Um algoritmo recursivo encontra a sada para uma



instancia de entrada de um problema chamando a si

mesmo para resolver instancias menores deste mesmo Mergesort e um algoritmo para resolver o problema de
problema. e um exemplo classico
ordenacao do uso do paradigma de

Algoritmos de divisao-e-conquista etapas
possuem tres
divisao-e-conquista. (to merge = intercalar)

em cada nvel de recursao: do Mergesort em alto nvel:
Descricao
1 o problema e dividido em subproblemas
Divisao:
1 divida o vetor com n elementos em dois
Divisao:
tendo como
semelhantes ao problema original, porem subvetores de tamanho n/2 e n/2, respectivamente.

entrada instancias de tamanho menor.
2 Conquista: ordene os dois vetores recursivamente usando
2 Conquista: cada subproblema e resolvido recursivamente o Mergesort;
a menos que o tamanho de sua entrada seja
3 intercale os dois subvetores para obter um
Combinacao:
suficientemente pequeno, quando este e resolvido vetor ordenado usando o algoritmo Intercala.
diretamente.
3 dos subproblemas sao
as solucoes
Combinacao:
do problema original.
combinadas para obter uma solucao

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
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 66 33 55 44 99 11 77 22 88 A 33 44 55 66 99 11 77 22 88

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

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

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
Corretude do Mergesort Complexidade do Mergesort

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

Complexidade do Mergesort Complexidade do Mergesort

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 )

linha consumo de tempo linha consumo de tempo


1 ? 1 (1)
2 ? 2 (1)
3 ? 3 T (n/2)
4 ? 4 T (n/2)
5 ? 5 (n)
T (n) =? T (n) = T (n/2) + T (n/2) + (n) + (2)

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
Complexidade do Mergesort


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.

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 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.

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
Classe O Classe O


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

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

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

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
Classe Classe


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

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

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

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
equivalentes usando limites
Definicoes Propriedades das Classes

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)

f (n) Se f (n) o(g(n)) e g(n) o(h(n)), entao


f (n) o(h(n)).
f (n) (g(n)) se lim > 0.
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 lim = .
n g(n)

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

Propriedades das Classes Exemplos

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)).

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
Propriedades uteis
Propriedades uteis
(cont.)

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

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

Vous aimerez peut-être aussi