Sei sulla pagina 1di 79

ALGORITMOS

Parte I:
1. O que so?
2. O que os caracteriza

Parte II:
3. Algoritmos e computadores
4. O processo de compilao
5. Algoritmos e linguagens de programao

Parte III:
6. Algoritmos resolvendo problemas
7. Algoritmos e correo
8. Resolvem qualquer problema?
9. Adianta execut-los?
10.Nossa ignorncia
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

Algoritmos

O que so?

Algoritmo uma receita para resoluo de um


problema

Exemplo:
Problema: preparar bifes milaneza
Algoritmo: precisamos descrever a receita

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

Algoritmos

O que so?

Bife milaneza:
1. Limpar a pea de carne
2. Fatiar a carne em bifes
3. Colocar farinha de rosca em um prato
4. Juntar 2 ovos e mexer
5. Repetir, para cada bife
5.1) passar o bife na mistura de farinha, nos 2 lados
5.2) levar bife frigideira
5.3) aguardar dourar, virando ambas as faces
5.4) retirar bife e colocar sobre papel toalha at secar
5.5) retirar do papel toalha e juntar numa travessa
6. Decorar a travessa com folhas de alface
7. Servir
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

Algoritmos

Objetos de consumo (entrada):

O que so?

carne
farinha
ovos
alface

Objetos de apoio (atores, executores):

faca
travessa
fogo
cozinheiro

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

Algoritmos

Objetos produzidos (sada):

O que so?

bifes

Objeto que controla o processo (receita):

algoritmo

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

Algoritmos

O que so?
Algoritmo

Problema
Idia

entrada

Algoritmo

sada

Hardware

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

Algoritmos

O que so?

Um dos primeiros algoritmos:

Euclides (300 . . . 400 BC): algoritmo para obter


o mximo divisor comum de dois inteiros positivos
Sculo IX (800-899 DC), pennsula arbica/Prsia:
Matemtico Mohammed al-Khowrizm
Cria regras passo-a-passo para se fazer aritmtica com algarismos
decimais

Em latim:

al-Khowrizm

algorismus

algoritmo, algorithm, . . .

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

Algoritmos

O que so?

Exemplo:
Problema:
achar o mximo divisor comum (MDC) de dois inteiros positivos dados: M e N.
Idia ?? . . .
Como aprendemos na escola ...

Algoritmo:
1. Se M=N, ento MDC M (ou N); pre
2. Caso a):
se ( M>N ) ento
substitua M por (M-N) e repita a partir do passo 1
3. Caso b):
se ( N>M ) ento
substitua N por (N-M) e repita a partir do passo 1

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

Algoritmos

O que so?

Dados:
Dois nmeros inteiros, M >= 1 e N >=1

Sada:
Um nmero inteiro Z, tal que Z = MDC(M,N)

Apoio, executores:
Lpis, papel, borracha, humano

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

Algoritmos

O que so?

Executando a receita: caso particular onde M=36 e N=21


Passo
--1
2
1
2
3
1
2
1
2
1
2
3
1

M N
36
36
15
15
15
15
15
9
9
3
3
3
3
3

21
21
21
21
21
6
6
6
6
6
6
6
3
3

2/22/2011 12:40
PM

Comentrios
36 <> 21
36 - 21 = 15
15 <> 21
no executado: 15 < 21
21 - 15 = 6
15 <> 6
15 - 6 = 9
9 <> 6
96=3
3 <> 6
3 < 6; no executado
6-3=3
MDC 3. Pre.

Algoritmo
1. Se M=N, ento MDC M (ou N); pre
2. Caso a):
se ( M>N ) ento
substitua M por (M-N) e repita a
partir do passo 1
3. Caso b):
se ( N>M ) ento
substitua N por (N-M) e repita a
partir do passo 1

Copyright@2007, 2008, 2009: Arnaldo V. Moura

10

Algoritmos

O que caracteriza?

1. Algoritmo formado por um texto finito:


a receita dada.

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

11

Algoritmos

O que caracteriza?

2. O texto composto por instrues elementares:


Elementar depende do contexto:
... juntar dois ovos ... elementar para um
cozinheiro
... substituir M por (M-N) ... elementar para
quem domina aritmtica bsica
... se hoje voc puder provar que a cotao do dlar
vai subir 10% no prximo ms, compre $ 1.000,00 ... no
elementar para mortais normais

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

12

Algoritmos

O que caracteriza?

3. O texto uma receita metdica, passo-a-passo:

Passo inicial

Passo final

Executado um passo, qual o seguinte?

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

13

Algoritmos

O que caracteriza?

4. Ao executar:
partindo de dados vlidos, deve sempre
terminar.
partindo de dados invlidos, pode produzir
lixo, ou mesmo no terminar.
parte difcil de garantir.

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

14

Algoritmos

O que caracteriza?

Exemplo: algoritmo do MDC sempre pra quando M >= 1


e N >= 1:

Cada execuo dos passos 2 ou 3,


M ou N diminuem; logo (M+N) diminui.

M e N sempre so >= 1
iniciam assim;
M - N >= 1, se M > N
N - M >= 1, se N > M

No podemos passar de M=N=1


Nesse caso, MDC = 1 e pra.

2/22/2011 12:40
PM

1. Se M=N, ento MDC M (ou N); pre


2. Caso a):
se ( M>N ) ento
substitua M por (M-N) e repita a
partir do passo 1
3. Caso b):
se ( N>M ) ento
substitua N por (N-M) e repita a
partir do passo 1

Copyright@2007, 2008, 2009: Arnaldo V. Moura

15

Algoritmos

O que caracteriza?

Exemplo: e com dados invlidos?


Iniciando com M = 3 e N = -1

Passo

M N

Comentrios

1
2
1
2
1
2
...
no pra

3
4
4
5
5
6

-1 <> 3
3 > -1; 3 - (-1) = 4
-1 <> 4
4 <> -1; 4 - (-1) = 5
-1 <> 5
5 <> -1; 5 - (-1) = 6
repete esse padro
no vai parar nunca

-1
-1
-1
-1
-1
-1

2/22/2011 12:40
PM

1. Se M=N, ento MDC M (ou N); pre


2. Caso a):
se ( M>N ) ento
substitua M por (M-N) e repita a
partir do passo 1
3. Caso b):
se ( N>M ) ento
substitua N por (N-M) e repita a
partir do passo 1

Copyright@2007, 2008, 2009: Arnaldo V. Moura

16

Algoritmos

... e computadores

Algoritmo:
programa, software ...

Computador, HD, disquete, ... :


hardware, executores, atores

Entrada:
teclado, mouse, sensores, ...

Sada:
monitor, impressora, ...
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

17

Algoritmos

... e computadores

Caractersticas dos algoritmos como software:


1.

Texto finito:
todo programa tem um texto (talvez muitas linhas) finito ......

2.

Instrues elementares:
elementares para o computador onde o software vai executar.
Dificuldades:

Cada computador tem um particular conjunto de instrues


bsicas
Instrues do computador so muito primitivas

Soluo:escrever algoritmos em uma linguagem de


programao (C, C++, JAVA, FORTRAN, . . .)
Programa (software): texto escrito numa particular LP
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

18

Algoritmos

... e computadores

Caractersticas dos algoritmos como software (cont):


3.

Receita metdica:
texto escrito numa LP preciso e sem ambigidades

4.

Terminao:
1. Grande desafio: texto escrito numa LP no deixa isso
claro.
2. Problema no desenvolvimento de software: execuo sem
terminao (i.e. sem loops).

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

19

Algoritmos

... e computadores

Exemplo:

Problema: dado um nmero N >= 0, calcular 2^N

sada

entrada
N >= 0

2/22/2011 12:40
PM

idia ??

Copyright@2007, 2008, 2009: Arnaldo V. Moura

2^N

20

Algoritmos

... e computadores

Exemplo (cont):
Idia:
2^N = 1x2x2x . . . x2

(quando N = 0, 2^0 = 1)

N vezes

Algoritmo:
1. Copie o valor de N para Z
2. Copie o valor 1 para P
3. Enquanto (Z > 0) faa
3.1 Novo valor de P 2x(valor atual de P)
3.2 Novo valor de Z (valor atual de Z) - 1
4. Resposta est em P; pre
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

