22
UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas Divida o problema em vários sub- problemas menores que são similares ao original, mas de tamanho menor Conquiste os sub-problemas, resolvendo-os recursivamente. Se eles são pequenos o bastante, então resolvo-os de uma maneira direta. Combine as soluções para criar uma solução para o problema original.

UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

Embed Size (px)

Citation preview

Page 1: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Dividir-e-Conquistar

Recursividade em estruturas– Divida o problema em vários sub-problemas

menores que são similares ao original, mas de tamanho menor

– Conquiste os sub-problemas, resolvendo-os recursivamente. Se eles são pequenos o bastante, então resolvo-os de uma maneira direta.

– Combine as soluções para criar uma solução para o problema original.

Page 2: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Um Exemplo: Merge Sort

Dividir: Divida a seqüência de n-elementos a ser ordenada em duas subsequências de n/2 elementos cada uma.

Conquistar: Ordene as duas subseqüências recursivamente utilizando o merge sort.

Combinar: Funda as duas subseqüências ordenadas de modo a produzir uma resposta ordenada.

Page 3: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Merge-Sort (A, p, r)

Entrada: uma seqüência de n números armazenados em um vetor A

Saída: uma seqüência ordenada de n números

1. if p < r

2. then q [(p+r)/2]

3. Merge-Sort (A, p, q)

4. Merge-Sort (A, q+1, r)

5. Merge (A, p, q, r)

Page 4: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Análise do Merge Sort

Dividir: computar o elemento do méio toma

(1) Conquistar: resolver 2 sub-problemas toma 2T(n/2) Combinar: fundir n-elementos toma (n)

Total:T(n) = (1) se n = 1

T(n) = 2T(n/2) + (n) se n > 1

T(n) = (n lg n)

Page 5: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Relações de Recorrência

Recurrências– Método da Substituição– Método da Iteração– Método Mestre

Surgem a partir da abordagem Dividir e Conquistar

(exemplo. MERGE-SORT)T(n) = (1) se n c

T(n) = a T(n/b) + D(n) + C(n) caso contrário

Page 6: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Método da Substituição

Adivinhando a forma das soluções, e então utilizando indução matemática para encontrar as constantes e mostrar que a solução está correta.

Este funciona bem quando é fácil adivinhar. Mas, não há nenhuma maneira gerak de adivinhar a solução correta.

Page 7: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Um Exemplo

Resolver: T(n) = 3T(n/3) + n

T(n) 3c n/3 lg n/3 + n

c n lg (n/3) + n

= c n lg n - c n lg3 + n

= c n lg n - n (c lg 3 - 1)

c n lg n

* O último passo é verdade para

c 1 / lg3.

Page 8: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Fazendo uma Boa Adivinhação

Adivinhando uma solução similar para uma recorrência que você já tenha visto antes– T(n) = 3T(n/3 + 5) + n similar à T(n) = 3T(n/3) + n

quando n é grande, a diferença entre n/3 e (n/3 + 5) é insignificante.

Outra maneira é provar limites superior e inferior para a recorrência e então reduzir o alcance da incerteza.– Comece com T(n) = (n) & T(n) = O(n2) T(n) = (n log n)

Page 9: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Sutilezas

Quando a prova matemática não pode ser obtida por indução, tente ajustar sua adivinhação com um termo de ordem mais baixa. Por exemplo:– Nós adivinhamos T(n) O(n) para T(n) = 3T(n/3)+

4, mas nós temos que

T(n) 3c n/3 + 4 = c n + 4

– Nova adicinhação é T(n) c n - b, onde b 0

T(n) 3(c n/3 - b)+4 = c n - 3b + 4 = c n - b - (2b-4)

Portanto, T(n) c n - b, se 2b - 4 0 ou se b 2

Page 10: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Mudança de Variáveis

Utilize manipulação algébrica para transformar uma recorrência desconhecida em uma similar que você já tenha visto.– Considere T(n) = 2T(n1/2) + lg n

– Chame m = lg n e nós temos

T(2m) = 2T(2m/2) + m

– Ajust S(m) = T(2m) e nós temos

S(m) = 2S(m/2) + m S(m) = O(m lg m)

– Mudando de volta de S(m) para T(n), nós temos T(n) = T(2m) = S(m) = O(m lg m) = O(lg n lg lg n)

Page 11: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Evitando Armadilhas

Cuidado para não utilizar de forma inadequada. Por exemplo:

– Nós podemos erroneamente provar T(n) = O(n) adivinhando que T(n) c n para T(n) = 2T(n/2) + n

