Académique Documents
Professionnel Documents
Culture Documents
Orlando Lee
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Agradecimentos (Cid e Candida)
Introducao
Varias pessoas contriburam direta ou indiretamente com
deste material.
a preparacao O nome da disciplina e Analise
de Algoritmos.
Algumas destas pessoas cederam gentilmente seus O que e entao
um algoritmo?
arquivos digitais enquanto outras cederam gentilmente o
e dando sugestoes.
seu tempo fazendo correcoes Informalmente, um algoritmo e um procedimento
computacional bem definido que:
Uma lista destes colaboradores (em ordem alfabetica) e
dada abaixo: recebe um conjunto de valores como entrada e
Picinin de Mello
Celia produz um conjunto de valores como sada.
Jose Coelho de Pina Um algoritmo e uma ferramenta para resolver um determinado
Orlando Lee
problema computacional. A descricao do problema define a
Paulo Feofiloff
Pedro Rezende que deve existir entre a entrada e a sada do algoritmo.
relacao
Ricardo Dahab
Zanoni Dias
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Exemplo: Problema da Ordenacao
Instancia de um problema
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
MC448 - Analise de Algoritmos
A importancia
dos algoritmos para a computacao
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Algoritmos e tecnologia Algoritmos e tecnologia
de um vetor de n elementos
Exemplo: ordenacao
O avanco da tecnologia permite a construcao de maquinas
cada vez mais rapidas. Isto possibilita que um algoritmo Suponha que os computadores A e B executam
para determinado problema possa ser executado mais por segundo, respectivamente.
1G e 10M instrucoes
rapidamente. Ou seja, A e 100 vezes mais rapido
que B.
Paralelamente a isto, ha o projeto/desenvolvimento de Algoritmo 1: implementado em A por um excelente
algoritmos intrinsecamente mais eficientes para
programador em linguagem de maquina
(ultra-rapida).
determinado problema. Isto leva em conta apenas as Executa 2n2 instrucoes.
caractersticas inerentes ao problema, desconsiderando
detalhes de software/hardware.
Algoritmo 2: implementado na maquina B por um
programador mediano em linguagem de alto nvel
Vamos comparar estes dois aspectos atraves de um
dispondo de um compilador meia-boca.
exemplo.
Executa 50n log10 n instrucoes.
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Complexidade de algoritmos
Exemplo: Problema da Ordenacao
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
em um vetor ordenado
Insercao
Como fazer a insercao
chave = 38
1 i j n
1 j n 20 25 35 40 44 55 38 99 10 65 50
20 25 35 40 44 55 38 99 10 65 50
1 i j n
O subvetor A[1 . . . j 1] esta ordenado. 20 25 35 40 44 55 99 10 65 50
Queremos inserir a chave = 38 = A[j] em A[1 . . . j 1] de
modo que no final tenhamos: 1 i j n
1 j n 20 25 35 40 44 55 99 10 65 50
20 25 35 38 40 44 55 99 10 65 50
1 i j n
20 25 35 40 44 55 99 10 65 50
Agora A[1 . . . j] esta ordenado.
1 i j n
20 25 35 38 40 44 55 99 10 65 50
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
por insercao
Ordenacao por insercao
Ordenacao
chave 1 j n
99 20 25 35 38 40 44 55 99 10 65 50
chave 1 j n
99 20 25 35 38 40 44 55 99 10 65 50
chave 1 j n chave 1 j n
10 20 25 35 38 40 44 55 99 10 65 50 65 10 20 25 35 38 40 44 55 99 65 50
chave 1 j n chave 1 j n
10 10 20 25 35 38 40 44 55 99 65 50 65 10 20 25 35 38 40 44 55 65 99 50
chave 1 j
50 10 20 25 35 38 40 44 55 65 99 50
chave 1 j
50 10 20 25 35 38 40 44 50 55 65 99
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
um algoritmo
Descricao
Ordena-Por-Insercao
de
Podemos formalizar o algoritmo O RDENA - POR -I NSERC AO
varias formas:
Pseudo-codigo
de alto nvel: C,
usando uma linguagem de programacao
Pascal, Java etc O RDENA -P OR -I NSERC A O(A, n)
implementando-o em linguagem de maquina diretamente 1 para j 2 ate n faca
executavel em hardware 2 chave A[j]
3 Insere A[j] no subvetor ordenado A[1..j 1]
em portugues
4 i j 1
em um pseudo-codigo de alto nvel, como no livro do 5 enquanto i 1 e A[i] > chave faca
CLRS 6 A[i + 1] A[i]
7 i i 1
Usaremos essencialmente as duas ultimas
alternativas nesta 8 A[i + 1] chave
disciplina.
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Analise do algoritmo
O algoritmo para
(A, n)
O RDENA -P OR -I NSERC AO
1 para j 2 ate n faca
...
O que e importante analisar/considerar? 4 i j 1
5 enquanto i 1 e A[i] > chave faca
Corretude do algoritmo: e preciso mostrar que para toda 6 ...
instancia e devolve uma
do problema, o algoritmo para 7 i i 1
resposta correta. 8 ...
Complexidade de tempo do algoritmo: quantas intrucoes No laco enquanto na linha 5 o valor de i diminui a cada
necessarias
sao no pior caso para ordenar os n e o valor inicial e i = j 1 1. Logo, a sua execucao
iteracao
elementos? em algum momento por causa do teste condicional i 1.
para
(o contador j atingira o
O laco na linha 1 evidentemente para
valor n + 1 apos
n 1 iteracoes).
Portanto, o algoritmo para.
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Ordena-Por-Insercao Invariantes de laco e provas de corretude
(A, n)
O RDENA -P OR -I NSERC AO
1 para j 2 ate n faca um invariante de um laco e uma propriedade
Definicao:
2 chave A[j]
que relaciona as variaveis
do algoritmo a cada execucao
3 Insere A[j] no subvetor ordenado A[1..j 1] completa do laco.
4 i j 1
Ele deve ser escolhido de modo que, ao termino do laco,
5 enquanto i 1 e A[i] > chave faca tenha-se uma propriedade util
para mostrar a corretude do
6 A[i + 1] A[i] algoritmo.
7 i i 1 A prova de corretude de um algoritmo requer que sejam
8 A[i + 1] chave
encontrados e provados invariantes dos varios lacos que o
compoem.
O que falta fazer?
Em geral, e mais difcil descobrir um invariante apropriado
Verificar se ele produz uma resposta correta.
do que mostrar sua validade se ele for dado de bandeja. . .
Analisar sua complexidade de tempo.
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Exemplo de invariante Corretude de algoritmos por invariantes
(A, n)
O RDENA -P OR -I NSERC AO
1 para j 2 ate n faca
A estrategia tpica para mostrar a corretude de um algoritmo
2 chave A[j] iterativo atraves de invariantes segue os seguintes passos:
3 Insere A[j] no subvetor ordenado A[1..j 1] 1 Mostre que o invariante vale no incio da primeira iteracao
4 i j 1 (trivial, em geral)
5 enquanto i 1 e A[i] > chave faca 2 Suponha que o invariante vale no incio de uma iteracao
6 A[i + 1] A[i]
qualquer e prove que ele vale no nicio da proxima
iteracao
7 i i 1 3 e o invariante vale no
Conclua que se o algoritmo para
8 A[i + 1] chave
nicio da ultima
entao
iteracao, o algoritmo e correto.
Invariante principal de O RDENA -P OR -I NSERC A O: (i1) Note que (1) e (2) implicam que o invariante vale no incio
do algoritmo. Isto e similar ao metodo
de qualquer iteracao
No comeco de cada iteracao do laco para das linha 18, o
matematica
de inducao finita!
ou inducao
subvetor A[1 . . . j 1] esta ordenado.
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
por insercao
Corretude da ordenacao
Melhorando a argumentacao
por
Vamos verificar a corretude do algoritmo de ordenacao (A, n)
O RDENA -P OR -I NSERC AO
insercao
usando a tecnica de prova por invariantes de lacos. 1 para j 2 ate n faca
2 chave A[j]
Invariante principal: (i1) 3 Insere A[j] no subvetor ordenado A[1 . . . j 1]
No comeco de cada iteracao do laco para das linhas 18, o 4 i j 1
subvetor A[1 . . . j 1] esta ordenado. 5 enquanto i 1 e A[i] > chave faca
6 A[i + 1] A[i]
7 i i 1
1 j n 8 A[i + 1] chave
20 25 35 40 44 55 38 99 10 65 50
Um invariante mais preciso: (i1)
Suponha que o invariante vale.
No comeco de cada iteracao do laco para das linhas 18, o
a corretude do algoritmo e evidente. Por que?
Entao subvetor A[1 . . . j 1] e uma permutacao
ordenada do subvetor
No nicio da ultima
temos j= n + 1. Assim, do
iteracao original A[1 . . . j 1].
invariante segue que o (sub)vetor A[1 . . . n] esta ordenado!
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
de (i1)
Esboco da demonstracao Invariantes auxiliares
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Vamos contar ? total
Tempo de execucao
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
O melhor caso de Ordena-Por-Insercao ocorre quando o vetor Quando o vetor A esta em ordem decrescente, ocorre o pior
A ja esta ordenado. Para j = 2, . . . , n temos A[i] chave na caso para Ordena-Por-Insercao. Para inserir a chave em
linha 5 quando i = j 1. Assim, tj = 1 para j = 2, . . . , n.
A[1 . . . j 1], temos que compara-la com todos os elementos
Logo, neste subvetor. Assim, tj = j para j = 2, . . . , n.
Lembre-se que:
T (n) = c1 n + c2 (n 1) + c4 (n 1) + c5 (n 1) + c8 (n 1) n
X n(n + 1)
= (c1 + c2 + c4 + c5 + c8 )n (c2 + c4 + c5 + c8 ) j= 1
2
j=2
e da forma an + b para constantes a
Este tempo de execucao e
n
e b que dependem apenas dos ci . X n(n 1)
(j 1) = .
e uma
Portanto, no melhor caso, o tempo de execucao 2
j=2
linear no tamanho da entrada.
funcao
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Pior caso continuacao
Complexidade assintotica de algoritmos
que
Temos entao
Na maior parte desta disciplina, consideraremos a analise
n(n + 1)
de pior caso e o comportamento assintotico de um
T (n) = c1 n + c2 (n 1) + c4 (n 1) + c5 1
2
algoritmo (instancias de tamanho grande).
n(n 1) n(n 1) O algoritmo O RDENA -P OR -I NSERC A O tem como
+ c6 + c7 + c8 (n 1)
2 2 complexidade (de pior caso) uma funcao quadratica
c c6 c7 2 c5 c6 c7 2
an + bn + c, onde a, b, c sao
constantes absolutas que
5
= + + n + c1 + c2 + c4 + + c8 n
2 2 2 2 2 2 dependem apenas dos custos ci .
(c2 + c4 + c5 + c8 )
O estudo assintotico nos permite jogar para debaixo do
tapete os valores destas constantes, i.e., aquilo que
no pior caso e da forma an2 + bn + c
O tempo de execucao independe do tamanho da entrada (neste caso os valores
constantes que dependem apenas dos ci .
onde a, b, c sao de a, b e c).
e uma funcao
Portanto, no pior caso, o tempo de execucao Por que podemos fazer isso ?
quadratica no tamanho da entrada.
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Analise
assintotica quadraticas
de funcoes assintotica
Notacao
quadratica
Considere a funcao 3n2 + 10n + 50:
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Modelo Computacional
Maquinas RAM
Salvo mencionado o contrario, usaremos o Modelo Abstrato
O modelo computacional estabelece quais os recursos RAM (Random Access Machine):
basicas
disponveis, as instrucoes e quanto elas custam
o modelo RAM simula uma maquina de verdade
(= tempo).
permite acesso direto a` memoria
Dentre desse modelo, tentamos estimar atraves de uma
possui um unico
processador que executa instrucoes
analise
matematica o tempo que um algoritmo gasta em
do tamanho da entrada sequencialmente
funcao
(= analise de complexidade).
tipos basicos numeros
sao inteiros e reais
A analise de complexidade depende sempre do modelo ha um limite no tamanho de cada palavra de memoria:
se
computacional adotado. a entrada tem tamanho n, entao cada inteiro/real e
representado por c log n bits onde c 1 e uma constante
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Maquinas RAM Medida de complexidade de algoritmos
A complexidade de tempo (= eficiencia) de um algoritmo e
executa operacoes aritmeticas
(soma, subtracao, o numero
basicas
de instrucoes que ele executa em
divisao,
multiplicacao,
piso, teto), comparacoes, do tamanho da entrada.
funcao
movimentacao de dados de tipo basico
e fluxo de controle Adotamos uma atitude pessimista e em geral fazemos
(teste if/else, chamada e retorno de rotinas) em tempo
uma analise de pior caso.
constante, Determinamos o tempo maximo
necessario para resolver
o tempo de execucao de certas operacoes
caem em uma
uma instancia de um certo tamanho.
zona cinza, por exemplo, exponenciacao, disso, a analise
Alem concentra-se no comportamento do
veja maiores detalhes do modelo RAM no CLRS. algoritmo para entradas de tamanho GRANDE = analise
assintotica.
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Medida de eficiencia de algoritmos
Vantagens do metodo
de analise proposto
Um algoritmo e chamado eficiente se a funcao que mede O modelo RAM e robusto e permite prever o
sua complexidade de tempo e limitada por um polinomio
comportamento de um algoritmo para instancias
no tamanho da entrada. GRANDES.
Por exemplo: n, 3n 7, n log n, 4n2 , 143n2 4n + 2, n5 . O modelo permite comparar algoritmos que resolvem um
Mas por que polinomios? mesmo problema.
Resposta padrao:
(polinomios funcoes
sao bem
A analise e mais robustas em relacao
as
` evolucoes
comportadas).
tecnologicas .
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Desvantagens do metodo
de analise proposto
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos