Você está na página 1de 143

Projeto e Anlise de Algoritmos Paradigmas de Projeto de Algoritmos

Antonio Alfredo Ferreira Loureiro


loureiro@dcc.ufmg.br http://www.dcc.ufmg.br/~loureiro

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

Paradigmas de projeto de algoritmos


Induo Recursividade Tentativa e erro Diviso e conquista Balanceamento Programao dinmica Algoritmos gulosos Algoritmos aproximados

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

Princpio da induo matemtica (fraca)


Seja P (n) um predicado denido para os inteiros n, e seja n0 um inteiro xo. Suponha que as duas armaes abaixo sejam verdadeiras: 1. P (n0) V. 2. Para todos inteiros k n0, se P (k) V ento P (k + 1) V. Logo, a armao para todos inteiros n V.

n0, P (n)

P(n)

n0
UFMG/ICEx/DCC PAA

Inteiros

Paradigmas de Projeto de Algoritmos

Princpio da induo matemtica


Tcnica aparece pela primeira vez no trabalho do italiano Francesco Maurolico em 1575. No sculo XVII, Pierre de Fermat e Blaise Pascal usam essa tcnica em seus trabalhos. Fermat d o nome de mtodo do descendente innito. Em 1883, Augustus De Morgan descreve o processo cuidadosamente e d o nome de induo matemtica. Tcnica extremamente importante para a Cincia da Computao.
Para visualizar a idia da induo matemtica, imagine uma coleo de domins colocados numa seqncia (formao) de tal forma que a queda do primeiro domin fora a queda do segundo, que fora a queda do terceiro, e assim sucessivamente, at todos os domins carem.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

Princpio da induo matemtica (fraca)


A prova de uma armao por induo matemtica feita em dois passos: 1. Passo base: provado que P (n0) V para um dado n0 especco. 2. Passo indutivo: provado que para todos inteiros k n0, se P (k) V ento P (k + 1) V. O passo indutivo pode ser escrito formalmente como: 8 inteiros k n0, se P (k) ento P (k + 1)

Para provar o passo indutivo deve-se: supor que P (k) V, onde k um elemento especco mas escolhido arbitrariamente de tal forma que seja maior ou igual a n0. provar que P (k + 1) V.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

Princpio da induo matemtica (fraca)


Este princpio pode ser expresso pela seguinte regra de inferncia: [P (n0) ^ 8k(P (k) ! P (k + 1))] ! 8nP (n).

P(n)

...
P (n 0) P (n 1) P (n 2) P (k ) P (k+1)
Inteiros

Numa prova por induo matemtica no assumido que P (k) verdadeiro para todos os inteiros! mostrado que se for assumido que P (k) verdadeiro, ento P (k + 1) tambm verdadeiro.

Os prximos 10 exemplos ilustram o uso do Princpio da Induo Matemtica e esto apresentados aqui para estudo e referncia.
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

Princpio da induo matemtica Exemplo 1


Prove que para todos inteiros n 1, n(n + 1) 2

1 + 2 + ... + n = Prova (por induo matemtica):

1. Passo base: P (n0) = P (1): Para n0 = 1, 1 = 1(1+1) = 1 e a frmula 2 verdadeira para n0 = 1. 2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser verdadeira para n = k + 1, i.e., P (k) ! P (k + 1). Suponha que a frmula seja verdadeira para n = k, i.e., k(k + 1) P (k ) : 1 + 2 + . . . + k = 2 para algum inteiro k 1. [hiptese indutiva]
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

Princpio da induo matemtica Exemplo 1


Deve-se mostrar que P (k + 1) : 1 + 2 + . . . + (k + 1) = Sabe-se que 1 + 2 + . . . + k + (k + 1) = k(k + 1) + (k + 1) 2 k(k + 1) 2(k + 1) = + 2 2 k 2 + 3k + 2 = 2 (k + 1)(k + 2) = 2 (k + 1)(k + 2) 2

[Isto era o que devia ser provado.]

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

Princpio da induo matemtica Exemplo 2


Prove que para todos inteiros n 0, n(n + 2) 2 E RRADO !

0 + 1 + 2 + ... + n = Prova (por induo matemtica):

1. Passo base: P (n0) = P (0): Para n0 = 0, 0 = 0(0+2) = 0 e a frmula 2 verdadeira para n0 = 0. 2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser verdadeira para n = k + 1, i.e., P (k) ! P (k + 1). Suponha que a frmula seja verdadeira para n = k, i.e., k(k + 2) k 2 + 2k P (k ) : 0 + 1 + 2 + . . . + k = = 2 2 para algum inteiro k 0. [hiptese indutiva]
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

Princpio da induo matemtica Exemplo 2


Deve-se mostrar que (k + 1)(k + 3) k 2 + 4k + 3 P (k + 1) : 0 + 1 + 2 + . . . + (k + 1) = = 2 2 Sabe-se que k 2 + 2k 0 + 1 + 2 + . . . + k + (k + 1) = + (k + 1) 2 k2 + 2k + 2(k + 1) = 2 k 2 + 4k + 2 = 2
[Assim, no foi possvel derivar a concluso a partir da hiptese. Isto signica que o predicado original falso.]

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

10

Princpio da induo matemtica Exemplo 3


Prove que P (n) : para todos inteiros n
n X

rn+1 i r = r

1 1

i=0

0 e para todos nmeros reais r, r 6= 1.

Prova (por induo matemtica):


0+1 1 =1 1. Passo base: P (n0) = P (0): Para n0 = 0, r 0 = 1 = r r 1 1 = r r 1 e a frmula verdadeira para n0 = 0.

2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser verdadeira para n = k + 1, i.e., P (k) ! P (k + 1).

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

11

Princpio da induo matemtica Exemplo 3


Pk i = rk+1 1 , para k r 0. [hiptese indutiva] i=0 r 1 P +1 i rk+2 1 Deve-se mostrar que P (k + 1) : k r = i=0 r 1

P (k ) :

k +1 X i=0

ri = =

i=0 rk+1

k X

ri + r k+1 1 1 + rk+1

rk+1 1 rk+1(r 1) = + r 1 r 1 rk+1 1 + r k+2 r k+1 = r 1 rk+2 1 = r 1

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

12

Princpio da induo matemtica Exemplo 4


Prove que P (n) : 22n para n 1. 1 divisvel por 3,

Prova (por induo matemtica): 1. Passo base: P (n0) = P (1): Para n0 = 1, 221 por 3. 1 = 3 que divisvel

2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser verdadeira para n = k + 1, i.e., P (k) ! P (k + 1).

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

13

Princpio da induo matemtica Exemplo 4


P (k) : 22k 1 divisvel por 3. [hiptese indutiva] Deve-se mostrar que P (k + 1) : 22(k+1) 1 divisvel por 3. 22(k+1) 1 = 22k+2 = 22k 22 = 22k 4 1 1 1 1 1)

= 22k (3 + 1) que divisvel por 3.