T(n) 2c n/2 + n

c n + n

= O(n) Errado!– O erro é que nós não provamos que T(n) c n

Page 12: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Método da Iteração

Para expandir (iterar) a recorrência e expressa-lá como uma somatória de termos dependentes somente n e das condições iniciais.

Técnicas para avaliar somatórias podem ser utilizadasd para fornecer os limites da solução.

A chave é focalizar-se sobre 2 parâmetros– o número de vezes que a recorrência necessita ser iterada

para alcançar uma condição de fronteira– A soma dos termos resultantes de cada nível do processo

de

Page 13: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Um Exemplo

Ressolver: T(n) = 3T(n/4) + n

T(n) = n + 3T(n/4)

= n + 3[n/4] + 9T(n/16)

= n + 3[n/4] + 9 [n/16] + 27T(n/64)

T(n) n + 3n/4 + 9 n/16 + 27n/64 + … + 3log4 n (1)

n (3/4)i + (nlog43)

= 4n+ o(n)

= O(n)

Page 14: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Árvores de Recursão

É uma maneira conveniente de visualizar o que ocorre quando a recursão é iterada. Esta ajuda a organizar a estrutura algébrica necessária para resolver a recorrência. Para T(n) = 2T(n/2) + n2, nós temos

Page 15: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Árvores de Recursão

T(n) = (n2)

Page 16: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Árvores de Recursão

For T(n) = T(n/3) + T(2n/3) + n

T(n) = O(n lg n)

Page 17: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Método Mestre

Este fornece um método “livro de receita” para a resolução de recorrências da forma:

T(n) = a T(n/b) + f(n)

onde a 1 e b 1 são constantes e f(n) é uma função assintoticamente positiva

A solução utilizando o método mestre depende do teorema mestre (a seguir).

Page 18: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

O Teorema Mestre

Assuma que a 1 e b > 1 são contantes, f(n) é função e T(n) está definido para inteiros positivos por meio da recorrência

T(n) = a T(n/b) + f(n)

sendo n/b interpretado como n/b ou como n/b. T(n) pode ser limitado assintoticamente como mostrado a seguir:

1. Se f(n)=O(nlogba-) para alguma constante > 0, então T(n)= (nlogba).

2. Se f(n) = (nlogba), então T(n) = (nlogba lg n).

3. Se f(n) = ( nlogba+ ) para alguma constante > 0, e se a f(n/b) c f(n) para alguma constante c < 1 e n suficientemente grande, então T(n)= (f(n)).

Page 19: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Teorema Mestre Simplicado

Assuma que a 1 e b > 1 são constantes e T(n) é a recorrência

T(n) = a T(n/b) + c nk

definida para n 0.

1. Se a > bk, então T(n) = ( nlogba ).

2. Se a = bk, então T(n) = ( nk lg n ).

3. Se a < bk, então T(n) = ( nk ).

Page 20: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Exemplos

T(n) = 16T(n/4) + n– a = 16, b=4, f(n) = n, assim nlogba = nlog416 = (n2)– Desde que f(n) = O(nlog416 - ) onde = 1 caso 1.– Portanto, T(n) = (nlogba ) = (n2)

T(n) = T(3n/7) + 1– a = 1, b=7/3, f(n) = 1, assim nlogba = nlog 7/3 1 = n0 = 1– Desde que f(n) = O(nlogba)= (1), caso 2.– Portanto, T(n) = (nlogba lg n) = (lg n)

Page 21: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Exemplos (Cont.)

T(n) = 3T(n/4) + n lg n– a = 3, b=4, f(n) = n lg n, nlogba = nlog43 = O(n0.793)– Desde que f(n) = (nlog43 + ) onde 0.2 caso 3.– Portanto, T(n) = (f(n)) = (n lg n)

T(n) = 2T(n/2) + n lg n– a = 2, b=2, f(n) = n lg n, e nlogba = nlog22 = n– f(n) é assintoticamente maior que nlogba, mas não

polinomialmente maior. A razão lg n é assintoticamente menor que qualquer constante positiva n. Logo, o Teorema Mestre não se aplica.

Page 22: UFES Berilhes B. Garcia Dividir-e-Conquistar Recursividade em estruturas –Divida o problema em vários sub- problemas menores que são similares ao original,

UFES Berilhes B. Garcia

Exercícios

Utilize o Método Mestre para resolver as seguintes recorrências: T(n) = 4T(n/2) + n

T(n) = 4T(n/2) + n2

T(n) = 4T(n/2) + n3