bcc402 algoritmos e programação avançadaalgoritmos e programação avançada prof. marco antonio...

92
BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

Upload: others

Post on 06-Jun-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

BCC402 Algoritmos e Programação AvançadaProf. Marco Antonio M. CarvalhoProf. Túlio Ângelo M. Toffolo2011/1

Page 2: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

2

Avisos

Page 3: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

3

Avisos

Prova no dia 07 de Junho (em 11 dias).

Page 4: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

4

Na aula anterior

• Backtracking.

Page 5: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

5

Na aula de hoje

• Programação Dinâmica.

Page 6: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

6

Programação Dinâmica

• A Programação Dinâmica é uma ferramenta geral muitopoderosa para resolver problemas combinatórios quepossuem elementos com uma certa ordenaçãoesquerda-para-direita– Como strings.

• Uma vez compreendida, torna-se relativamente fácil de ser aplicada.

• Programação Dinâmica parece mágica até que vocêtenha visto exemplos o suficiente– Vamos ver um exemplo clássico de programação

dinâmica então!

Page 7: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

7

Coeficientes Binomiais

• A mais importante classe de contagem são oscoeficientes binomiais (ou binômios de Newton)– Em que conta o número de formas em que

podemos escolher k itens entre n possibilidades;• O que pode ser contado?