= 22k 3 + (22k

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

14

Princpio da induo matemtica Exemplo 5


Prove que P (n) : 20 + 21 + 22 + . . . + 2n = 2n+1 para n 0. 1,

Prova (por induo matemtica): 1. Passo base: P (n0) = P (0): Para n0 = 20 = 1, 21 1 = 1.

2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser verdadeira para n = k + 1, i.e., P (k) ! P (k + 1).

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

15

Princpio da induo matemtica Exemplo 5


P (k) : 20 + 21 + 22 + . . . + 2k = 2k+1 1, para k 0. [hiptese indutiva] 1

Deve-se mostrar que P (k + 1) : 20 + 21 + 22 + . . . + 2k+1 = 2k+2 20 + 21 + 22 + . . . + 2k + 2k+1 = (2k+1 = 2 2k+1 = 2k+2 1) + 2k+1 1 1

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

16

Princpio da induo matemtica Exemplo 6


Prove que P (n) : H2n para n 1+n 2,

0, onde Hj representa o nmero harmnico, que denido por:


1 + . . . + 1. Hj = 1 + 1 + 2 3 j

Prova (por induo matemtica): 1. Passo base: P (n0) = P (0): Para n0 = 0, temos H20 = H1 = 1 1+0 2.

2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser verdadeira para n = k + 1, i.e., P (k) ! P (k + 1).

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

17

Princpio da induo matemtica Exemplo 6


P (k) : H2k
k , para k 1+2

0. [hiptese indutiva] 1 + k+1 2

Deve-se mostrar que P (k + 1) : H2k+1


H2k+1 = 1+

1 1 1 1 1 1 + + ... + k + k + k + . . . + k+1 2 3 2 2 +1 2 +2 2 1 1 1 + + . . . + 2k + 1 2k + 2 2k+1

[Denio de nmero harmnico.]

= H2k +

[Denio de nmero harmnico.]

k 1+ 2 k 1+ 2

[Hiptese indutiva e existem 2k termos, cada um pelo menos 1/2k+1 .]

+ 2k 1 2

1 2k+1

1+

k+1 . 2
PAA

UFMG/ICEx/DCC

Paradigmas de Projeto de Algoritmos

18

Princpio da induo matemtica Exemplo 7


Seja a seqncia a1, a2, a3, . . . denida como a1 = 2 ak = 5ak 1, k Prove que an = 2 5n 1 para n 1. 2

Prova (por induo matemtica): 1. Passo base: P (n0) = P (1): Para n0 = 1, 2 51 1 = 2 e a1 = 2. Logo, a frmula vlida para n = 1. 2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser verdadeira para n = k + 1, i.e., P (k) ! P (k + 1).
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

19

Princpio da induo matemtica Exemplo 7


P (k) : ak = 2 5k 1. [hiptese indutiva] Deve-se mostrar que P (k + 1) : ak+1 = 2 5(k+1) 1 = 2 5k . ak+1 = 5 a(k+1) 1 = 5 ak

= 5 (2 5k 1) = 2 (5 5k 1) = 2 5k

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

20

Princpio da induo matemtica Exemplo 8


Prove que para todos os inteiros n 3 P (n): 2n + 1 < 2n Prova (por induo matemtica): 1. Passo base: P (n0) = P (3). Para n0 = 3, 2 3 + 1 < 23. Logo, a frmula vlida para n0 = 3. 2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser verdadeira para n = k + 1, i.e., P (k) ! P (k + 1).

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

21

Princpio da induo matemtica Exemplo 8


P (k): 2k + 1 < 2k , para k 3. [hiptese indutiva] Deve-se mostrar que P (k + 1): 2(k + 1) + 1 < 2k+1.
2k + 2 + 1 = (2k + 1) + 2 = (2k + 1) + 2 < 2k + 2 2(k + 1) + 1 < 2 + 2 < 2k+1
k ?

Se puder ser mostrado que 2k + 2 < 2k+1 ento o predicado P (k + 1) verdadeiro. 2k + 2 < 2k+1 2 < 2k+1 2 < 2k (2 2 < 2k 1 < 2k Em particular, a inequao (1 < 2k
UFMG/ICEx/DCC PAA

? ? ? ?

2k 1) 2.

, que verdade para k

1)

vlida para k

3. Assim, P (k + 1) V.
22

Paradigmas de Projeto de Algoritmos

Princpio da induo matemtica Exemplo 9


Prove que para todos os inteiros n P (n): n3 Prova (por induo matemtica): 1. Passo base: P (n0) = P (1). Para n0 = 1, 13 1 = 0 divisvel por 3. 1 n divisvel por 3.

Logo, a frmula vlida para n0 = 3. 2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser verdadeira para n = k + 1, i.e., P (k) ! P (k + 1).

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

23

Princpio da induo matemtica Exemplo 9


P (k): k3 k divisvel por 3, para k 1. [hiptese indutiva] Deve-se mostrar que P (k + 1): (k + 1)3 (k + 1) divisvel por 3, para k 1. (k + 1)3 (k 3 (k + 1) = (k + 1) = (k3 + 3k2 + 3k + 1) k) + 3(k2 + k)

O primeiro termo divisvel por 3 (hiptese indutiva) e o segundo tambm. Como a soma de dois nmeros divisveis por 3 um nmero divisvel por 3, ento o predicado P (k + 1) V.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

24

Princpio da induo matemtica Exemplo 10


Seja o inteiro n 1. Mostre que qualquer regio quadrada de tamanho 2n 2n, com um quadrado removido, a regio restante pode ser preenchida com peas no formato L, como mostrado abaixo.

Nota: A pea no formato L constituda por trs quadrados de tamanho 1 1.

Prove que para todos os inteiros n 1, P (n): Qualquer regio quadrada de tamanho 2n 2n, com um quadrado removido, a regio restante pode ser preenchida com peas no formato L.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

25

Princpio da induo matemtica Exemplo 10


Prova (por induo matemtica): 1. Passo base: P (n0) = P (1). P(1) V j que uma regio quadrada de tamanho 2 2, com um quadrado removido, a regio restante pode se preenchida com peas no formato L, como mostrado abaixo.

2. Passo indutivo: se a frmula verdadeira para n = k ento deve ser verdadeira para n = k + 1, i.e., P (k) ! P (k + 1).

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

26

Princpio da induo matemtica Exemplo 10


P (k): Qualquer regio quadrada de tamanho 2k 2k , com um quadrado removido, a regio restante pode ser preenchida com peas no formato L. [hiptese indutiva] Deve-se mostrar P (k + 1): Qualquer regio quadrada de tamanho 2k+1 2k+1 , com um quadrado removido, a regio restante pode ser preenchida com peas no formato L. Considere uma regio quadrada de tamanho 2k+1 2k+1 , com um quadrado removido. Divida essa regio em quatro regies de tamanho 2k 2k como mostrado abaixo. Temos trs regies 2k 2k com nenhum quadrado removido e uma regio 2k 2k com um quadrado removido. Ou seja, a regio 2k+1 2k+1 possui apenas um quadrado removido. Pela hiptese indutiva, a regio 2k 2k , com um quadrado removido, pode ser preenchida com peas no formato L. O problema passa a ser como a mesma hiptese indutiva pode ser aplicada s outras trs regies.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

27

Princpio da induo matemtica Exemplo 10


Temporariamente remova um quadrado de cada regio 2k 2k que est completa como mostrado na gura abaixo esquerda. Pela hiptese indutiva cada uma dessas trs regies 2k 2k pode ser preenchida com peas no formato L. No entanto, para resolvermos o problema da pea removida em cada uma dessas trs regies basta colocarmos uma pea L exatamente sobre esses trs buracos como mostrado na gura abaixo direita.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

28

Princpio da induo matemtica Exemplo 10


Assim, uma regio quadrada de tamanho 2k+1 2k+1 , com um quadrado removido, a regio restante pode ser preenchida com peas no formato L, como mostrado na gura abaixo.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

29

Princpio da induo matemtica (forte)


Seja P (n) um predicado que denido para inteiros n, e seja a e b inteiros xos, sendo a b. Suponha que as duas armaes seguintes sejam verdadeiras: 1. P (a), P (a + 1), . . . , P (b) so V. (Passo base) 2. Para qualquer inteiro k b, se P (i) V para a i < k ento P (k) V, i.e., P (i) ! P (k). Logo, a armao para todos inteiros n a, P (n) V. (A suposio que P (i) V para a i < k chamada de hiptese indutiva.)
Passo Base

b P (i )
Hipotese Indutiva

Inteiros

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

30

Princpio da induo matemtica (forte): Exemplo 11


Seja a sequncia a1, a2, a3, . . . denida como a1 = 0 a2 = 2 Prove que an par, para n ak = 3 abk/2c + 2, k 1. 3

Prova (por induo matemtica): 1. Passo base: Para n = 1 e n = 2 a propriedade vlida j que a1 = 0 e a 2 = 2. 2. Passo indutivo: Vamos supor que ai par para todos inteiros i, 1 i < k.
[hiptese indutiva]

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

31

Princpio da induo matemtica (forte): Exemplo 11


Se a propriedade vlida para 1 i < k, ento vlida para k, ou seja, ak par [o que deve ser mostrado]. Pela denio de a1, a2, a3, . . . ak = 3 abk/2c + 2, k 3

O termo abk/2c par pela hiptese indutiva j que k 3 e 1 bk/2c < k. Desta forma, 3 abk/2c par e 3 abk/2c + 2 tambm par, o que mostra que ak par.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

32

Induo matemtica e algoritmos


til para provar asseres sobre a correo e a ecincia de algoritmos. Consiste em inferir uma lei geral a partir de instncias particulares. Seja T um teorema que tenha como parmetro um nmero natural n. Para provar que T vlido para todos os valores de n, provamos que: 1. T vlido para n = 1; [PASSO BASE ] 2. Para todo n > 1, [PASSO INDUTIVO ] se T vlido para n, ento T vlido para n + 1. Provar a condio 2 geralmente mais fcil que provar o teorema diretamente (podemos usar a assero de que T vlido para n). As condies 1 e 2 implicam T vlido para n = 2, o que junto com a condio 2 implica T tambm vlido para n = 3, e assim por diante.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

33

Limite superior de equaes de recorrncia


A soluo de uma equao de recorrncia pode ser difcil de ser obtida. Nesses casos, pode ser mais fcil tentar advinhar a soluo ou obter um limite superior para a ordem de complexidade. Advinhar a soluo funciona bem quando estamos interessados apenas em um limite superior, ao invs da soluo exata. Mostrar que um certo limite existe mais fcil do que obter o limite. Por exemplo:

T (2n) 2T (n) + 2n T (2) = 1,

1,

denida para valores de n que so potncias de 2. O objetivo encontrar um limite superior na notao O, onde o lado direito da desigualdade representa o pior caso.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

34

Induo matemtica para resolver equao de recorrncia


T (2) = 1, T (2n) 2T (n) + 2n denida para valores de n que so potncias de 2. Procuramos f (n) tal que T (n) = O(f (n)), mas fazendo com que f (n) seja o mais prximo possvel da soluo real para T (n) (limite assinttico rme). Vamos considerar o palpite f (n) = n2. Queremos provar que T (n) f (n) = O(f (n)) utilizando induo matemtica em n. 1,

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

35

Induo matemtica para resolver equao de recorrncia


Prove que T (n) f (n) = O(f (n)), para f (n) = n2 , sendo T (2) = 1, T (2n) 2T (n) + 2n 1,

denida para valores de n que so potncias de 2.

Prova (por induo matemtica): 1. Passo base: T (n0 ) = T (2): Para n0 = 2, T (2) = 1 f (2) = 4, e o passo base V. 2. Passo indutivo: se a recorrncia verdadeira para n ento deve ser verdadeira para 2n, i.e., T (n) ! T (2n) (lembre-se que n uma potncia de 2; conseqentemente o nmero seguinte a n 2n). Reescrevendo o passo indutivo temos: Predicado(n) ! Predicado(2n) (T (n) f (n)) ! (T (2n) f (2n)) T (2n) 2T (n) + 2n 1 2n2 + 2n 1 + 2n 2 2n + 2n 2n2
?

[Denio da recorrncia] [Pela hiptese indutiva podemos substituir T (n)]

1 < (2n)2 [A concluso verdadeira?] 1 < 4n2 [Sim!]

Essa ltima inequao o que queremos provar. Logo, T (n) = O(n2 ).


UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

36

Induo matemtica para resolver equao de recorrncia


Vamos tentar um palpite menor, f (n) = cn, para alguma constante c. Queremos provar que T (n) f (n) = cn = O(f (n)) utilizando induo matemtica em n.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

37

Induo matemtica para resolver equao de recorrncia


Prove que T (n) f (n) = O(f (n)), para f (n) = cn, sendo T (2) = 1, T (2n) 2T (n) + 2n 1,

denida para valores de n que so potncias de 2.

Prova (por induo matemtica): 1. Passo base: T (n0 ) = T (2): Para n0 = 2, T (2) = 1 f (2) = 2c, e o passo base V. 2. Passo indutivo: se a recorrncia verdadeira para n ento deve ser verdadeira para 2n, i.e., T (n) ! T (2n). Reescrevendo o passo indutivo temos: Predicado(n) ! Predicado(2n) (T (n) f (n)) ! (T (2n) f (2n)) (T (n) cn)) ! (T (2n) 2cn) T (2n)
UFMG/ICEx/DCC