21

Algoritmos

... e computadores

Exemplo (cont):
Escrevendo texto numa LP, p. ex. em C
....
Z = N;
P = 1;
while (Z>0) do
{
P = 2xP;
Z = Z 1;
}
....
2/22/2011 12:40
PM

1. Copie o valor de N para Z


2. Copie o valor 1 para P
3. Enquanto (Z > 0) faa
3.1 Novo valor de P
2x(valor atual de P)
3.2 Novo valor de Z
(valor atual de Z) - 1
4. Resposta est em P; pre

Copyright@2007, 2008, 2009: Arnaldo V. Moura

22

Algoritmos

... e compilao

Um computador , essencialmente, uma mquina


programvel muito primitiva

instrues elementares (de mquina) primitivas


lidam apenas com pequenas cadeias de bits
realizam operaes muito simples sobre essas
cadeias de bits

trocar um bit (de 0 para 1, ou de 1 para 0), dependendo do


valor atual de outro bit
armazenar na memria uma cadeia de bits
recuperar da memria uma cadeia de bits

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

23

Algoritmos

... e compilao

Arquitetura bsica simplificada:


Memria
1

entrada

memria

2^N

processador

sada

2^N

Bytes

10

1024

1K

20

1048576

1M

27

134217728

128 M

30

1073741824

1G

32

4294967296

4G

1 byte = 8 bits

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

24

Algoritmos

... e compilao

Arquitetura bsica simplificada (cont):

Formado por memria (grande), processador e


circuitos de entrada e de sada

Processador executa instrues elementares


especficas dessa mquina

inclusive armazenamento e recuperao de dados da


memria

Processador e circuitos de e/s recebem dados


das entradas e exibem dados nas sadas
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

25

Algoritmos

... e compilao

Compilao:

Processo de traduzir programas escritos em uma


particular LP para cdigo em instrues bsicas de uma
mquina especfica
Traduo de LP para linguagem de mquina:

Dificuldades: processo laborioso, entediante e sujeito a erros.


Soluo: Escrever um programa para fazer a traduo

Esse programa um

2/22/2011 12:40
PM

compilador

Copyright@2007, 2008, 2009: Arnaldo V. Moura

26

Algoritmos

... e compilao

Para cada LP e cada computador


(processador), um compilador especfico
Existem milhares de LPs:

FORTRAN: cientfica, mais antiga


ALGOL, C, PASCAL: estruturadas, generalistas
C++, C#, JAVA : lidam com tecnologia de objetos
LISP, PROLOG: voltadas para IA
. . . (muitas outras)

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

27

Algoritmos

... e compilao

O processo de compilao/edio/execuo:
idia

algoritmo

programao programa
fonte (LP)

problema

papel

programa
objeto (LM)

arquivo

compilao

execuo
soluo

arquivo

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

28

Algoritmos

Codificao/compilao/execuo:

... e compilao

permite executar um algoritmo em um computador


obtm soluo para problemas
rapidamente (?!)

Algoritmo:

centro do universo
demais componentes so acessrios
Cincias da Computao: estudo de algoritmos
Inteligncia de um computador: algoritmos programados

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

29

Algoritmos

... e linguagens de programao

Pessoas codificam algoritmos em LPs

Que tipos de instrues (em geral) esto presentes


em uma LP?

Atribuio:
A = E;

Seqenciamento:
. . . faa A; faa B; . . .
...
faa A;
faa B;
...

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

30

Algoritmos

... e linguagens de programao

Tipos de instrues (em geral) em uma LP (cont):

Desvio condicional:
. . . se (A verdade) ento (faa B) seno (faa C); . . .
. . . se (A verdade) ento (faa B); . . .

Iteraes:
. . . faa A exatamente N vezes; . . .
. . . repita A at que (Q seja verdade); . . .
. . . enquanto (Q verdade) faa A; . . .

Inmeras outras, mais sofisticadas, dependendo da LP

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

31

Algoritmos

... e linguagens de programao

Como dados so representados e manipulados em LPs?

Valores dos dados so armazenados na memria

A memria referenciada atravs de variveis:

