Escolar Documentos
Profissional Documentos
Cultura Documentos
Referncias
Notas
de
aula
do
prof.
Tiago
A.
E.
Ferreira
(UFRPE)
Cormen,
Thomas
H.;
Leiserson,
Charles
E.;
Rivest,
Ronaldo
L.;
Stein,
Cliord;
Introduc-on
to
Algorithms
Third
Edi-on,
MIT
Press,
2009.
Captulos
1
e
2
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
Denio
Um
algoritmo
qualquer
procecimento
computacional
bem
denido
que
toma
algum
valor
(ou
conjunto
de
valores)
como
entrada
e
produz
algum
valor
(ou
conjunto
de
valores)
como
sada.
Sequncia
de
passos
computacionais
que
transforma
entrada
em
sada
Entrada
Sequncia de Passos
Sada
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
Denio
Ferramenta
para
resolver
problemas
computacionais
bem
especicados
Exemplo:
Problema
de
Ordenao
Entrada:
Uma
seqncia
de
n
nmeros:
<
a1,
a2,
...,
an>
Sada:
Uma
permutao
dos
nmeros
de
entrada:
<
a1,
a2,
...,
an>,
tal
que
a1
a2
...
an
(ordenao
crescente)
Algoritmo:
Seqncia
de
comandos
que
leva
uma
instncia
de
entrada
em
uma
correta
sada.
Algoritmos
e
Estrutura
de
Dados
Fundamentao:
Algoritmos,
para
que
servem?
2011
Vinicius
Cardoso
Garcia
Notaes
Instncia
de
um
problema:
a
entrada,
que
sa-sfaz
a
quaisquer
restries
impostas
pelo
problema,
necessria
para
se
calcular
uma
soluo
do
problema
Algoritmo
correto:
quando,
para
qualquer
instncia
do
problema,
o
algoritmo
pra
com
a
sada
correta.
Resolve
o
problema
computacional
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
Linguagem
de
programao
Java,
C,
C++,
Python
Fluxograma
SADT
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
10
Dois algoritmos dis-ntos que realizam a mesma tarefa podem diferenciar brutalmente em relao aos custos em tempo e memria!
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
11
Exemplo
Seja
dois
mtodos
de
ordenao:
Ordenao
por
insero:
Custo
em
tempo:
c1n2
para
ordenar
n
nmeros
Computador
B:
Executa
10.000.000
de
instrues
por
segundo
Algoritmos
e
Estrutura
de
Dados
Fundamentao:
Algoritmos,
para
que
servem?
2011
Vinicius
Cardoso
Garcia
12
Exemplo
O
melhor
programador
do
mundo
implementa
a
ordenao
por
insero
em
cdigo
de
mquina
no
computador
A
Um
programador
mediano
implementa
a
ordenao
por
intercalao
em
linguagem
de
alto-nvel
no
computador
B
Tempo
em
cada
computador
(ordenar
um
milho
de
nmeros)
Computador
A
(c1
=
2)
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
13
Exemplo
Desta
forma:
Mesmo
u-lizando
um
compilador
fraco,
o
computador
B
funciona
20
vezes
mais
rpido
que
o
computador
A!
Este
exemplo
mostra
que
a
escolha
do
algoritmo
pode
ser
bem
mais
cr-ca
do
que
a
escolha
do
Hardware
e
da
linguagem
e/ou
experincia
do
programador!
Portando:
Tanto
os
algoritmos
quanto
o
Hardware
cons-tuem
uma
tecnologia!
O
desempenho
total
do
sistema
depende
da
escolha
correta
de
ambos!
Algoritmos
e
Estrutura
de
Dados
Fundamentao:
Algoritmos,
para
que
servem?
2011
Vinicius
Cardoso
Garcia
14
Problema
de
Ordenamento
Vamos
analisar
o
problema
de
ordenamento:
Entrada:
Uma
seqncia
de
n
nmeros:
<
a1,
a2,
...,
an>
Sada:
Uma
permutao
dos
nmeros
de
entrada:
<
a1,
a2,
...,
an>,
tal
que
a1
a2
...
an
(ordenao
crescente)
15
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
16
Sada:
Arranjo
de
nmeros
A[1...n]
ordenados
Os
nmeros
de
entrada
so
ordenados
no
local
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
17
Pseudo-Cdigo
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
18
Loop
Invariante
Usamos
loop
invariante
para
nos
ajudar
a
entender
por
que
um
algoritmo
correto.
Um
Loop
Invariante
tem
as
Propriedades:
Inicializao:
ele
verdadeiro
antes
da
primeira
iterao
Manuteno:
Se
for
verdadeiro
antes
de
uma
iterao
do
loop,
con-nuar
verdadeiro
antes
da
prxima
iterao
Trmino:
Quando
o
loop
termina,
o
invariante
fornece
uma
propriedade
-l
que
ajuda
a
mostrar
que
o
algoritmo
correto
Algoritmos
e
Estrutura
de
Dados
Fundamentao:
Algoritmos,
para
que
servem?
2011
Vinicius
Cardoso
Garcia
19
A medida que o for corre, desloca-se uma casa direita em A (A [j-1], A[j-2], A[j-3],...) a procura da posio ideal para A[j], mantendo o sub-arranjo A[1..j- 1] ordenado j = n+1, sendo gerado o sub-arranjo A[1..n] que contem todos os elementos da seqncia de entrada e est ordenado
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
20
Anlise
de
Algoritmos
Prever
recursos
necessrios
Tempo
de
processamento
Memria
necessria
Largura
de
banda
para
comunicaes
Etc...
21
22
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
23
Melhor
caso
No
melhor
caso,
a
entrada
j
se
encontra
ordenada!
Custo:
Neste
caso
o
teste
do
While
executado
apenas
uma
vez
para
cada
passo
do
for.
Este
custo
pode
ser
escrito
como
an+b,
onde
a
e
b
so
constantes,
i.e.,
uma
funo
linear
em
n
Algoritmos
e
Estrutura
de
Dados
Fundamentao:
Algoritmos,
para
que
servem?
2011
Vinicius
Cardoso
Garcia
24
Pior
Caso
No
pio
caso,
a
entrada
se
encontra
ordenada
de
forma
decrescente!
(ordem
inversa
de
que
se
deseja
ordenar)
Custo:
Para
o
pior
caso,
o
teste
do
While
repeDdo
j
vezes
para
cada
passo
do
for.
Devemos
comparar
cada
elemento
A[j]
com
cada
elemento
do
subarranjo
ordenado
inteiro,
e
ento
tj=j
para
2,
3,
,
n
Ento:
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
25
Pior
Caso
Portanto
o
custo
total
dado
por:
26
Em
vrios
problemas,
esta
a
situao
mais
comum
Em
muitos
problemas
o
caso
mdio
quase
to
ruim
que
o
pior
caso.
Contudo,
em
alguns
caso,
como
em
algoritmos
probabils-cos
(ou
estocs-cos)
,
o
caso
mdio
o
de
maior
interesse.
Algoritmos
e
Estrutura
de
Dados
Fundamentao:
Algoritmos,
para
que
servem?
2011
Vinicius
Cardoso
Garcia
27
Projeto
de
Algoritmos
Abordagem
de
dividir
e
conquistar
Algoritmo
recursivos
Dividir
o
problema
em
um
determinado
nmero
de
subproblemas
Conquistar
os
subproblemas,
reescrevendo-os
recursivamente
Combinar
as
solues
dadas
aos
subproblemas
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
28
29
pressuposto
que
os
sub-arranjos
A[p..q]
e
A[q+1..r]
estejam
em
seqncia
ordenada
Ele
os
intercala
(ou
mescla)
para
formar
um
nico
subarranjo
ordenado
A[p..r]
MERGE
leva
o
tempo
(n),
onde
n=r
p
+1
o
nmero
de
elementos
sendo
intercalados
Algoritmos
e
Estrutura
de
Dados
Fundamentao:
Algoritmos,
para
que
servem?
2011
Vinicius
Cardoso
Garcia
30
Combinao
Suponha
a
existncia
de
duas
pilha
de
cartas
(ordenadas)
com
as
numeraes
para
cima
Ser
gerada
uma
pilha
de
sada,
onde
ser
depositada
a
carta
de
menor
valor
dentre
as
que
esto
expostas
nas
duas
pilhas
iniciais.
Esta
pilha
de
sada
formada
com
as
cartas
viradas
para
baixo.
Ao
trmino,
ser
gerada
uma
nica
pilha
ordenada
com
todas
as
cartas
das
duas
pilhas
iniciais
Sendo
n
o
nmero
total
de
cartas
(duas
pilhas
iniciais),
o
custo
em
tempo
ser
(n)
Algoritmos
e
Estrutura
de
Dados
Fundamentao:
Algoritmos,
para
que
servem?
2011
Vinicius
Cardoso
Garcia
31
Algoritmo MERGE(A,p,q,r)
senEnela
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
32
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
33
MERGER-SORT(A,1,Comprimento[A])
Operao
de
ordenao
por
intercalao
sobre
A
=
<5,2,4,7,1,3,2,6>
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
34
Algoritmos
Recursivos
Um
algoritmo
que
tem
uma
chamada
a
si
prprio,
seu
tempo
de
execuo
freqentemente
pode
ser
descrito
por
uma
equao
de
recorrncia
ou
recorrncia
Para
n
pequeno,
nc
(c
uma
cte
qq),
a
soluo
direta
demorar
um
tempo
constante,
(1)
Caso
contrrio,
o
problema
ser
dividido
em
a
subproblemas
de
comprimento
1/b
do
comprimento
total
E,
seja
D(n)
o
tempo
para
dividir
o
problema,
e
C(n)
o
tempo
para
combinar
as
solues
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
35
36
Se chamarmos c uma cte que represente o tempo exigido para resolver problemas de tamanho 1:
37
lg n + 1 nveis
altura
(n
lg
n)
Algoritmos
e
Estrutura
de
Dados
Fundamentao:
Algoritmos,
para
que
servem?
2011
Vinicius
Cardoso
Garcia
38
ADvidade
complementar
Leitura
dos
captulos
1
e
2
do
livro
do
Cormen
Implementao
dos
mtodos
Inser7onSort
e
MergeSort
em
Java
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia
39