2T (n) + 2n 1 [Denio da recorrncia] 2cn + 2n 1 [Pela hiptese indutiva podemos substituir T (n)] 2cn + (2n 1) 2cn + 2n 1 > 2cn [A concluso (T (2n) 2cn) no vlida]
PAA

Paradigmas de Projeto de Algoritmos

38

Induo matemtica para resolver equao de recorrncia


Logo: a funo f (n) = cn cresce mais lentamente que T (n); T (n) est entre cn e n2, mais especifamente; e T (n) 6 f (n) = cn.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

39

Induo matemtica para resolver equao de recorrncia


Vamos tentar uma funo entre n e n2, como, por exemplo, f (n) = n log n. Queremos provar que T (n) f (n) = n log n = O(f (n)) utilizando induo matemtica em n.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

40

Induo matemtica para resolver equao de recorrncia


Prove que T (n) f (n) = O(f (n)), para f (n) = n log n, sendo T (2) = 1, T (2n) 2T (n) + 2n 1,

denida para valores de n que so potncias de 2.

Prova (por induo matemtica): 1. Passo base: T (n0 ) = T (2): Para n0 = 2, T (2) = 1 f (2) = 2 log 2, e o passo base V. 2. Passo indutivo: se a recorrncia verdadeira para n ento deve ser verdadeira para 2n, i.e., T (n) ! T (2n). Reescrevendo o passo indutivo temos: Predicado(n) ! Predicado(2n) (T (n) f (n)) ! (T (2n) f (2n)) (T (n) n log n)) ! (T (2n) 2n log 2n) T (2n) 2T (n) + 2n 1 2n log n + 2n 1 2n log n + 2n 2n log n + 2n
PAA

[Denio da recorrncia] [Podemos substituir T (n)]


?

1 < 2n log 2n [A concluso verdadeira?] 1 < 2n log n + 2n [Sim!]


41

UFMG/ICEx/DCC

Paradigmas de Projeto de Algoritmos

Induo matemtica para resolver equao de recorrncia


Para o valor de f (n) = n log n, a diferena entre as frmulas de apenas 1. De fato, T (n) = n log n n + 1 a soluo exata de T (n) = 2T ( n 2) + n T (1) = 0 que descreve o comportamento do algoritmo de ordenao Mergesort. 1

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

42

Induo matemtica e algoritmos Comentrios nais


Induo uma das tcnicas mais poderosas da Matemtica que pode ser aplicada para provar asseres sobre a correo e a ecincia de algoritmos. No caso de correo de algoritmos, comum tentarmos identicar invariantes para laos. Induo pode ser usada para derivar um limite superior para uma equao de recorrncia.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

43

Recursividade
Um procedimento que chama a si mesmo, direta ou indiretamente, dito ser recursivo. Recursividade permite descrever algoritmos de forma mais clara e concisa, especialmente problemas recursivos por natureza ou que utilizam estruturas recursivas. Por exemplo, rvore binria de pesquisa: Todos os registros com chaves menores esto na sub-rvore esquerda; Todos os registros com chaves maiores esto na sub-rvore direita.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

44

Recursividade
Algoritmo para percorrer todos os registros em ordem de caminhamento central: 1. Caminha na sub-rvore esquerda na ordem central; 2. Visita a raiz; 3. Caminha na sub-rvore direita na ordem central. No caminhamento central, os ns so visitados em ordem lexicogrca das chaves.
C ENTRAL(p) 1 if p 6= nil 2 then C ENTRAL(p".esq ) 3 Visita n 4 C ENTRAL(p".dir )

Faz algum processamento

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

45

Implementao de recursividade
Usa-se uma pilha para armazenar os dados usados em cada chamada de um procedimento que ainda no terminou. Todos os dados no globais vo para a pilha, registrando o estado corrente da computao. Quando uma ativao anterior prossegue, os dados da pilha so recuperados. No caso do caminhamento central: Para cada chamada recursiva, o valor de p e o endereo de retorno da chamada recursiva so armazenados na pilha. Quando encontra p=nil o procedimento retorna para quem chamou utilizando o endereo de retorno que est no topo da pilha.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

46

Problema de terminao em procedimentos recursivos


Procedimentos recursivos introduzem a possibilidade de iteraes que podem no terminar: Existe a necessidade de considerar o problema de terminao. fundamental que a chamada recursiva a um procedimento P esteja sujeita a uma condio B , a qual se torna no-satisfeita em algum momento da computao. Esquema para procedimentos recursivos: composio C de comandos Si e P. P if B then C [Si, P ] Para demonstrar que uma repetio termina, dene-se uma funo f (x), sendo x o conjunto de variveis do programa, tal que: 1. f (x) 0 implica na condio de terminao; 2. f (x) decrementada a cada iterao.
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

47

Problema de terminao em procedimentos recursivos


Uma forma simples de garantir terminao associar um parmetro n para P (no caso por valor) e chamar P recursivamente com n 1. A substituio da condio B por n > 0 garante terminao. P if n > 0 then P [Si, P (n 1)]

necessrio mostrar que o nvel mais profundo de recurso nito, e tambm possa ser mantido pequeno, pois cada ativao recursiva usa uma parcela de memria para acomodar as variveis.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

48

Quando no usar recursividade


Nem todo problema de natureza recursiva deve ser resolvido com um algoritmo recursivo. Estes podem ser caracterizados pelo esquema P if B then (S, P ). Tais programas so facilmente transformveis em uma verso no recursiva P (x := x0; while B do S ).

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

49

Exemplo de quando no usar recursividade


Clculo dos nmeros de Fibonacci f0 = 0, f1 = 1, fn = fn 1 + fn 2 , Soluo:
p

8n ) n ],

2.