Varivel: um nome simblico que designa uma, ou mais,


posies na memria

Exemplo: X, Z, D3, CASA_DE_PEDRA, . . .

A cada varivel est associado um tipo de dados

O nmero de posies de memria ocupadas pela varivel


depende do seu tipo
As operaes e manipulaes permitidas com o valor e uma
varivel dependem de seu tipo

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

32

Algoritmos

... e linguagens de programao

Que tipos de dados (em geral) esto presentes em uma


LP?

Tipos bsicos:
Valores inteiros, valores fracionrios (ou quase...);
valores binrios (0 ou 1); . . .
Exemplos:

X uma varivel de tipo inteiro (posio e memria onde se


pode armazenar inteiros):

X = -1: carrega valor -1 na posio de memria correspondente a X


X = 2*X: recupera o valor armazenado na posio de memria
correspondente a X, multiplica por 2 e (re)armazena o resultado na
mesma posio de memria associada a X

X uma varivel de tipo fracionrio:

X = 0.7856: carrega esse valor em X


X = cos(X): calcula coseno de X e recarrega o resultado em X

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

33

Algoritmos

... e linguagens de programao

Que tipos de dados (em geral) esto presentes em uma


LP (cont):

Vetores: seqncia indexada de valores de mesmo tipo


Exemplo: X um vetor, indexado de 1 a 5, de tipo inteiro
X
X[2] = 0

X[5] = X[2] + 3

?
0
?
?
3
X
I varivel de tipo inteiro e seu valor 4

X[I-1] = X[2] - X[I+1]


2/22/2011 12:40
PM

-3

Copyright@2007, 2008, 2009: Arnaldo V. Moura

34

Algoritmos

... e linguagens de programao

Problema: temos um vetor de dimenso N, onde cada cela contm um


nmero inteiro. Devemos ordenar o vetor em ordem crescente, i.e.,
os valores contidos nas celas crescem da esquerda para a direita

Exemplo:
entrada
sada

Idia:

2/22/2011 12:40
PM

X
X

15

10

18

12

10

12

15

18

?!?

Copyright@2007, 2008, 2009: Arnaldo V. Moura

35

Algoritmos

... e linguagens de programao


atual=3

Se 3 primeiras celas ordenadas: X

10

15

18

12

1. Prximo valor no vetor X[atual+1] = 12


2. Procura posio de 12 na parte j ordenada:
deve entrar na posio 2
atual=3
1

10

15

18

12

procura=2

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

36

Algoritmos

... e linguagens de programao

3. Salva valor de X[atual+1] na varivel PROX:


atual

PROX = X[atual+1] = 12

10

15

18

12

procura

4. Desloca bloco para direita:


1

10

15

18

12

10

15

15

18

procura

2/22/2011 12:40
PM

atual

procura

Copyright@2007, 2008, 2009: Arnaldo V. Moura

atual

37

Algoritmos

... e linguagens de programao

5. Insere valor de PROX e avana atual:


X[procura] = PROX; atual = atual+1

10

12

15

18

procura

atual

Ordenao avanou de uma posio para a direita


1

10

12

15

18

7
atual

4 primeiras celas esto ordenadas!


Repete o processo:

10

12

15

18
atual

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

38

Algoritmos

... e linguagens de programao

Como comear ?

Indicando que a parte ordenada contm inicialmente um


elemento
1

15

10

18

12

atual

At posio atual tudo j ordenado: trivialmente

Precisamos escrever essa idia numa LP !

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

39

Algoritmos

... e linguagens de programao

Traduzindo numa LP: (assumindo tamanho do vetor N >= 1)


atual = 1;
faa
{ prox = x[atual+1]; procura = 1;
enquanto (prox > x[procura]) faa procura = procura+1;
se (procura <= atual) ento
{ desloca = atual;
enquanto (desloca >= procura) faa
{ x[desloca+1] = x[desloca]; desloca = desloca-1; }
}
x[procura] = prox;
} exatamente (N-1) vezes;

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

40

Algoritmos

... resolvendo problemas

Entender bem o problema a ser resolvido:

separar dados de entrada vlidos de invlidos


definir como ser representada a soluo na sada