– Comitês;– Caminhos em uma grade;– Coeficientes de (a-b)n;– O triângulo de Pascal;– Etc.

)(n

k

Page 8: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

8

Coeficientes Binomiais

• Quantas formas existem para formarmos um comitê com k membros, se temos n pessoas? – A resposta é .)(

n

k

Page 9: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

9

Coeficientes Binomiais

• Quantas formas existem para nos deslocarmosdo canto superior esquerdo de uma grade n×m

até o canto inferior direito, andando apenas para baixo e para a direita?– Cada caminho deve consistir de n+m passos, n

para baixo e m para a direita;– Cada caminho com um conjunto diferente de

passos para baixo é diferente;– Então a quantidade de tais conjuntos ou

caminhos é .)(mn

n

+

Page 10: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

10

Coeficientes Binomiais

• Considere (a+b)n;• Observe que

(a+b)3=1a3+3a2b+3ab2+1b3

• Qual é o coeficiente do termo akbn-k?

– ;

– Porque esta é a contagem da quantidade de formas quepodemos escolher os k termos a dentre as npossibilidades;

– Ou ainda, podemos interpretar este número como sendo a quantidade de vezes em que cada multiplicação ocorre naexpansão da expressão algébrica.

)(n

k

Page 11: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

11

Coeficientes Binomiais

• Certamente você já utilizou o triângulo de Pascal no ensino médio– Cada número é a soma dos dois números

diretamente sobre ele;

Page 12: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

12

Coeficientes Binomiais

• Para quê serve o triângulo de Pascal?– Calcular coeficientes binomiais!– A (n+1)-ésima linha do triângulo nos fornece valores

para 0<=i<=n.– Ou seja, pode ser encontrado no triângulo na linha

n+1 e coluna k

• Lembrando que a primeira coluna é enumerada 0.

• A beleza deste recurso é a forma como ele revelaidentidades interessantes– Como por exemplo, a soma de todos os elementos na

linha n+1 é igual a 2n.

)(n

i

)(n

k

Page 13: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

13

Coeficientes Binomiais

• Como são computados coeficientes binomiais?

• Este método possui um problemacomputacional– Os cálculos intermediários de fatorial podem

causar overflow aritmético mesmo quando o resultado total cabe em um tipo inteiro.

!)!(

!)(

kkn

nn

k

=

Page 14: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

14

Coeficientes Binomiais

• Existe uma maneira mais estávelcomputacionalmente– Utilizar a relação de recorrência implícita na

construção do triângulo de Pascal, ou seja:

)()()(11

1

−−

−+=

n

k

n

k

n

k

Page 15: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

15

Coeficientes Binomiais

• Por quê funciona?

– Considere a possibilidade do n-ésimo elemento aparecer

em um dos subconjuntos de k elementos:

• Se pertencer, podemos completar o subconjunto tomandok-1 elementos dentre os outros n-1;

• Se não pertencer, devemos tomar todos os k elementosdentre os n-1 restantes;

– Não há sobreposição entre estes casos, e todas as possibilidades estão inclusas, ou seja, a soma total incluitodos os k-subconjuntos.

)(n

k

Page 16: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

16

Coeficientes Binomiais

• Como casos base para esta recorrência, temos:

• Vejamos como avaliar esta recorrênciaalgoritmicamente.

1)(

1)(

)(

0

1

=

=

=

k

k

kn

mm

Page 17: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

17

Coeficientes Binomiais

• Pelas propriedades do triângulo, sabemos que:1. O elemento do topo é 1;2. Os elementos das extremidades laterais são 1.

• Vamos construir uma tabela/matriz com esta forma

11

11

11

11

1

Page 18: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

18

Coeficientes Binomiais

• Pela relação de recorrência, sabemos que:1. .

• Ou seja, m[i][j]=m[i-1][j-1]+m[i-1][j];

)()()(11

1

−−

−+=

n

k

n

k

n

k

14641

1331

121

11

1

Page 19: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

19

Coeficientes Binomiais

Page 20: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

20

Coeficientes Binomiais

• Para calcularmos o coeficiente binomial criamosuma tabela quadrada de dimensões n+1;

• Não calcularmos o coeficiente diretamente, antes disto, calculamos os coeficientes anteriores– Construindo a solução gradativamente.

• Para calcularmos o coeficiente bastaria adicionaruma linha e coluna à nossa tabela– Aproveitando os resultados anteriores.

• O fundamento da programação dinâmica é exatamenteeste!

)(n

k

)(n

k

Page 21: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

21

Programação Dinâmica

• Como visto anteriormente, problemas combinatórios nospedem que achemos a melhor solução possível, respeitando algumas restrições;

• O backtracking busca por todas as soluções possíveis e seleciona a melhor– Logo, retorna a resposta correta;– Para problemas grandes, é inviável.

• Algoritmos gulosos fazem sempre a melhor escolha emcada ponto de decisão– Sem provas de corretude, falham em obter a melhor

solução.

Page 22: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

22

Programação Dinâmica

• A programação dinâmica nos fornece umamaneira de projetar algoritmos que: – Sistematicamente exploram todas as

possibilidades (corretude);– Armazena resultados a fim de evitar computação

redundante (eficiência).• Tais algoritmos são definidos por recursividade

– Definem a solução para o problema em termosda solução de problemas menores;

– O que pode até lembrar o backtracking de certaforma.

Page 23: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

23

Programação Dinâmica

• Um possível defeito em uma busca recursiva é a computação redundante, ou seja, a exploraçãoredundante do espaço de busca– Para evitar tal defeito, podemos armazenar

informações sobre a busca;– Por exemplo, porque a busca em largura é finita?

• Porque marcarmos vértices já visitados, para quenão os visitemos novamente.

• Porquê o backtracking é ineficiente?– Porque explora todas as possibilidades, ao invés

de explorar apenas aquelas inéditas.

Page 24: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

24

Programação Dinâmica

• A Programação Dinâmica é uma técnica para acelerarmos algoritmos recursivos– Armazenando resultados parciais.

• O “macete” é perceber que o algoritmo recursivocomputa os mesmos subproblemas repetidamente– Então, a medida que são computados, armazenamos a

resposta, para que, quando surgirem novamente, apenasconsultemos o resultado armazenado.

• Note que apenas depois de certificar-se que o algoritmorecursivo é correto passamos a nos preocupar emacelerá-lo.

Page 25: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

25

Casamento Inexato de Padrões

• Anteriormente vimos o casamento exato de padrões– Dada uma string s e um texto t, verificamos se há alguma

ocorrência exata de s em t.

• Este não é o caso normalmente, o que ocorre na maioriadas vezes é o casamento inexato de padrões– Uma vez que o casamento é inexato, precisamos definir

uma função de custo que nos diga qual é a distânciaentre duas strings

• Ou seja, quantas modificações precisam ser feitas para transformarmos uma string na outra.

Page 26: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

26

Casamento Inexato de Padrões

• Substituições– A troca de um caractere do padrão por um caractere

diferente contido no texto• Por exemplo, “calda” e “cauda”.

• Inserção– A inserção de um caractere no padrão para facilitar o

casamento• Por exemplo, “arco” e “barco”.

• Remoção– A remoção de um caractere do padrão para facilitar o

casamento• Por exemplo, “marco” e “arco”.

Page 27: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

27

Casamento Inexato de Padrões

• Para determinar a similaridade entre strings precisamosatribuir pesos a estas operações de transformação– Atribuindo peso 1 a cada operação nos fornece a

distância de edição;– Embora outros pesos forneçam resultados interessantes.

• Podemos calcular a distância de ediçãocomputacionalmente, através de um algoritmo recursivo;

• Observemos que: – O último caractere de uma string deve ser “casado”,

substituído, inserido ou deletado;– Ignorando o caractere envolvido na última computação,

nos deixa com um par de strings menores.

Page 28: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

28

Casamento Inexato de Padrões

• Se efetuarmos as três operações, teremos 3 pares de strings resultantes– Se soubéssemos qual é o custo em cada

operação, poderíamos simplesmente escolher a mais eficiente, sem efetuar as outras duas;

– Acontece que podemos “aprender” este custo, usando a recursividade.

• Consideremos dois últimos caracteres i e j e seus dois prefixos s e t, respectivamente.

Page 29: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

29

Casamento Inexato de Padrões

• Consideremos ainda– 0: Casamento;– 1: Inserção;– 2: Remoção;– indel(c) é o custo de inserir ou remover o

caractere c• Valor 1 para ambos.

– match(c, d) é o custo de transformar o caracterec no caractere d

• Para a distância de edição, 0 caso c=d, e 1 casocontrário.

Page 30: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

30

Casamento Inexato de Padrões

Page 31: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

31

Casamento Inexato de Padrões

• Este algoritmo guloso é correto, porém, impraticável– Incrivelmente lento para algumas dezenas de caracteres;– Sua complexidade é exponencial, crescendo a 3n

• Claramente são efetuadas computações redundantes;• São possíveis |s|·|t| chamadas recursivas únicas, devido

às combinações de parâmetros (i, j);

• Uma implementação deste algoritmo, acelerado porprogramação dinâmica utiliza uma tabela bidimensionalem que cada uma das |s|·|t| células contém o custo dasolução ótima dos subproblemas– Também há uma célula “pai”, para explicar em que

situação se chega a tal célula.

Page 32: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

32

Casamento Inexato de Padrões

Page 33: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

33

Casamento Inexato de Padrões

• A versão utilizando programação dinâmica possui trêsdiferenças básicas em relação à gulosa:1. Obtém resultados intermediários procurando na tabela,

ao invés de fazer sempre chamadas recursivas;2. Atualiza o campo “pai” (“parent”) de cada célula, o que

permite a reconstrução da sequência posteriormente;3. É “instrumentada”, utilizando a função goal_cell() entre

outras, ao invés de simplesmente retornar um valor. Istopermite aplicação a outros problemas facilmente.

Page 34: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

34

Casamento Inexato de Padrões

• Algumas observações:– O primeiro caractere de uma string é ‘ ’, de

maneira que o primeiro caractere real éarmazenado na posição 1

• A primeira linha e coluna da tabela armazenam a distância de edição em relação a string vazia;

• Para uma string de tamanho i, tal custo é o mesmoque i, inserções ou remoções.

Page 35: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

35

Casamento Inexato de Padrões

Page 36: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

36

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Page 37: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

37

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Page 38: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

38

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 39: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

39

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 40: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

40

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 41: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

41

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 42: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

42

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 43: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

43

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 44: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

44

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 45: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

45

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 46: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

46

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 47: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

47

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 48: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

48

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 49: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

49

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shall not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 50: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

50

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 51: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

51

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Vermelho: Caracteres comparados;Azul: Troca;Verde: Inserção;Preto: Remoção.

Page 52: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

52

Casamento Inexato de Padrões

• Abaixo, um exemplo usando “thou shalt not” e “you should not”.

Page 53: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

53

Casamento Inexato de Padrões

• Esta implementação nos retorna o valor da soluçãoótima, porém, não nos retorna a solução em si– Podemos converter “thou shalt not” em “you should not”

em 5 movimentos, mas qual é a sequência de operaçõesde edição?

• As possíveis soluções são descritas por trajetos natabela– Começando pela posição inicial (0, 0);– Até a posição final (|s|, |t|);– A idéia é seguir o trajeto refazendo as operações de cada

passo• Armazenadas no campo parent de cada célula.

Page 54: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

54

Casamento Inexato de Padrões• Para fazermos isto, partimos da posição final (|s|, |t|), seguindo o

conteúdo do campo parent até uma célula anterior– Repetimos este processo até chegarmos na posição inicial (0,

0).• O campo parent da posição m[i, j] nos diz se a operação em (i, j) foi

substituição (M), inserção (I) ou remoção (D);• A sequência para o nosso exemplo é

DSMMMMMISMSMMMM• Significando:

– Delete o primeiro ‘t’;– Substitua ‘h’ por ‘y’;– Case os próximos 5 caracteres;– Insira ‘o’;– Substitua ‘a’ por ‘u’;– Substitua ‘t’ por ‘d’.

Page 55: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

55

Casamento Inexato de Padrões

Page 56: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

56

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 57: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

57

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 58: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

58

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 59: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

59

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 60: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

60

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 61: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

61

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 62: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

62

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 63: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

63

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 64: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

64

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 65: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

65

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 66: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

66

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 67: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

67

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 68: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

68

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 69: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

69

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 70: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

70

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 71: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

71

Casamento Inexato de Padrões• Reconstruindo o caminho até o início

– M: 0 (i-1, j-1);– I: 1 (i, j-1);;– D: 2 (i-1, j).

Page 72: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

72

Casamento Inexato de Padrões

• “ thou shalt not”• “ you should not”• DSMMMMMISMSMMMM• Significando:

– Delete o primeiro ‘t’;– Substitua ‘h’ por ‘y’;– Case os próximos 5 caracteres;– Insira ‘o’;– Substitua ‘a’ por ‘u’;– Substitua ‘t’ por ‘d’;

Page 73: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

73

Casamento Inexato de Padrões

• Ok, mas para que precisamos das funçõesindel(c), match(c, d), goal_cell() e row_init()?– Já sabemos que seus valores são 1, 0/1, (|s|, |t|)

e 0.

• Realmente esta “infraestrutura” é muito grandepara o problema, mas podemos utilizá-la para resolver casos especiais de casamento inexatode padrões– Basta alterar o conteúdo destas funções.

Page 74: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

74

Substring Matching

• Suponha que desejamos encontrar a melhor ocorrênciade um padrão s em um longo texto t

– O início do casamento pode ser em qualquer posição do texto, não necessariamente no início;

– Também, a posição final não necessariamente é o final do texto.

• Por exemplo, queremos encontrar a ocorrência maissemelhante de “Skiena” em “Skienna, Skena, Skina, …”;

• O código anterior não terá sensibilidade suficiente para nos atender.

Page 75: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

75

Substring Matching

Page 76: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

76

Maior Subsequência Comum

• Nesta variante, estamos interessados em obter a maiorquantidade de caracteres não necessariamentecontíguos mas que aparecem na mesma ordem emduas strings

– Ex.: democrata e republicano.

• Para isto, devemos evitar a substituição de caracteresnão idênticos– Basta tornar o custo de uma substituição maior que uma

inserção somada a uma remoção;– No fim, as posições em que houver casamento indicam os

caracteres envolvidos na maior subsequência comum.

Page 77: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

77

Maior Subsequência Comum

Page 78: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

78

Maior Subsequência Monotônica

• Uma sequência numérica é monotonicamente crescentese o i-ésimo elemento é no mínimo tão grande quando o elemento i-1

• O problema de maior sequência monotônica procurapela menor quantidade de caracteres a seremremovidos de uma string s tal que o que sobre seja umasubsequência monotonicamente crescente– Ex.: “243517698” produz “23568”.

• Na verdade este problema é de maior subsequência comum, em que a segunda string é formada pelaordenação da primeira– Ex.: “243517698” e “123456789””produzem “23568”.

Page 79: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

79

Casamento Inexato de Padrões

• Como vimos, nosso algoritmo para distância de edição simples pode realizar tarefas maisárduas facilmente– A idéia é ter a percepção de que um determinado

problema na verdade é um caso especial de casamento inexato de padrões.

Page 80: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

80

Programação Dinâmica

• A programação dinâmica é aplicável a problemas que possuam as seguintes propriedades:– Subestrutura Ótima

• O problema pode ser dividido sucessivamente, e a combinação das soluções ótimas dos subproblemas corresponde à solução ótima do problema original.

– Superposição de Subproblemas• O espaço de subproblemas é pequeno, e eles se repetem

durante a solução do problema original.

• Além disso, a programação dinâmica é melhor utilizada em algoritmos recursivos.

Page 81: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

81

Programação DinâmicaTópicos de Projeto

• Ao contrário da estratégia dividir e conquistar, o balanceamento ideal dos subproblemas requer o tamanho deles seja não muito distante do tamanho do problema original– De fato, quando eles são menores que o problema original

por um fator multiplicativo, a abordagem se encaixa melhor na estratégia dividir e conquistar.

• A definição da estrutura da tabela em que são armazenadas as soluções é muito importante– A pesquisa de uma entrada e a recuperação da solução

devem ser eficientes.

Page 82: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

82

Programação Dinâmica

• Vantagens:– Economizam computação em problemas que

possuem superposição de subproblemas• Ganho em desempenho.

• Desvantagens:– O número de soluções armazenadas na tabela

pode crescer rapidamente caso o espaço de soluções não seja pequeno

• Exigindo assim muita memória.

Page 83: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

83

Sumário dos Arquivos

• binomial.c: computa coeficientes binomiais usandoprogramação dinâmica;

• bool.h: biblioteca com o tipo bool para C;• editbrute.c: calcula a distância de edição usando força

bruta;• editbrute_exemplo.c: mesmo código anterior, porém,

adaptado para a versão básica do problema;• editdistance.h: contém a estrutura e constantes

utilizadas na distância de edição;• editdistance.c: calcula a distância de edição via

programação dinâmica;• editdistance_exemplo.c: mesmo código anterior,

porém, adaptado para a versão básica do problema;

Page 84: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

84

Outros ExemplosTemos tempo?

Page 85: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

85

Soma de Subconjuntos

• Dado um conjunto de n números ai que somamM, e qualquer K<=M, existe um subconjuntodestes números tal que somem K?– Assumimos n até 1000, mas M ou K menores.

• Podemos usar uma tabela unidimensional m[0 … M], em que m[b] indica se b é um resultadopossível da soma para problemas menores.

Page 86: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

86

Soma de Subconjuntos

Page 87: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

87

Troco de Moedas

• Pense agora que os números ai são moedas, e vocêquer fazer um troco de exatamente K, porém, com o menor número de moedas possível.

• A estrutura de solução do exemplo anterior não muda, apenas modificamos o significado do vetor m

– Agora, m[b] não é 0 ou 1, mas sim exatamente o númerode moedas necessárias para somar K.

• Nota: se você quiser especificar quantas moedas de cada tipo (valor) são utilizadas, transforme o vetor m emuma matriz, em que a soma K é descrita.

Page 88: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

88

Cake Cutting

Page 89: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

89

Soma Máxima Em Uma Linha

• Dado um vetor com n números positivos e negativos, encontre o subvetor com um oumais números consecutivos cuja soma é a maior;– O algoritmo intuitivo é O(n3).

• O algoritmo a seguir é O(n)– Seja m[i] a soma máxima de qualquer subvetor

que termina no elemento a[i]. Então m[i] ésimplesmente max(a[i], m[i-1]+a[i]).

Page 90: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

90

Perguntas?

Page 91: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

91

Na próxima aula

• Práticas.

Page 92: BCC402 Algoritmos e Programação AvançadaAlgoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 2 Avisos 3 Avisos Prova no dia

92

FIM