1 fn = p [ n 5

onde

5+1 1, 618 a razo de ouro. 2

O procedimento recursivo (F IBONACCI R EC) obtido diretamente da equao o seguinte:


F IBONACCI R EC(n) 1 if n < 2 2 then F IBONACCI R EC 3 else F IBONACCI R EC
UFMG/ICEx/DCC

n F IBONACCI R EC(n
PAA

1) + F IBONACCI R EC(n

2)
50

Paradigmas de Projeto de Algoritmos

Exemplo de quando no usar recursividade


O programa extremamente ineciente porque recalcula o mesmo valor vrias vezes. A complexidade de espao para calcular fn O( n). A complexidade de tempo para calcular fn, considerando como medida de complexidade o nmero de adies, tambm O( n).

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

51

Verso iterativa do clculo de Fibonacci


F IBONACCI I TER(n) 1 2 3 4 5 6 7 Variveis auxiliares: Aux , k, Fant , F Fant 0 F 1 for k 2 to n do Aux F + Fant Fant F F Aux F IBONACCI I TER F

O programa tem complexidades de tempo O(n) e de espao O(1). Deve-se evitar recursividade quando existe uma soluo iterativa. Comparao das verses recursiva e iterativa:
n Recursiva Iterativa
UFMG/ICEx/DCC

20 1s 1/3 ms

30 2 min 1/2 ms

50 21 dias 3/4 ms

100 109 anos 1,5 ms


52

PAA

Paradigmas de Projeto de Algoritmos

Recursividade na modelagem de problemas Strings com uma certa propriedade (1)


Seja = {0, 1}. Determine quantos strings existem em 0 . . . 3 que no contm o padro 11. Nota: i o conjunto de todos os strings de tamanho i sobre . Logo, temos que: Tamanho 0 1 2 3 Strings " 0, 1 00, 01, 10 000, 001, 010, 100, 101 Tamanho 0 1 2 3 # Strings 1 2 3 5

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

53

Recursividade na modelagem de problemas Strings com uma certa propriedade (2)


Quantos elementos existem em k ? Idia: Suponha que o nmero de strings k que no contm o padro 11 seja conhecido. Use esse fato para determinar o nmero de strings de tamanho k que no contm 11 em funo de strings menores que no contm 11.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

54

Recursividade na modelagem de problemas Strings com uma certa propriedade (3)


Dois casos a considerar em funo do smbolo mais esquerda no string: 0: os k 1 smbolos podem ser qualquer seqncia sobre onde 11 no aparece; 1: os dois smbolos mais esquerda no podem ser 11 e sim 10. Logo, os k 2 smbolos podem ser qualquer seqncia sobre onde 11 no aparece. Os dois casos geram dois subconjuntos mutuamente disjuntos, representados pela primeira equao de recorrncia abaixo: (1) (2)
(

sk s0 s1

= = =

sk 1 + sk 2 1 2

Equao de recorrncia Condies iniciais

Termos da Srie de Fibonacci!

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

55

Funo denida recursivamente (1)


Uma funo dita ser denida recursivamente se ela refere-se a si mesma. Funes recursivas tm um papel fundamental em teoria da computao. Exemplo: Funo 91 de McCarthy.
(
A funo 91 de McCarthy uma funo recursiva que retorna 91 para todos os inteiros n 100 e retorna n 10 para n > 100. Essa funo foi proposta pelo cientista da computao John McCarthy, ganhador do ACM Turing Award de 1971, responsvel por cunhar o termo Inteligncia Articial.

M (n) =

n 10 se n > 100 M (M (n + 11)) se n 100

M (99) = M (M (110)) = M (100) = M (M (111)) = M (101) = 91

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

56

Funo denida recursivamente (2) Funo de Ackermann


Matemtico e lgico alemo (18961962), principal formulador do desenvolvimento do sistema lgico conhecido como o clculo de epsilon, originalmente devido a David Hilbert (18621943), que se tornaria a base da lgica de Bourbaki e da teoria dos jogos.

A(0, n) = n + 1 A(m, 0) = A(m A(m, n) = A(m 1, 1) 1, A(m, n 1))

A(1, 2) = A(0, A(1, 1)) = A(0, A(0, A(1, 0))) = A(0, A(0, A(0, 1))) = A(0, A(0, 2)) = A(0, 3) = 4

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

57

Funo denida recursivamente (3) Funo de Ackermann


Essa funo possui uma taxa de crescimento impressionante: A(4, 3) = A(3, 265536 3)

Funo importante em Cincia da Computao que est relacionada com computabilidade.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

58

Funo denida recursivamente (4) Funo de Ackermann


A funo de Ackermann pode ser representada por uma tabela innita.
(m, n) 0 1 2 3 4 5 6 0 1 2 3 5 13 65533 A(5, 1) 1 2 3 5 13 65533 A(4, 65533) A(5, A(5, 1)) 2 3 4 7 29 265536 3 A(4, A(5, 1)) A(5, A(6, 1)) 3 4 5 9 61 A(3, 265536 3) A(4, A(5, 2)) A(5, A(6, 2)) 4 5 6 11 125 A(3, A(4, 3)) A(4, A(5, 3)) A(5, A(6, 3)) A(m, n) n+1 n+2 2n + 3 8 2n 3

Os valores da funo de Ackermann crescem muito rapidamente: A(4, 2) maior que o nmero de partculas do universo elevado a potncia 200. A(5, 2) no pode ser escrito como uma expanso decimal no universo fsico. Alm da linha 4 e coluna 1, os valores s podem ser expressos usando a prpria notao da funo.
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

59

Funo recursiva que no bem denida


Seja a funo G : Z+ ! Z. Para todos inteiros n G(n) =
8 > > 1 > > <

1:

se n = 1,

A funo G bem denida? No! G(1) = 1

n) 1 + G ( se n par, 2 > > > > : G(3n 1) se n mpar e n > 1.

G(2) = 1 + G(1) = 1 + 1 = 2 G(3) = G(8) = 1 + G(4) = 1 + (1 + G(2)) = 1 + (1 + 2) = 4 G(4) = 1 + G(2) = 1 + 2 = 3 G(5) = G(14) = 1 + G(7) = 1 + G(20) = 1 + (1 + G(10)) = 1 + (1 + (1 + G(5))) = 3 + G(5)
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

60

Funo recursiva que no sabe se bem denida


Seja a funo H : Z+ ! Z. Para todos inteiros n H (n) =
8 > > 1 > > <

1:

se n = 1,

n) 1 + H ( se n par, 2 > > > > : H (3n + 1) se n mpar e n > 1.

A funo H bem denida? No se sabe! A funo computvel para todos inteiros n, 1 n < 109.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

61

Recursividade Comentrios nais


Tcnica bastante adequada para expressar algoritmos que so denidos recursivamente. No entanto, deve ser usada com muito cuidado. Na maior parte dos casos funciona como uma tcnica conceitual ao invs de uma tcnica computacional. Algoritmos recursivos so normalmente modelados por uma equao de recorrncia. Ao se fazer a anlise de um algoritmo recursivo, deve-se tambm analisar o crescimento da pilha.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

62

Algoritmos tentativa e erro (Backtracking )


Tentativa e erro: decompor o processo em um nmero nito de sub-tarefas parciais que devem ser exploradas exaustivamente. O processo de tentativa gradualmente constri e percorre uma rvore de sub-tarefas. Algoritmos tentativa e erro no seguem uma regra xa de computao: Passos em direo soluo nal so tentados e registrados. Caso esses passos tomados no levem soluo nal, eles podem ser retirados e apagados do registro.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

63

Algoritmos tentativa e erro (Backtracking )


Quando a pesquisa na rvore de solues cresce rapidamente necessrio usar algoritmos aproximados ou heursticas que no garantem a soluo tima mas so rpidas. Algoritmos aproximados: Algoritmos usados normalmente para resolver problemas para os quais no se conhece uma soluo polinomial. Devem executar em tempo polinomial dentro de limites provveis de qualidade absoluta ou assinttica. Heurstica: Algoritmo que tem como objetivo fornecer solues sem um limite formal de qualidade, em geral avaliado empiricamente em termos de complexidade (mdia) e qualidade das solues. projetada para obter ganho computacional ou simplicidade conceitual, possivelmente ao custo de preciso.
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

64

Tentativa e erro: Passeio do cavalo


Tabuleiro com n n posies: cavalo se movimenta segundo regras do xadrez. Problema: partindo da posio (x0 , y0 ), encontrar, se existir, um passeio do cavalo que visita todos os pontos do tabuleiro uma nica vez. Tenta um prximo movimento: T ENTA 1 Inicializa seleo de movimentos 2 repeat 3 Seleciona prximo candidato ao movimento 4 if aceitvel 5 then Registra movimento 6 if tabuleiro no est cheio 7 then Tenta novo movimento 8 if no bem sucedido 9 then Apaga registro anterior 10 until (movimento bem sucedido) _ (acabaram-se candidatos ao movimento)

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

65

Tentativa e erro: Passeio do cavalo


O tabuleiro pode ser representado por uma matriz n n. A situao de cada posio pode ser representada por um inteiro para recordar o histrico das ocupaes: t[x, y ] = 0, campo hx, y i no visitado; t[x, y ] = i, campo hx, y i visitado no i-simo movimento, 1 i n2.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

66

Tentativa e erro: Passeio do cavalo Regras do xadrez para o movimento do cavalo


2 1 3 4

2Dir e 1Cima

1Dir e 2Cima

1Esq e 2Cima

2Esq e 1Cima

5 6 7

2Esq e 1Baixo

1Esq e 2Baixo

1Dir e 2Baixo

2Dir e 1Baixo

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

67

Implementao do passeio do cavalo


PASSEIO D O C AVALO(n) Parmetro: n (tamanho do lado do tabuleiro) Variveis auxiliares: i, j t[1. .n, 1. .n] q s h[1. .8], v [1. .8] s {1, 2, 3, 4, 5, 6, 7, 8} h[1. .8] [2, 1, 1, 2, 2, 1, 1, 2] v [1. .8] [1, 2, 2, 1, 1, 2, 2, 1] for i 1 to n do for j 1 to n do t[i, j ] 0 t[1, 1] 1 T ENTA (2, 1, 1, q ) if q then print Soluo else print No h soluo

1 2 3 4 5 6 7 8 9 10 11

Contadores Tabuleiro de n n Indica se achou uma soluo Movimentos identicados por um n Existem oito movimentos possveis Conjunto de movimentos Movimentos na horizontal Movimentos na vertical Inicializa tabuleiro

Escolhe uma casa inicial do tabuleiro Tenta o passeio usando backtracking Achou uma soluo?

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

68

Implementao do passeio do cavalo


T ENTA(i, x, y, q ) Parmetros: i (i-sima casa); x, y (posio no tabuleiro); q (achou soluo?) Variveis auxiliares: xn, yn, m, q 1 m 0 repeat m m+1 q1 false xn x + h[m] yn y + v [m] if (xn 2 s) ^ (yn 2 s) then if t[xn, yn] = 0 then t[xn, yn] i if i < n2 then T ENTA(i + 1, xn, yn, q 1) if q 1 then t[xn, yn] 0 else q 1 true until q 1 _ (m = 8) q q1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

69

Algoritmos tentativa e erro (Backtracking ) Comentrios nais


Tcnica usada quando no se sabe exatamente que caminho seguir para encontrar uma soluo. No garante a soluo tima. Essa tcnica pode ser vista ainda como uma variante da recursividade Ao se fazer a anlise de um algoritmo que usa backtracking, deve-se tambm analisar o crescimento do espao de solues.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

70

Diviso e conquista (1)


Consiste em dividir o problema em partes menores, encontrar solues para essas partes (supostamente mais fcil), e combin-las em uma soluo global. Geralmente leva a solues ecientes e elegantes, principalmente se forem recursivas. Basicamente essa tcnica consiste das seguintes fases (executadas nesta ordem): 1. Diviso (particionamento) do problema original em sub-problemas similares ao original mas que so menores em tamanho; 2. Resoluo de cada sub-problema sucessivamente e independentemente (em geral de forma recursiva); 3. Combinao das solues individuais em uma soluo global para todo o problema.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

71

Diviso e conquista (2)


Um algoritmo de diviso e conquista normalmente relacionado a uma equao de recorrncia que contm termos referentes ao prprio problema. T (n) = aT ( n b ) + f (n), onde a indica o nmero de sub-problemas gerados, b o tamanho de cada um deles e f (n) o custo para fazer a diviso. Paradigma bastante usado em Cincia da Computao em problemas como: Ordenao: Mergesort, Quicksort (Tecnicamente falando, o Quicksort poderia ser chamado de um algoritmo conquista e diviso); Pesquisa: Pesquisa Binria; Algoritmos aritmticos: multiplicao de inteiros, multiplicao de matrizes, FFT (Fast Fourier Transform); Algoritmos geomtricos: Convex Hull, Par mais prximo; ...
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

72

Diviso e conquista: Exemplo 1


Seja A um vetor de inteiros, A[1..n], n 1 que no est ordenado.

Pede-se: Determine o maior e o menor elementos desse vetor usando diviso e conquista; Determine o custo (nmero de comparaes) para achar esses dois elementos supondo que A possui n elementos.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

73

Diviso e conquista: Exemplo 1


Cada chamada de MaxMin4 atribui s variveis Max e Min o maior e o menor elementos em A[Linf ]. .A[Lsup].
M AX M IN 4(Linf , Lsup, Max , Min) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Variveis auxiliares: Max1, Max2 , Min1, Min2 , Meio if (Lsup Linf ) 1 Condio da parada recursiva then if A[Linf ] < A[Lsup] then Max A[Lsup] Min A[Linf ] else Max A[Linf ] Min A[Lsup] Lsup else Meio b Linf + c Acha o menor e maior elementos de cada partio 2 M AX M IN 4(Linf , Meio, Max1, Min1) M AX M IN 4(Meio+1, Lsup, Max2 , Min2 ) if Max1 > Max2 then Max Max1 else Max Max2 if Min1 < Min2 then Min Min1 else Min Min2
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

74

Diviso e conquista: Exemplo 1 (Anlise)


Seja f (n) o nmero de comparaes entre os elementos de A, que possui n elementos. f (n) = 1, para n 2, f (n) = f (bn/2c) + f (dn/2e) + 2, para n > 2. f (n) = 2f ( n 2) + 2

Quando n = 2i para algum inteiro positivo i, temos que:

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

75

Diviso e conquista: Exemplo 1 (Anlise)


Resolvendo esta equao de recorrncia (em funo de n e i), temos:
f (n) = 2f ( n )+2 2 n 2 2f ( n ) = 22 f ( 2 2) + 2 2 n n 3 22 f ( 2 = 23 f ( 2 2) 3) + 2 . . . n i 2i 3 f ( 2i 3 ) = 2i 2 f ( 2n i 2) + 2 i 2i 2 f ( 2n = 2i 1 f ( 2n i 2) i 1) + 2 = 2i 1 f (2) + 2i 1 = 2 i 1 + 2i 1 f (2i) = 2f (2i 1 ) + 2 2f (2i 1 ) = 22 f (2i 2 ) + 22 22 f (2i 2 ) = 23 f (2i 3 ) + 23 . . . 2i 3 f (23 ) = 2i 2 f (22 ) + 2i 2 2i 2 f (22 ) = 2i 1 f (21 ) + 2i 1 = 2i 1 f (2) + 2i 1 = 2 i 1 + 2i 1

2 1

Fazendo a expanso desta equao temos:


2i 2i
2 f (22 ) 3 f (23 )

22 f (2i 2 ) + 22 2f (2i 1 ) + 2 f (2i) f (n)

= = . . . = = = = =

2i 2i

+ 2i 1 + 2i

1 1

+ 2i

2 i 1 + 2i 1 + 2 i 2 + . . . + 23 2 i 1 + 2i 1 + 2 i 2 + . . . + 23 + 22 2i 1 + 2 i 1 + 2 i 2 + . . . + 2 3 + 2 2 + 2 Pi 1 k i 1 2 + k=1 2 = 2i 1 + 2i 2 n n +n 2= 3 2. 2 2

Logo, f (n) = 3n/2


UFMG/ICEx/DCC

2 para o melhor caso, pior caso e caso mdio.


PAA

Paradigmas de Projeto de Algoritmos

76

Diviso e conquista: Exemplo 1 (Anlise)


Conforme mostrado anteriormente, o algoritmo apresentado neste exemplo timo. Entretanto, ele pode ser pior do que os j apresentados, pois, a cada chamada recursiva, salva Linf , Lsup, Max e Min, alm do endereo de retorno da chamada para o procedimento. Alm disso, uma comparao adicional necessria a cada chamada recursiva para vericar se Lsup Linf 1 (condio de parada). O valor de n + 1 deve ser menor do que a metade do maior inteiro que pode ser representado pelo compilador, para no provocar overow na operao Linf + Lsup.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

77

Diviso e conquista: Exemplo 2


Motivao: Uma das partes mais importantes da unidade aritmtica de um computador o circuito que soma dois nmeros. Pede-se: Projete um circuito para somar dois nmeros sem sinal usando diviso e conquista

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

78

Diviso e conquista: Exemplo 2 Possvel soluo


Estratgia para construir um somador de n bits: Usar n somadores de 1-bit. Nesse caso, o atraso (medido pelo caminho mais longo entre a entrada e sada em termos do nmero de portas lgicas) 3n se for usado o Ripplecarry Adder. Exemplo: n = 32 ) Atraso = 96. Usando a estratgia de diviso e conquista o atraso pode ser menor.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

79

Diviso e conquista: Exemplo 2 Vericando a viabilidade da estratgia DeC


Dividir os n bits em dois grupos: metade da esquerda e metade da direita. Somar cada metade usando circuitos somadores idnticos da metade do tamanho do problema original. Questo: A adio da metade da esquerda pode comear antes de terminar a adio da metade da direita? Nessa estratgia no.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

80

Diviso e conquista: Exemplo 2 Vericando a viabilidade da estratgia DeC


Como comear a computao da esquerda sem conhecer o bit de vai um da metade da direita? Estratgia: Compute duas somas para a metade da esquerda: (a) uma considerando que vem um da metade da direita; (b) e a outra considerando que no. Uma vez nalizada as somas das duas metades, possvel dizer qual das duas somas da metade da esquerda deve ser utilizada.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

81

Diviso e conquista: Exemplo 2 Estratgia


Sejam as seguintes variveis para um somador de n bits: x1, x2, . . ., xn e y1, y2, . . ., yn as entradas representando os dois nmeros de n bits a serem somados. s1, s2, . . . , sn a soma de n bits (excluindo o bit de vai um mais esquerda) e considerando que no veio um para o bit mais direita. t1, t2, . . . , tn a soma de n bits (excluindo o bit de vai um mais esquerda) e considerando que veio um para o bit mais direita. p, bit propagao de vai um, que um 1 se o resultado da soma gera um vai um mais esquerda, assumindo que veio um no bit mais direita. g , bit gera vai um, que 1 se vai um mais esquerda considerando apenas a soma dos n bits, ou seja, independente se veio um no bit mais direita. Observe que: g ! p, ou seja, se g = 1 ento p = 1. No entanto, se g = 0 ento ainda podemos ter p = 1.
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

82

Diviso e conquista: Exemplo 2 Calculando os valores desses bits


Duas somas so computadas para a metade da esquerda: . no veio um x 1 x 2 . . . xn + y 1 y2 . . . y n Bits p e g s1 s2 . . . s n . veio um

+
Bits p e g

x1 y1 t1

x2 y2 t2

... ... ...

xn yn tn

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

83

Diviso e conquista: Exemplo 2 Examinando os valores desses bits quando n = 1


x 0 0 1 1 y 0 1 0 1 s 0 1 1 0 t 1 0 0 1 p 0 1 1 1 g 0 0 0 1
x e y : entradas a serem somados. s: soma de um bit p/ o caso de no veio um. t: soma de um bit p/ o caso de veio um. p: bit de propagao de vai um, que um 1 se o resultado da soma gera um vai um, p/ o caso de veio um. g : bit de vai um, que 1 se vai um considerando apenas a soma dos n bits.

Expresses correspondentes: s = xy + xy A soma s s 1 quando apenas uma das entradas 1. t = xy + x y Assumindo que vem 1, a soma t s ser 1 quando as duas entradas forem idnticas. p=x+y Assumindo que veio 1, tambm ir 1 quando uma das entradas ou ambas forem 1. g = xy O bit de vai 1 s ser 1 quando as duas entradas forem 1.
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

84

Diviso e conquista: Exemplo 2 Somador para o caso n = 1


x y

1-adder

g p s t

Modelagem: Atraso: D(1) = 3 Portas: G(1) = 9

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

85

Diviso e conquista: Exemplo 2 Idia para aplicar DeC


Idia: Construir um somador de 2n bits usando dois somadores de n bits. Computar os bits: propagao de vai um (p), e gera vai um (g ) para o somador de 2n bits. Ajustar a metade da esquerda dos bits s e t para levar em considerao se h um vai um para a metade da esquerda vindo da metade da direita. Circuito que implementa a idia:

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

86

Diviso e conquista: Exemplo 2 Clculo de p


Suponha que h um veio um para o circuito de 2n bits (extrema direita). Haver um vai um (extrema esquerda), representado pelo bit de propagao p = 1, se: A metade da esquerda gera um vai um, ou seja, g L, j que g L ! pL. As duas metades do somador propagam o vai um, ou seja, pLpR . Esta expresso inclui o caso tcbluepLg R . Como g R ! pR , temos que (pLpR + pLg R ) pLpR . A expresso para p, bit de propagao de vai um, : p = g L + pLpR

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

87

Diviso e conquista: Exemplo 2 Clculo de g


Suponha que no h um veio um para o circuito de 2n bits (extrema direita). Haver um vai um (extrema esquerda), ou seja, o bit de gera vai um g vale 1 se: A metade da esquerda gera um vai um, ou seja, g L. A metade da direita gera um vai um e a metade da esquerda propaga esse bit, ou seja, pLg R . A expresso para g , bit gera vai um, : g = g L + pLg R

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

88

Diviso e conquista: Exemplo 2 Clculo dos bits s e t da direita


Calculando os bits sn+1 , sn+2 , . . ., s2n e tn+1 , tn+2 , . . ., t2n Bits da direita no so modicados. Assim, sn+i = sR i tn+i = tR i para i = 1, 2, . . . , n. Observao: num somador de 2n bits, as sadas so identicadas pelos ndices 1, 2, . . . , 2n numerados a partir da esquerda. Logo, os ndices n + 1, n + 2, . . . , 2n correspondem metade da direita.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

89

Diviso e conquista: Exemplo 2 Clculo dos bits s da esquerda


Suponha que no h um veio um (extrema direita) para o circuito de 2n bits. Neste caso, o vai um para a metade da esquerda, se existir, foi gerado pela metade da direita. Assim, se: g R = 1 ) si = tL i R g = 0 ) si = sL i A expresso para si : para i = 1, 2, . . . , n.
R L R si = sL i g + ti g

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