Criar uma idia para resolver o problema

desenvolver o algoritmo
processo criativo, rascunho, lpis e papel ...
simular execuo do algoritmo em casos de fronteira
verificar correo e trmino

Traduzir a idia para uma LP, escrevendo um programa

restrito aos comandos e tipos de dados da LP

==> Criar o algoritmo adaptado LP

estruturas que correspondam a tipos de dados da LP


aes facilmente programveis na LP

Editar/compilar/executar o programa

processo iterativo para retirar erros (algoritmo e cdigo)

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

41

Algoritmos

... correo

O algoritmo corretamente soluciona o problema?


Provar um teorema (como em matemtica) mostrando que
o algoritmo correto:
processo de convencimento dos pares
possvel exibir uma prova formal da correo?
Dificuldades:

preciso e rigor ao descrever a execuo do algoritmo


especificar formalmente dados de entrada e a sada

Soluo:

prover uma semntica (descrio formal dos efeitos


dinmicos) para as instrues da LP
usar linguagens de especificao de dados (lgicas, ...)

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

42

Algoritmos

... correo

sada

entrada
algoritmo

EE = espec. entrada

A = dinmica algor.

ES = espec. sada

Se EE(X) verdadeiro
Se Z = A(X)
Ento ES(Z) verdadeiro
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

43

Algoritmos

... correo

Exemplo (simplificado): problema da ordenao do vetor


Linguagem de especificao de dados

Entrada:

n ( o conjunto dos naturais; dimenso do vetor)


vi , 1 i n ( o conjunto dos inteiros)

Sada:

vi v(i+1), 1 i < n
v1, v2, ..., vn uma permutao de v1, v2, ..., vn

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

44

Algoritmos

... correo

Exemplo (simplificado): problema da ordenao do vetor


Semntica das instrues da LP: alteram a memria
Memria: posies (variveis) usadas no programa

[(n, v1, ..., vn), (atual, desloca, prox, procura)]


Cada instruo da LP altera a memria

[(n, v1, ..., vn), (atual, desloca, prox, procura)]


instruo

[(n, v1, ..., vn), (atual, desloca, prox, procura)]


2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

45

Algoritmos

... correo

Exemplo: instruo atual = 1

[(n, v1, ..., vn), (atual, desloca, prox, procura)]


atual = 1

[(n, v1, ..., vn), (atual, desloca, prox, procura)]


n
=n; vi
=vi, 1 i n; atual
=1;
desloca
=desloca; prox
=prox; procura
=procura

Outras instrues da LP: transformaes mais sofisticadas,


porm semelhantes

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

46

Algoritmos

... correo

Execuo correta do programa:


(configurao inicial da memria)

[(n, v1, ..., vn), (atual, desloca, prox, procura)]


n
vi , 1 i n
instrues do programa

[(n, v1, ..., vn), (atual, desloca, prox, procura)]


(configurao final da memria)

n
= n
v
i v
(i+1), 1 i < n
v
1, . . .,v
n uma permutao de v1,. . . ,vn

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

47

Algoritmos

... correo

Terminao:
Mostrou que, SE o programa parte de uma configurao
inicial e chega numa configurao final, ENTO o
resultado est correto:

Precisa AINDA mostrar que o programa SEMPRE chega numa


configurao final

Bem mais complexo: envolve uma induo

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

48

Algoritmos

... correo

Outras dificuldades na prova de correo:

Tempo real:

h a noo de tempo real na LP: ... o sensor 17 deve indicar


3,14 em at 2,6 ms ...

O programa naturalmente no pra:

sistemas iterativos, sistemas operacionais, pginas na teia, ...


computao infinita

A LP abriga orientao a objetos

... vrias outras ...


2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

49

Algoritmos

... resolvem qualquer problema?

Questo:
Dado um problema P, sempre haver um algoritmo que
resolva P corretamente?

P deve ser um problema prtico, fcil de enunciar


- ordenar um vetor de nmeros,
- calcular produto de matrizes, . . .

O algoritmo A que resolve P deve funcionar corretamente em


todas as (infinitas) entradas de P
- todos os vetores, carregados com inteiros quaisquer
- quaisquer duas matrizes de quaisquer dimenses compatveis entre si
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

