Universidade Federal Rural de Pernambuco
Projeto e Análise de Algoritmos
Introdução a Análise de Algoritmos
Prof. Tiago Buarque Assunção de Carvalho
Unidade Acadêmica de Garanhuns – UFRPE Bacharelado em Ciências da Computação
Roteiro
1 Introdução
2 Invariante de laço e Corretude de algoritmos iterativos
3 Análise de eficiência de algoritmos iterativos
4 Corretude do procedimento iterativo MERGE
5 Algoritmos de divisão e conquista
Análise de Algoritmos
• Para algoritmos recursivos e iterativos
• Eficiência
• Corretude
• Notação Assintótica
Eficiência
Tempo Algoritmo
c1n2 ordenação por inserção
c2nlgn ordenação por intercalação
• né o tamanho da entrada,lgn=log2n.
• mesmo comc1 <c2estas constantes tem pouca influência no tempo
de execução. • lg 1.000≈9,9.
• Exemplo,c1 =2,c2=50,n=107:
• Ord. por inserção em um computador rápido (1010instruções por
segundo),2(107)/1010 =20.000segundos (mais de 5,5 horas);
• Ord. por intercalação em um computador lento (107instruções por
segundo, 1.000 vezes mais lento que o primeiro),
Exercícios
1. Cite aplicações que exijam algoritmos rápidos.
2. Suponha que duas implementações de ordenação por inserção e por
intercalação tem tempo de execução de8n2 e64nlgn,
respectivamente. Se ambas as implementações vão ser executadas
na mesma máquina, diga quais valores denfazem a ordenação por
intercalação mais rápida.
3. Em quais casos você utilizaria ordenação por inserção ou por
intercalação?
4. Qual o menor valor denpara o qual um algoritmo com tempo de
Exercícios
5. Suponha que o tempo de execução para uma operação seja10−6
segundos. Para cada tamanho de entradan, calcule o tempo de
execução para cada função de tempo da tabela abaixo:
n lgn √n nlgn n2 n3 2n n!
Exercícios
6. Suponha que o tempo de execução para uma operação seja10−6
segundos. Calcule o maior valor denpara que o tempo de execução
esteja dentro do limite estabelecido na tabela.
1 segundo 1 minuto 1 hora 1 mês 1 ano 1século
lgn
√n
Invariante de laço e Corretude de algoritmos iterativos
• Corretude(ou correção): propriedade de um algoritmo estar correto.
• Invariante de laço: propriedade que se mantém do começo ao final
de um laço. Útil para mostrar a corretude de um algoritmo algoritmo iterativo. 3 etapas:
• Inicialização: ele é verdadeiro antes da primeira iteração do laço.
• Manutenção: se ele é verdadeiro antes de uma iteração do laço, permanecerá verdadeiro antes da próxima iteração.
Invariante de laço na Ordenação por Inserção
• Invariante: os elementos deA[1..j−1]são os elementos que
estavam originalmente na posições 1 aj−1, mas agora em
sequência ordenada.
Invariante de laço na Ordenação por Inserção
• Manutenção: insereA[j]na posição adequada fazendo com que
A[1..j]fique ordenado; quandojfor incrementado na próxima
iteraçãoA[1..j−1]estará ordenado. Obs.: assumindo que o laço
while está correto.
Exercícios
1. Utilizando o exemplo da figura acima, mostre as etapas de
ordenação por inserção paraA=h31,41,59,26,41,58i.
2. Prove o invariante de laço para owhilena ordenação por inserção.
3. Reescreva o pseudo-código da ordenação por inserção para ordenar
em ordem decrescente.
4. Prove que sua resposta da questão anterior está correta utilizando
Exercícios
5. Considere o problema de busca:
Entrada:uma sequência de númerosA=ha1,a2, . . . ,anie um valor v. Saída:um índiceital quev=A[i]ou o valor especial NIL, sev
não pertencer aA.
Escreva o pseudocódigo parabusca linear, que faça a varredura da
sequência, procurando porv. Usando um invariante de laço, prove
que seu algoritmo é correto. Certifique-se de que seu invariante de laço satisfaz as três propriedades necessárias.
6. Considere o problema da soma de dois inteiros binários denbits,
armazenados em dois arrays de elementosAeB. A soma dos dois
inteiros deve ser armazenada um array binárioCden+1elementos.
Análise de eficiência de algoritmos iterativos
• Analisar um algoritmo: prever quando recurso ele necessita.
Recursos:tempo, memória, largura de banda, energia elétrica...
• Análise de tempo em função dotamanho da entrada, representado
porn.
• Análise domelhor casoé o tempo requerido para a situação na qual
o algoritmo vai demandar menos recursos.
• Análise dopior casoé o tempo requerido para a situação na qual o
algoritmo vai demandar mais recursos. É o LIMITE SUPERIOR.
• Análise domédio casopode ser quase tão custoso quanto o pior
Análise ordenação por inserção
-Análise ordenação por inserção, MELHOR CASO
Todos os elementos estão ordenados.
Não entra no while (linha 5) poisA[i]≤chave,tj =1paraj=2,3, . . . ,n.
Análise ordenação por inserção, PIOR CASO
Todos os elementos estão na ordem inversa.
O while (linha 5) executajvezes (o máximo possível),tj=j.
Ordem de crescimento
• Taxa de crescimento ou ordem de crescimento.
• Mantém o termo de maior ordem.
• Exemplo: emT(n)=an2+bn+c, mantéman2.
• Descarta as constantes, mantémn2.
• O tempo de execução da ordenação por inserção no pior caso é
Θ(n2),
Análise ordenação por inserção, CASO MÉDIO
• Metade estão na ordem inversa.(Pode-se ter outras interpretações
de caso médio. Pode-se usar casos aleatórios.) • O while (linha 5) executaj/2vezes,tj=j/2.
• T(n)é umafunção quadrática,T(n)=an2+bn+c.
Exercícios
1. Expresse a funçãon3/1000+100n2−100n+3em termos da notação
Θ.
2. Considere a ordenação dennúmeros armazenados no arrayA,
localizando primeiro o menor elemento deAe permutando esse
elemento com o elemento contido emA[1]. Em seguida, determine o
segundo menor elemento deAe permute-o comA[2]. Continue
dessa maneira para os primeirosn−1elementos deA. Escreva o
pseudocódigo para esse algoritmo, conhecido comoordenação por
seleção. Qual invariante de laço esse algoritmo mantém? Por que
ele só precisa ser executado para os primeirosn−1elementos, e
não para todos os elementos? Forneça os tempos de execução do
Exercícios
3. Considere novamente a busca linear. Quantos elementos da
sequência de entrada precisam ser verificados em média, considerando que o elemento que está sendo procurado tenha a mesma probabilidade de ser qualquer elemento no array? E no pior caso? Quais os tempo do caso médio e pior caso utilizando a
notaçãoΘ?
4. Como podemos modificar praticamente qualquer algoritmo para ter
MERGE
intercalação de duas sequências ordenadas
A[p..q]eA[q+1..r]estão ordenados (p≤q<r), MERGE(A,p,q,r)faz com queA[p..r]fique ordenado.
-Invariantes do MERGE
• No início de cada iteração do laçofor(linhas 12 a 17), o subarray
A[p..k−1]contém osk−pmenores elementos deL[1..n1+1]e
R[1..n2+1], em sequência ordenada.
• Além disso,L[i]eR[j]são os menores elementos se seus arranjos
Inicialização dos invariantes do MERGE
• Inicialização 1:k=p,A[p..p−1]é vazio.
• Invariante 1: No início de cada iteração do laçofor(linhas 12 a 17), o subarrayA[p..k−1]contém osk−pmenores elementos deL[1..n1+1]
eR[1..n2+1], em sequência ordenada.
• Inicialização 2:i=j=1, nada foi copiado paraA.
• Invariante 2: Além disso,L[i]eR[j]são os menores elementos se
Manutenção dos invariantes do MERGE
• Manuteção 1: Copia o menor valor entreL[i]eR[j]paraA[k]então
incrementak.
• Invariante 1: No início de cada iteração do laçofor(linhas 12 a 17), o subarrayA[p..k−1]contém osk−pmenores elementos deL[1..n1+1]
eR[1..n2+1], em sequência ordenada.
• Manutenção 2: incrementai(seL[i]foi copiado) ouj(seR[j]foi copiado).
• Invariante 2: Além disso,L[i]eR[j]são os menores elementos se
Término dos invariantes do MERGE
• Término 1: k=r+1,A[p..r]está ordenado.
• Invariante 1: No início de cada iteração do laçofor(linhas 12 a 17), o subarrayA[p..k−1]contém osk−pmenores elementos deL[1..n1+1]
eR[1..n2+1], em sequência ordenada.
• Término 2: todos os outros elementos que não as sentinelas (∞)
foram copiados paraA.
• Invariante 2: Além disso,L[i]eR[j]são os menores elementos se
Algoritmos de divisão e conquista
• Algoritmosrecursivoscom três etapas:
• Divideo problema em determinado número de subproblemas que são instâncias menores do problema original.
• Conquistaos subproblemas, resolvendo-os recursivamente. Quando osubproblema é pequeno, resolve-se diretamente.
Ordenação por intercalação (MERGE-SORT)
• Dividea sequência denelementos que deve ser ordenada em duas
subsequências den/2elementos cada uma.
• Conquistaordena cada subsequência recursivamente.
Se a subsequência temapenas um elemento(caso base da
recursão) ela já está ordenada.
• Combinaintercala as subsequências ordenadas para gerar a
Análise de algoritmos divisão e conquista
• O tempo de execução de algoritmos divisão e conquista pode ser
descrito por umaequação de recorrênciaT(n):
• Θ(1)é o tempo dos casos pequenos;
• D(n)é o tempo de divisão em subproblemas;
• aT(n/b)é o tempo de conquistar cada subproblema;
Análise do MERGE-SORT
• Divisão,D(n)= Θ(1) • Conquista=2T(n/2)
a
Referência
Livro:
T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein.Algoritmos: Teoria e
Prática. Elsevier, 2012.