Você está na página 1de 39

Fundamentao:

Algoritmos, para que servem?


Centro de Inform-ca Universidade Federal de Pernambuco Sistemas de Informao Vinicius Cardoso Garcia vcg@cin.ufpe.br
2011 Vinicius Cardoso Garcia

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

A funo dos algoritmos na computao


O que so os algoritmos?

Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia

A funo dos algoritmos na computao


O que so os algoritmos? Por que o estudo dos algoritmos vale a pena?

Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia

A funo dos algoritmos na computao


O que so os algoritmos? Por que o estudo dos algoritmos vale a pena? Qual a funo dos algoritmos em relao a outras tecnologias usadas em computadores?

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

Outros Dpos de problemas

Regular expression search: grep, egrep, emacs, Perl, Awk, compilers


Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia

Formas de Descrio de Algoritmos


Pseudo-cdigo
VisualG, Scratch, Greenfoot, Alice

Linguagem de programao
Java, C, C++, Python

Fluxograma
SADT

Linguagem natural (ambigidade!)

Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia

10

Anlise de Algoritmos: Conceitos bsicos


Infelizmente os computadores tm recursos limitados!
Recurso poder de processamento (TEMPO) Recurso armazenagem de dados (MEMRIA)

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

Ordenao por intercalao:


Custo em tempo: c2nlog2n para ordenar n nmeros

Suponha dois computadores:


Computador A:
Executa 1.000.000.000 de instrues por segundo

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)

Computador B (c2 = 50)

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)

Obs.: os nmeros que deseja-se ordenar sero chamados de chaves


Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia

15

Ordenamento por Insero


H vrias formas de denirmos um algoritmo de ordenamento. Vamos comear pelo Ordenamento do Insero
O ordenamento por insero segue uma idia bastante intui-va:
Jogo de cartas: arrumamos as carta em uma certa seqncia a medida que as pegamos

Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia

16

Algoritmo: Ordenamento por Insero


Algoritmo: inserEon-sort Entrada:
Arranjo de nmeros A[1...n]

Sada:
Arranjo de nmeros A[1...n] ordenados
Os nmeros de entrada so ordenados no local

Exemplo: Seja A = <5 2 4 6 1 3>

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

Para o Ordenamento por Insero


Inicializao:
j = 2, o sub-arranjo A[1..j-1] consiste apenas no nico elemento A[1], que elemento de A e est ordendado
Isto mostra que o loop invariante vlido antes da primeira iterao

Manuteno: (cada iterao mantm o loop invariante)

Trmino: (o que ocorre ao m do loop) Logo o algoritmo correto!

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

Com a nalidade de...


Descartar algoritmos inviveis Escolher algoritmo correto mais barato computacionalmente
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia

21

Analisando o Ordenamento por Insero


O custo do algoritmo de ordenao depender:
Tamanho da entrada
Nmero de itens na entrada (n) para o problema

Grau do pr-ordenamento da entrada

Tempo de execuo de um algoritmo


Em uma determinada entrada, o nmero de operaes primi-vas ou etapas executadas
Pode-se denir uma etapa por um passo no algoritmo que seja o mais independente possvel da mquina Considera-se que cada linha do pseudo-cdigo leve um tempo constante para sua execuo
i-sima linha, tempo ci
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia

22

Custos por linha e total

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:

Esta uma funo do -po: an2+bn+c


Uma funo quadrDca de n
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia

26

Anlise do Pior Caso e do Caso Mdio


A anlise mais u-lizada a do pior caso
A anlise do pior caso um limite superior
Conhec-lo a garan-a que o algoritmo no ir demorar mais tempo do que o calculado!

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

Exemplo de Dividir e Conquistar


Algoritmo de ordenao por intercalao
Dividir: divide a seqncia de n elementos a serem ordenados em duas subseqncias de n/2 Conquistar: Classica as duas subseqncias recursivamente Combinar: faz a intercalao das duas subseqncias ordenadas A recurso no funcionaquando a sequencia a ser ordenada tem comprimento 1
Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia

29

Algoritmo de Ordenao por Intercalao


A operao chave est no passo de combinao, onde so intercaladas (merge) duas subseqncias j ordenadas
Ser u-lizado o procedimento MERGE(A,p,q,r)
Onde A um arranjo, p,q e r so ndices de enumerao dos elementos do arranjo, tais que p q < r

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

Algoritmo de ordenao por intercalao


O Algoritmo MERGE-SORT(A,p,r) ordena os elementos do sub-arranjo A[p..r]
Se pr, ento o arranjo tem 1 elemento Caso contrario, calculado o ndice q que par-ciona o arranjo A[p..r] em dois sub-arranjos: A[p..q], com n/2 elementos, e A[q+1,r] com n/2 elementos

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

Anlise da Ordenao por Intercalao


Sem perda de generalidade, vamos supor que o comprimento do arranjo uma potncia de 2
A ordenao por intercalao sobre um nico elemento demora um tempo constante Quando n>1, deve-se desmembrar o tempo de execuo:
Dividir: Calcula o ponto mdio do subarranjo, demorando um tempo constante, D(n)=(1) Conquistar: so resolvidos dois problemas recursivamente, cada um com tamanho de n/2, custo de 2T(n/2) Combinar: algoritmo MERGE, C(n)=(n)

D(n) + C(n) -> (n) + (1) -> funo linear de n, (n)


Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia

36

Anlise da Ordenao por Intercalao


Custo total:

Se chamarmos c uma cte que represente o tempo exigido para resolver problemas de tamanho 1:

possvel perceber que T(n)=(n lg n), lg o log na base 2?


Algoritmos e Estrutura de Dados Fundamentao: Algoritmos, para que servem? 2011 Vinicius Cardoso Garcia

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

Você também pode gostar