50

Algoritmos

... resolvem qualquer problema?

A Cincia da Computao tem a resposta para a questo


SURPRESA ! ! !
NO.
NO H problemas para os quais NO EXISTE algoritmos
capazes de resolve-los corretamente.
Com mais tecnologia (computadores mais rpidos, mais memria)
e dado tempo suficiente para rodar o programa, poderemos resolver
esses problemas, no futuro, certo?
NO
Computador nenhum vai resolver esses problemas, nem hoje, nem
amanh, nem nunca; nem aqui, nem em Marte, em lugar algum;
rodando qualquer programa por quanto tempo quiser (anos,sculos, ...)
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

51

Algoritmos

... resolvem qualquer problema?

Um problema indecidvel (insolvel) [Harel, Computers Ltd.]:


Dado um conjunto finito T de ladrilhos quadrados:

Problema: podemos ladrilhar qualquer grade quadrada com ladrilhos


de tipo T, casando as cores das faces que se tocam? SIM ou NO?

pode usar quantos ladrilhos quiser, de cada tipo


os ladrilhos no podem ser girados

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

52

Algoritmos

... resolvem qualquer problema?

Exemplo 1:
consegue para toda
regio do plano

SIM!

Exemplo 2:
todas as outras
possibilidades falham
nessa regio

NO!
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

53

Algoritmos

... resolvem qualquer problema?

Problema de ladrilhar toda regio do plano:

NENHUM computador JAMAIS vai conseguir resolver esse problema,


nem agora, nem nunca, nem com QUALQUER melhoria de tecnologia,
nem com QUALQUER tamanho de memria, nemcom QUALQUER
tempo de execuo

Podemos demonstrar isso, matematicamente!

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

54

Algoritmos

... resolvem qualquer problema?

Um problema decidvel (solvel) [Harel, Computers Ltd.]:


Dado um conjunto finito T de ladrilhos quadrados:

Dadas duas posies (I e F) na grade infinita do plano


Problema: podemos ladrilhar um caminho na grade, partindo de I e
chegando em F, com ladrilhos de tipo T, e casando as cores das
faces que se tocam? SIM ou NO?
pode usar quantos ladrilhos quiser, de cada tipo
os ladrilhos no podem ser girados

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

55

Algoritmos

... resolvem qualquer problema?

Exemplo:

F
I

Com esses ladrilhos


Com essas posies I e F

SIM!
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

56

Algoritmos

... resolvem qualquer problema?

Problema de ladrilhar um caminho entre duas posies:

EXISTE um algoritmo que decide se h, ou se no h, o caminho


entre as duas posies dadas, usando ladrilhos do conjunto dado

Podemos exibir o algoritmo e mostrar sua


correo e terminao, no importa qual o conjunto
T dado e no importa quais as posies I e F dadas

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

57

Algoritmos

... resolvem qualquer problema?

Ladrilhar caminhos (levem. modificado) [Harel, Computers Ltd.]:


Dado um conjunto finito T de ladrilhos quadrados:

Dadas duas posies (I e F) na grade infinita do SEMI-plano


Problema: podemos ladrilhar um caminho na grade, partindo de I e
chegando em F, com ladrilhos de tipo T, e casando as cores das
faces que se tocam? SIM ou NO?
pode usar quantos ladrilhos quiser, de cada tipo
os ladrilhos no podem ser girados

No permitido que o caminho cruze uma dada linha horizontal,


que divide o plano em dois semi-planos
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

58

Algoritmos

... resolvem qualquer problema?

Problema de ladrilhar caminhos no semi-plano:

O problema, agora, torna-se INDECIDVEL!

NENHUM computador JAMAIS vai conseguir resolver esse problema,


nem agora, . . .

Podemos demonstrar isso, matematicamente!

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

59

Algoritmos

... resolvem qualquer problema?

Outro exemplo:
verificador de loops em programas em C
programa P

esp. de entr. E

ALGORITMO
[?!]

SIM: P sempre
pra para todas
as entr. vlidas
2/22/2011 12:40
PM

NO: P no pra
com algumas das
entr. vlidas