90

Diviso e conquista: Exemplo 2 Clculo dos bits t da esquerda


Suponha que h um veio um (extrema direita) para o circuito de 2n bits. Neste caso, devemos analisar o bit de propagao p. Assim, se: pR = 1 ) ti = tL i pR = 0 ) ti = sL i A expresso para ti : para i = 1, 2, . . . , n.
R L R ti = sL i p + ti p

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

91

Diviso e conquista: Exemplo 2 Expresses a serem calculadas pelo FIX


O mdulo FIX deve calcular as seguintes expresses: p = g L + pLpR g = g L + pLg R
R L R si = sL i g + ti g , R L R ti = sL i p + ti p ,

Essas expresses podem ser calculadas por circuitos de no mximo trs nveis. O exemplo abaixo para ti:

i = 1, 2, . . . , n i = 1, 2, . . . , n

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

92

Diviso e conquista: Exemplo 2 Somador para n = 4 (Caso genrico)


x1 x y1 y x2 x y2 y x3 x y3 y x4 x y4 y

1-adder

1-adder

1-adder

1-adder

g p s t

g p s t

g p s t

g p s t

FIX
g p s1 t1 s2 t2 g p

FIX
s1 t1 s2 t2

FIX
g p
UFMG/ICEx/DCC PAA