Copyright@2007, 2008, 2009: Arnaldo V. Moura

60

Algoritmos

... resolvem qualquer problema?

Problema de verificar loops com entradas vlidas:


O algoritmo (programa verificador)
no existe!
NENHUM computador JAMAIS vai conseguir testar se, dado um
programa qualquer P (escrito em C), dada uma especificao das
entradas vlidas para P, SE EXISTE alguma entrada vlida que force P
a no parar (P entraria em loop) quando executa com aquela entrada.

Podemos demonstrar isso, matematicamente!

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

61

Algoritmos

... adianta execut-los?

Dado um problema P, e conseguido um algoritmo A para P, ento


podemos resolver qualquer instncia de P, com dados de entrada E,
executando A sobre os dados E.
CORRETO?
NEM SEMPRE:

ao executar sobre E, o algoritmo A pode precisar de um tempo muito


longo (anos, sculos, milhes de sculos, ...)
ao executar sobre E, o algoritmo A pode precisar de um muita
memria (vrios GBs, muitos milhes de GBs, ...)

Nesses casos, A um algoritmo imprestvel!

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

62

Algoritmos

... adianta execut-los?

Se A um algoritmo ruim, ento basta criar outro algoritmo para P, que


seja mais eficiente (em tempo e/ou em memria)
CORRETO?

SURPRESA !!!
Pode ser que NO EXISTA um algoritmo mais eficiente do que A
para resolver P e podemos provar isso matematicamente!

P um problema computvel, porm intratvel

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

63

Algoritmos

... adianta execut-los?

Exemplo: O jogo do bloqueio [Harel, op. cit.]


Dado um mapa rodovirio:

I1

I2

I1

Posies iniciais de J1 (jogador 1): I1


I2

Posies iniciais de J2 (jogador 2): I2


F2
I1

F1

Posies finais de J1: F1


I2

Posies finais de J2: F2

I1
F2

I2

F1
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

64

Algoritmos

... adianta execut-los?

Problema: Ser que o jogador J1 tem uma estratgia vencedora?


Regras de movimentos:

J1 inicia; depois os jogadores se alternam.


Em um movimento, um jogador pode percorrer qualquer trecho
(concatenado) de mesma cor, partindo de uma posio ocupada por si

no pode passar por interseces ocupadas (por si ou pelo adversrio)


ponto final deve estar tambm desocupado

Vencedor: aquele jogador que chegar a um ponto final primeiro


F2

Nesse mapa, nessas posies iniciais


e finais

I1

F1
I2
F1

2/22/2011 12:40
PM

I1
F2

I2
J1 TEM estratgia (seq. de movimentos)
sempre vencedora

Copyright@2007, 2008, 2009: Arnaldo V. Moura

65

Algoritmos

... adianta execut-los?

Jogo do bloqueio:
Algoritmo A:

De forma sistemtica, tente todas as possibilidades de


seqncias alternadas de movimentos, comeando com J1
Possvel:

nmero finito de possibilidades

Dificuldade:

o nmero de possibilidades enorme

para cada movimento de J1, deve tentar todos os movimentos de J2

para cada movimento de J2, deve tentar todos os movimentos de J1

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

66

Algoritmos

... adianta execut-los?

Estimando o tempo de execuo do algoritmo A:

Uma quantidade, N, mede o tamanho (num. de bits na representao)


da entrada
-- por exemplo, N pode ser o nmero de interseces, ou o nmero de
vias, ou ....

Tempo de execuo dado pela contagem do nmero de passos


elementares que A executa, no pior caso, para entradas de
tamanho N dado pela funo f(N) = 2^N.

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

67

Algoritmos

... adianta execut-los?

Tempo de execuo do algoritmo A:


Em um computador que realiza 1 milho de passos elementares por
segundo, o tempo de execuo de A seria
n

10

20

50

60

100

200

f(n)=2^n

1 ms

1s

35.7
anos

3.000
anos

+ 400 trilhes
anos

num. sc. tem


45 dgitos!

Impraticvel para 50 ou mais cidades


Rodando A em um computador 10.000 vezes mais rpido
n

50

60

100

f(n)=2^n

1,29
dias

3
anos

+ 40 bilhes
sc.

200
num. sc. tem
41 dgitos!

Impraticvel para 60 ou mais cidades: quase nada muda!


2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

68

Algoritmos

... adianta execut-los?

Algoritmo A no bom para o problema do bloqueio:


Precisamos de outro algoritmo, mais eficiente

O que um algoritmo eficiente?

N: o tamanho de uma entrada vlida

f(N): quantos passos, no mximo, A executa com entradas de


tamanho N

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

69

Algoritmos

... adianta execut-los?

com um milho de passos por segundo


N

10

20

50

100

200

f(N)
N^2

0,1 ms

0,4ms

2,5ms

10ms

40s

N^5

0,1s

3,2s

5,2m

2,8h

3,7dias

2^N

1ms

1s

35,7anos

sculos
400 trilhes

sculos
45 dgitos

N^N

2,8s

3,3 trilhes
anos

sculos
70 dgitos

sculos
185 dgitos

sculos
445 dgitos

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

70

Algoritmos

... adianta execut-los?

Tempos de execuo, de pior caso:

Polinomiais: resultam em algoritmos eficientes


Exponenciais: resultam em algoritmos no eficientes

Problemas tratveis: tm algoritmos polinomiais


Problemas intratveis: no tm algoritmos polinomiais
Problema do bloqueio: intratvel

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

71

Algoritmos

... nossa ignorncia

Dado um problema P, como saber se tratvel?

SURPRESA!!!

Para muitos problemas de grande interesse prtico,


no sabemos se so tratveis ou no!

Essa um das maiores questes em aberto em


Cincias da Computao!

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

72

Algoritmos

... nossa ignorncia

Exemplo: problema do caixeiro viajante

Dado:

mapa de cidades, com custo de viagem entre cada par de cidades


cidade de incio, I, cidade de trmino, F
um valor K

Problema:

existe rota, de I at F, visitando as cidades exatamente uma vez


com custo no mximo K? SIM/NO?

A notar:

problema de grande interesse prtico


problema simples de entender

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

73

Algoritmos
Instncia:
O mapa:

... nossa ignorncia

O valor mximo do
percurso: 29

10
9

10

4
3
7

EXISTE um percurso?
SIM/NO

5
7
4

Os pontos inicial e final

2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

74

Algoritmos

... nossa ignorncia

3
4
10

8
9

10

10

7
2

2
7
4

K=29
2/22/2011 12:40
PM

3+6+10+4+2+3 = 28
Copyright@2007, 2008, 2009: Arnaldo V. Moura

SIM
75

Algoritmos

... nossa ignorncia

6
3
4
10

8
9

10

???

7
2

5
7
4

K=25
2/22/2011 12:40
PM

Com esse custo no possvel

NO
Copyright@2007, 2008, 2009: Arnaldo V. Moura

76

Algoritmos

... nossa ignorncia

Algoritmos para o problema do caixeiro viajante:

Partindo da posio I, tente todas as possibilidades que


fiquem dentro do custo K

Nmero de possibilidades finito

algoritmo corretamente resolve o problema

Nmero de possibilidades muito grande

Se achar um caminho at F, responda SIM


Se no achar, responda NO

tempo de execuo exponencial no nmero de cidades

O algoritmo impraticvel
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

77

Algoritmos

... nossa ignorncia

Problema do caixeiro viajante:


Existe um algoritmo mais eficiente (polinomial
no nmero de cidades)?
SURPRESA !!!
NO SABEMOS !?!
Esse o caso com MUITOS outros problemas de
interesse prtico (classe NP)
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

78

Algoritmos

... alternativas

O que podemos fazer, por ora?

Uso de heursticas:

obtm boas solues, sem garantia de otimalidade

Algoritmos randomizados:

do a resposta correta quase sempre

Algoritmos aproximativos:

do soluo com garantia de proximidade da tima

Computao quntica:

baseado na mecnica quntica, nova maneira de programar

Computao molecular:

paralelismo macio usando reaes moleculares

...
2/22/2011 12:40
PM

Copyright@2007, 2008, 2009: Arnaldo V. Moura

79

Potrebbero piacerti anche