s1 t1 s2 t2

s3 t3 s4 t4
93

Paradigmas de Projeto de Algoritmos

Diviso e conquista: Exemplo 2 Somador para n = 4 (Caso especco)


x1 0 x y1 1 y x2 1 x y2 1 y x3 1 x y3 0 y x4 1 x y4 1 y

1-adder

1-adder

1-adder

1-adder

g p s t 0 1 1 0

g p s t 1 1 0 1

g p s t 0 1 1 0

g p s t 1 1 0 1

FIX 1 1
g p 1 1

FIX 0 0
s1 t1 s2 t2 0 0 0 1

1 1
g p 1 1

0 0 0 1
s1 t1 s2 t2 0 0

FIX 11 g p
UFMG/ICEx/DCC PAA

s1

1 s2

s3

s4

0
94

Paradigmas de Projeto de Algoritmos

Diviso e conquista: Exemplo 2 Clculo do atraso usando DeC


= 3 Atraso: D(2n) = D(n) + 3 > > : D(n) = 3(1 + log n) = O(log n) Para um somador de 32 bits: Diviso e conquista: 3(1 + log n) = 3(1 + log 32) = 18 Ripple-carry : 3n = 96
8 > D(1) > <

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

95

Diviso e conquista: Exemplo 2 Comentrios sobre este exemplo


Soluo usando diviso e conquista (DeC): Atraso: O(log n) No de portas: O(n log n) Soluo Ripple-Carry Adder : Atraso: O(n) No de portas: O(n) A soluo DeC apresenta um exemplo onde o aumento do espao (neste caso portas) possibilita uma diminuio no atraso (tempo, neste caso), ou seja, existe um compromisso T EMPO E SPAO. A soluo apresentada um exemplo no tradicional da tcnica DeC j que o sub-problema da esquerda deve gerar duas solues, uma vez que seu valor depende da soluo do sub-problema da direita, ou seja, os subproblemas no so independentes.
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

96

Diviso-e-conquista: Alguns comentrios


Este paradigma no aplicado apenas a problemas recursivos. Existem pelo menos trs cenrios onde diviso e conquista aplicado: 1. Processar independentemente partes do conjunto de dados. Exemplo: Mergesort. 2. Eliminar partes do conjunto de dados a serem examinados. Exemplo: Pesquisa binria. 3. Processar separadamente partes do conjunto de dados mas onde a soluo de uma parte inuencia no resultado da outra. Exemplo: Somador apresentado.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

97

Balanceamento
No projeto de algoritmos, importante procurar sempre manter o balanceamento na sub-diviso de um problema em partes menores. Diviso e conquista no a nica tcnica em que balanceamento til. Considere o seguinte exemplo de ordenao:
E XEMPLO D E O RDENAO(n) 1 for i = 1. .n 1 do 2 Selecione o menor elemento de A[i. .n] e troque-o com o elemento A[i].

Inicialmente o menor elemento de A[1. .n] trocado com o elemento A[1]. O processo repetido para as seqncias n 1, n 2, . . ., 2, com os n 1, n 2, . . ., 2 elementos, respectivamente, sendo que em cada passo o menor elemento trocado com o elemento A[i].

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

98

Balanceamento: Anlise do exemplo


O algoritmo leva equao de recorrncia: T (n) = T (n T (1) = 0 1) + n 1

para o nmero de comparaes entre elementos. Substituindo: T (n) = T (n 1) + n T (n 1) = T (n 2) + n . . . T (2) = T (1) + 1 e adicionando lado a lado, obtemos: T (n) = T (1) + 1 + 2 + + n Logo, o algoritmo O(n2).
UFMG/ICEx/DCC PAA

1 2

1=

n(n 2

1)

Paradigmas de Projeto de Algoritmos

99

Balanceamento: Anlise do exemplo


Embora o algoritmo possa ser visto como uma aplicao recursiva de diviso e conquista, ele no eciente para valores grandes de n. Para obter ecincia assinttica necessrio fazer um balanceamento: Dividir o problema original em dois sub-problemas de tamanhos aproximadamente iguais, ao invs de um de tamanho 1 e o outro de tamanho n 1. Comentrio: A anlise da equao de recorrncia nos mostra a razo do comportamento quadrtico desse algoritmo. essa equao tambm que sugere como o algoritmo pode ter um desempenho bem melhor, se um balanceamento for usado.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

100

Exemplo de balanceamento: Mergesort


Intercalao: Unir dois arquivos ordenados gerando um terceiro arquivo ordenado (merge). Colocar no terceiro arquivo o menor elemento entre os menores dos dois arquivos iniciais, desconsiderando este mesmo elemento nos passos posteriores. Este processo deve ser repetido at que todos os elementos dos arquivos de entrada sejam escolhidos.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

101

Algoritmo de ordenao: Mergesort


1. Divida recursivamente o vetor a ser ordenado em dois, at obter n vetores de um nico elemento. 2. Aplique a intercalao tendo como entrada dois vetores de um elemento, formando um vetor ordenado de dois elementos. 3. Repita este processo formando vetores ordenados cada vez maiores at que todo o vetor esteja ordenado.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

102

Exemplo de balanceamento: Implementao do Mergesort


M ERGESORT(A, i, j ) Parmetros: A (vetor); i, j (limites inferior e superior da partio) Varivel auxiliar: m (meio da partio) if i < j j) then m b (i+ c 2 M ERGESORT(A, i, m) M ERGESORT(A, m + 1, j ) M ERGE(A, i, m, j )

1 2 3 4 5

Considere n como sendo uma potncia de 2. Merge(A, i, m, j ) recebe duas seqncias ordenadas A[i..m] e A[(m + 1)..j ] e produz uma outra seqncia ordenada dos elementos de A[i..m] e A[m + 1..j ]. Como A[i..m] e A[m + 1..j ] esto ordenados, Merge requer no mximo n 1 comparaes.

Merge seleciona repetidamente o menor dentre os menores elementos restantes em A[i..m] e A[m + 1..j ]. Caso empate, retira de qualquer uma delas.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

103

Anlise do Mergesort
Na contagem de comparaes, o comportamento do Mergesort pode ser representado por: T (n) = 2T ( n 2) + n T (1) = 0. No caso dessa equao de recorrncia sabemos que o custo (veja a resoluo desta equao na parte de induo ou usando o Teorema Mestre): T (n) = n log n Logo, o algoritmo O(n log n). n + 1. 1,

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

104

Balanceamento: Alguns comentrios


Para o problema de ordenao, o balanceamento levou a um resultado muito superior: O custo passou de O(n2) para O(n log n). Balanceamento uma tcnica presente em diferentes aspectos algortmicos de Cincia da Computao como Sistemas Operacionais. Tambm uma tcnica importante quando o modelo computacional usado o PRAM (Parallel Random Access Machine).

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

105

Programao dinmica
Programao no est relacionado com um programa de computador. A palavra est relacionada com um mtodo de soluo baseado em tabela. Programao dinmica (PD) Diviso-e-conquista (DeC): DeC quebra o problema em sub-problemas menores. PD resolve todos os sub-problemas menores mas somente reusa as solues timas.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

106

Programao dinmica
Quando
X
Tamanhos dos sub-problemas = O (n)

provvel que o algoritmo recursivo tenha complexidade polinomial. Quando a diviso de um problema de tamanho n resulta em provvel que o algoritmo recursivo tenha complexidade exponencial. Nesse caso, a tcnica de programao dinmica pode levar a um algoritmo mais eciente. A programao dinmica calcula a soluo para todos os sub-problemas, partindo dos sub-problemas menores para os maiores, armazenando os resultados em uma tabela. A vantagem que uma vez que um sub-problema resolvido, a resposta armazenada em uma tabela e nunca mais recalculado.
UFMG/ICEx/DCC PAA

n Sub-problemas Tamanho n

1 cada um

Paradigmas de Projeto de Algoritmos

107

Programao dinmica: Produto de n matrizes


Seja M = M1 M2 Mn ,

onde Mi uma matriz com di 1 linhas e di colunas, 2 i n. Isto server para dizer apenas que a matriz Mi possui uma quantidade de linhas igual a quantidade de colunas de Mi 1 (di 1) e uma quantidade de colunas dada por di. A ordem da multiplicao pode ter um efeito enorme no nmero total de operaes de adio e multiplicao necessrias para obter M . Considere o produto de uma matriz p q por outra matriz q r cujo algoritmo requer O(pqr) operaes. Considere o produto onde as dimenses de cada matriz aparecem entre colchetes.
UFMG/ICEx/DCC PAA

M = M1[10, 20] M2[20, 50] M3[50, 1] M4[1, 100],

Paradigmas de Projeto de Algoritmos

108

Programao dinmica: Produto de n matrizes


Sejam duas possveis ordens de avaliao dessa multiplicao: M = M1 [10, 20] M2 [20, 50] M3 [50, 1] M4 [1, 100],

Tentar todas as ordens possveis para minimizar o nmero de operaes f (n) exponencial em n, onde f (n) 2n 2 . Usando programao dinmica possvel obter um algoritmo O(n3 ).
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

109

Programao dinmica: Produto de n matrizes


Seja mij o menor custo para computar Mi Mi+1 Mj , para 1 i j n. Neste caso, mij =
(

0, se i = j, Minik<j (mik + mk+1,j + di 1dk dj ), se j > i.

mik representa o custo mnimo para calcular M 0 = Mi Mi+1 Mk . mk+1,j representa o custo mnimo para calcular M 00 = Mk+1 Mk+2 Mj . di 1dk dj representa o custo de multiplicar M 0[di 1, dk ] por M 00[dk , dj ]. mij , j > i representa o custo mnimo de todos os valores possveis de k entre i e j 1, da soma dos trs termos.
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

110

Programao dinmica: Exemplo


A soluo usando programao dinmica calcula os valores de mij na ordem crescente das diferenas nos subscritos. O clculo inicia com mii para todo i, depois mi,i+1 para todo i, depois mi,i+2, e assim sucessivamente. Desta forma, os valores mik e mk+1,j estaro disponveis no momento de calcular mij . Isto acontece porque j i tem que ser estritamente maior do que ambos os valores de k i e j (k + 1) se k estiver no intervalo i k < j .

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

111

Programao dinmica: Implementao


AVALIA M ULT M ATRIZES(n, d[0. .n]) Parmetro: n (no de matrizes); d[0. .n] (dimenses das matrizes) Constante e variveis auxiliares: MaxInt = maior inteiro i, j, k, h, n, temp m[1. .n, 1. .n] for i 1 to n do m[i, i] 0 for h 1 to n 1 do for i 1 to n h do j i+h m[i, j ] MaxInt for k i to j 1 do temp m[i, k] + m[k + 1, j ] + d[i 1] d[k] d[j ] if temp < m[i, j ] then m[i, j ] temp print m

1 2 3 4 5 6 7 8 9 10 11

A execuo de AVALIA M ULT M ATRIZES obtm o custo mnimo para multiplicar as n matrizes, assumindo que so necessrias pqr operaes para multiplicar uma matriz p q por outra matriz q r.
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

112

Programao dinmica: Implementao


A multiplicao de M = M1[10, 20] M2[20, 50] M3[50, 1] M4[1, 100], sendo

10
0

20
1

50
2

1
3

100
4

produz como resultado m11 = 0 m12 = 10.000


M1 M2

m22 = 0 m23 = 1.000


M2 M3

m33 = 0 m34 = 5.000


M3 M4

m44 = 0

m13 = 1.200
M 1 (M 2 M 3 )

m24 = 3.000
(M 2 M 3 ) M 4

m14 = 2.200
(M1 (M2 M3 )) M4
UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

113

Programao dinmica: Princpio da otimalidade


A ordem de multiplicao pode ser obtida registrando o valor de k para cada entrada da tabela que resultou no mnimo. Essa soluo eciente est baseada no princpio da otimalidade: Em uma seqncia tima de escolhas ou de decises cada sub-seqncia deve tambm ser tima. Cada sub-seqncia representa o custo mnimo, assim como mij , j > i. Assim, todos os valores da tabela representam escolhas timas.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

114

Aplicao do princpio da otimalidade


O princpio da otimalidade no pode ser aplicado indiscriminadamente. Se o princpio no se aplica provvel que no se possa resolver o problema com sucesso por meio de programao dinmica. Quando, por exemplo, o problema utiliza recursos limitados e o total de recursos usados nas sub-instncias maior do que os recursos disponveis. Exemplo do princpio da otimalidade: suponha que o caminho mais curto entre Belo Horizonte e Curitiba passa por Campinas. Logo, o caminho entre BH e Campinas tambm o mais curto possvel; como tambm o caminho entre Campinas e Curitiba; Logo, o princpio da otimalidade se aplica.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

115

No aplicao do princpio da otimalidade


Seja o problema de encontrar o caminho mais longo entre duas cidades. Temos que: Um caminho simples nunca visita uma mesma cidade duas vezes. Se o caminho mais longo entre Belo Horizonte e Curitiba passa por Campinas, isso no signica que o caminho possa ser obtido tomando o caminho simples mais longo entre Belo Horizonte e Campinas e depois o caminho simples mais longo entre Campinas e Curitiba. Observe que o caminho simples mais longo entre BH e Campinas pode passar por Curitiba! Quando os dois caminhos simples so agrupados no existe uma garantia que o caminho resultante tambm seja simples. Logo, o princpio da otimalidade no se aplica.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

116

Quando aplicar PD?


Problema computacional deve ter uma formulao recursiva. No deve haver ciclos na formulao (usualmente o problema deve ser reduzido a problemas menores). Nmero total de instncias do problema a ser resolvido deve ser pequeno (n). Tempo de execuo O(n) tempo para resolver a recurso. PD apresenta sub-estrutura tima: Soluo tima para o problema contm solues timas para os subproblemas. Sobreposio de sub-problemas: Nmero total de sub-problemas distintos pequeno comparado com o tempo de execuo recursivo.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

117

Algoritmos gulosos
Aplicado a problemas de otimizao. Seja o algoritmo para encontrar o caminho mais curto entre dois vrtices de um grafo: Escolhe a aresta que parece mais promissora em qualquer instante. Assim, independente do que possa acontecer mais tarde, nunca reconsidera a deciso. no necessita avaliar alternativas, ou usar procedimentos sosticados para desfazer decises tomadas previamente.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

118

Caractersticas dos algoritmos gulosos Problema geral


Dado um conjunto C , determine um sub-conjunto S C tal que: S satisfaz uma dada propriedade P , e S mnimo (ou mximo) em relao a algum critrio . O algoritmo guloso para resolver o problema geral consiste em um processo iterativo em que S construdo adicionando-se ao mesmo elementos de C um a um.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

119

Caractersticas dos algoritmos gulosos


Para construir a soluo tima existe um conjunto ou lista de candidatos. So acumulados um conjunto de candidatos considerados e escolhidos, e o outro de candidatos considerados e rejeitados. Existe uma funo que verica se um conjunto particular de candidatos produz uma soluo (sem considerar otimalidade no momento). Outra funo verica se um conjunto de candidatos vivel (tambm sem preocupar com a otimalidade). Uma funo de seleo indica a qualquer momento quais dos candidatos restantes o mais promissor. Uma funo objetivo fornece o valor da soluo encontrada, como o comprimento do caminho construdo (no aparece de forma explicita no algoritmo guloso).
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

120

Estratgia do algoritmo guloso


G ULOSO(C ) 1 2 3 4 5 6 7 8 9 S ; while (C 6= ; ^ Soluo(S )) do x Seleciona(C ) C C x if Vivel (S + x) then S S + x; if Soluo(S ) then return(S ) else return(;) C o conjunto de candidatos S contm conjunto soluo, inicialmente vazio 9 candidatos e no achou uma soluo? Seleciona o prximo candidato Remove esse candidato do conjunto C A soluo vivel? Sim, incorpora o candidato soluo Obteve uma soluo? Sim, retorna a soluo No!

Inicialmente, o conjunto S de candidatos escolhidos est vazio (linha 1). A cada passo, testa se o aumento de S constitui uma soluo e ainda existem candidatos a serem avaliados (condio linha 2). O melhor candidato restante ainda no tentado considerado e removido de C (linhas 3 e 4). O critrio de escolha ditado pela funo de seleo (linha 3). Se o conjunto aumentado de candidatos se torna vivel, o candidato adicionado ao conjunto S de candidatos escolhidos. Caso contrrio ;e rejeitado (linhas 5 e 6). Ao nal do processo, testa se h uma soluo (linha 7) que retornada (linha 8) ou no (linha 9).

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

121

Caractersticas da implementao de algoritmos gulosos


Quando funciona corretamente, a primeira soluo encontrada sempre tima. A funo de seleo geralmente relacionada com a funo objetivo. Se o objetivo : Maximizar ) provavelmente escolher o candidato restante que proporcione o maior ganho individual. Minimizar ) ento ser escolhido o candidato restante de menor custo. O algoritmo nunca muda de idia: Um candidato escolhido e adicionado soluo passa a fazer parte dessa soluo permanentemente. Um candidato excludo do conjunto soluo, no mais reconsiderado.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

122

rvore geradora mnima


Denio: Uma rvore geradora de um grafo G = (V, E ) um subgrafo de G que uma rvore e contm todos os vrtices de G. Num grafo com pesos, o peso de um subgrafo a soma dos pesos das arestas deste subgrafo. Uma rvore geradora mnima para um grafo com pesos uma rvore geradora com peso mnimo. Problema: Determinar a rvore geradora mnima (em ingls, minimum spanning tree), de um grafo com pesos. Aplicaes: Determinar a maneira mais barata de se conectar um conjunto de terminais, sejam eles cidades, terminais eltricos, computadores, ou fbricas, usando-se, por exemplo, estradas, os, ou linhas de comunicao

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

123

rvore geradora mnima: Solues


O exemplo abaixo mostra que um grafo pode ter mais de uma rvore geradora mnima.

2 2

1 2

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

124

Grafo conexo
Um grafo conexo se, para cada par de vrtices v e w, existir um caminho de v para w. Observaes: Se G no for conexo ele no possui nenhuma rvore geradora, muito menos uma que seja mnima. Neste caso ele teria uma oresta geradora. Para simplicar a apresentao do algoritmo para rvore geradora mnima, vamos assumir que G conexo. fcil estender o algoritmo (e sua justicativa) para determinar uma oresta de rvores geradoras mnimas.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

125

rvore geradora mnima Algoritmo de DijkstraPrim (1959/57)


O algoritmo de DijkstraPrim comea selecionando um vrtice arbitrrio, e depois aumenta a rvore construda at ento escolhendo um novo vrtice (e um nova aresta) a cada iterao. Durante a execuo do algoritmo, podemos imaginar os vrtices divididos em trs categorias: 1. Vrtices da rvore: aqueles que fazem parte da rvore construda at ento; 2. Vrtices da borda: no esto na rvore, mas so adjacentes a algum vrtice da rvore; 3. Vrtices no-vistos: todos os outros.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

126

rvore geradora mnima Algoritmo de DijkstraPrim


O principal passo do algoritmo a seleo de um vrtice da borda e de uma aresta incidente a este vrtice. O algoritmo de DijkstraPrim sempre escolhe uma aresta entre um vrtice da rvore e um vrtice da borda que tenha peso mnimo. A estrutura geral do algoritmo pode ser descrita do seguinte modo:
D IJKSTRA -P RIM(Grafo) 1 Seleciona um vrtice arbitrrio para inicializar a rvore; 2 while existem vrtices da borda 3 do Seleciona uma aresta de peso mnimo entre um vrtice da rvore e um vrtice da borda; 4 Adiciona a aresta selecionada e o vrtice da borda rvore;

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

127

Algoritmo de DijkstraPrim
Idia bsica: Tomando como vrtice inicial A, crie uma la de prioridades classicada pelos pesos das arestas conectando A. Repita o processo at que todos os vrtices tenham sido visitados.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

128

Princpio da tcnica de algoritmos gulosos


A cada passo faa a melhor escolha: Escolha local tima. Objetivo: A soluo nal ser tima tambm. Sempre funciona? No. Por exemplo, 0 1 Knapsack Problem. Propriedades de problemas que, em geral, levam ao uso da estratgia gulosa: Propriedade da escolha gulosa. Sub-estrutura tima.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

129

Propriedade da escolha gulosa


Soluo global tima pode ser obtida a partir de escolhas locais timas. Estratgia diferente de programao dinmica (PD). Uma vez feita a escolha, resolve o problema a partir do estado em que se encontra. Escolha na tcnica gulosa depende s do que foi feito e no do que ser feito no futuro. Progride na forma top-down: Atravs de iteraes vai transformando uma instncia do problema em uma outra menor.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

130

Propriedade da escolha gulosa


Estratgia da prova que a escolha gulosa leva a uma soluo global tima: Examine a soluo global tima. Mostre que a soluo pode ser modicada de tal forma que uma escolha gulosa pode ser aplicada como primeiro passo. Mostre que essa escolha reduz o problema a um similar mas menor. Aplique induo para mostrar que uma escolha gulosa pode ser aplicada a cada passo.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

131

Sub-estrutura tima
Um problema exibe sub-estrutura tima se uma soluo tima para o problema formada por solues timas para os sub-problemas. Tcnicas de escolha gulosa e programao dinmica possuem essa caracterstica.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

132

Tcnica gulosa vs. Programao dinmica


Possuem sub-estrutura tima. Programao dinmica: Faz uma escolha a cada passo. Escolha depende das solues dos sub-problemas. Resolve os problemas bottom-up. Tcnica gulosa: Trabalha na forma top-down.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

133

Diferenas das duas tcnicas atravs de um exemplo


Problema da Mochila (enunciado): Um ladro acha n itens numa loja. Item i vale vi unidades (dinheiro, e.g., R$, US$, etc). Item i pesa wi unidades (kg, etc). vi e wi so inteiros. Consegue carregar W unidades no mximo. Deseja carregar a carga mais valiosa.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

134

Verses do Problema da Mochila


Problema da Mochila 0 1 ou (0 1 Knapsack Problem): O item i levado integralmente ou deixado. Problema da Mochila Fracionrio: Frao do item i pode ser levada.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

135

Consideraes sobre as duas verses


Possuem a propriedade de sub-estrutura tima. Problema inteiro: Considere uma carga que pesa no mximo W com n itens. Remova o item j da carga (especco mas genrico). Carga restante deve ser a mais valiosa pesando no mximo W n 1 itens.

wj com

Problema fracionrio: Considere uma carga que pesa no mximo W com n itens. Remova um peso w do item j da carga (especco mas genrico). Carga restante deve ser a mais valiosa pesando no mximo W w com n 1 itens mais o peso wj w do item j .

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

136

Consideraes sobre as duas verses


Problema inteiro: No resolvido usando a tcnica gulosa. Problema fracionrio: resolvido usando a tcnica gulosa. Estratgia para resolver o problema fracionrio: vi Calcule o valor por unidade de peso w para cada item. i Estratgia gulosa levar tanto quanto possvel do item de maior valor por unidade de peso. Repita o processo para o prximo item com esta propriedade at alcanar a carga mxima. Complexidade para resolver o problema fracionrio: vi Ordene os itens i (i = 1 . . . n), pelas fraes w . i O(n log n).
UFMG/ICEx/DCC PAA

Paradigmas de Projeto de Algoritmos

137

Exemplo: Situao inicial Problema 0 1

50 30 20 10
$60 $100 $120 Mochila

Item 1 2 3

Peso 10 20 30

Valor 60 100 120

V/P 6 5 4

Carga mxima da mochila: 50

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

138

Exemplo: Estratgia gulosa Problema 0 1

30 $120
+

Solues possveis:

20 $100
+ 10 $60 = $160

30 $120
+ 10 $60 = $180

# 1 2 3

Item (Valor) 2 + 3 = 100 + 120 = 220 1 + 2 = 60 + 100 = 160 1 + 3 = 60 + 120 = 180

20 $100
= $220

Soluo 2 a gulosa.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

139

Exemplo: Estratgia gulosa Problema 0 1


Consideraes: Levar o item 1 faz com que a mochila que com espao vazio
v Espao vazio diminui o valor efetivo da relao w

Neste caso deve-se comparar a soluo do sub-problema quando: Item includo na soluo Item excludo da soluo Passam a existir vrios sub-problemas Programao dinmica passa a ser a tcnica adequada

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

140

Exemplo: Estratgia gulosa Problema Fracionrio

20 $80 30
+
Item 1 2 3 Peso 10 20 30 Valor 60 100 80 Frao 1 1 2/3

20 $100
+ 10 $60 = $240

Total = 240. Soluo tima!

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

141

Algoritmos aproximados
Problemas que somente possuem algoritmos exponenciais para resolv-los so considerados difceis. Problemas considerados intratveis ou difceis so muito comuns, tais como: Problema do caixeiro viajante cuja complexidade de tempo O(n!). Diante de um problema difcil comum remover a exigncia de que o algoritmo tenha sempre que obter a soluo tima. Neste caso procuramos por algoritmos ecientes que no garantem obter a soluo tima, mas uma que seja a mais prxima possvel da soluo tima.

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

142

Tipos de algoritmos aproximados


Heurstica: um algoritmo que pode produzir um bom resultado, ou at mesmo obter a soluo tima, mas pode tambm no produzir soluo alguma ou uma soluo que est distante da soluo tima. Algoritmo aproximado: um algoritmo que gera solues aproximadas dentro de um limite para a razo entre a soluo tima e a produzida pelo algoritmo aproximado (comportamento monitorado sob o ponto de vista da qualidade dos resultados).

UFMG/ICEx/DCC

PAA

Paradigmas de Projeto de Algoritmos

143