Teorema Mestre e Exemplos Resolvidos

Por
| 

O teorema mestre é um dos métodos mais conhecidos para resolver relações de recorrências provenientes de algoritmos do paradigma de divisão e conquista.

Comparado com outros métodos, ele é simples e intuitivo. Além disso, ele resolve boa parte das relações de recorrência desse paradigma. É claro, não estou dizendo que ele é fácil ou difícil, pois isso depende de cada um.

O objetivo da postagem é apresentar o teorema mestre e alguns exemplos resolvidos.

O texto tem caráter complementar, portanto eu recomendo que você consulte livros que abordam o assunto para ter referências mais ricas sobre o teorema mestre e não limite-se apenas a este artigo.

Teorema mestre

Índice

O Teorema

Para entender o teorema, é necessário que você conheça as notações assintóticas O, Θ e Ω. Caso você não conheça essas notações, procure alguma referência para aprendê-las.

Em síntese, o teorema mestre resolve recorrências que possuem a seguinte forma

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

n é o tamanho do problema. Os valores de a e de b são constantes. Em particular, o valor de a é igual ao número de subproblemas no qual o problema original foi dividido. O valor n/b é o tamanho de cada um desses subproblemas. A função f(n) representa o custo no tempo de cada chamada recursiva do algoritmo analisado.

O teorema é apresentado a seguir

Teorema Mestre (CORMEN, 2012): sejam a1 e b>1 constantes, seja f(n) uma função assintoticamente positiva e seja T(n) definida no domínio dos números inteiros não negativos pela recorrência

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

onde interpretamos que n/b significa n/b ou n/b. Então, T(n) tem os seguintes limites assintóticos:

  • 1. Se f(n)=O(nlogbaϵ) para alguma constante ϵ>0, então T(n)=Θ(nlogba).
  • 2. Se f(n)=Θ(nlogba), então T(n)=Θ(nlogbalgn).
  • 3. Se f(n)=Ω(nlogba+ϵ) para alguma constante ϵ>0, e se af(n/b)cf(n) para alguma constante c<1 e todos os n suficientemente grandes, então T(n)=Θ(f(n)).

Análise do Teorema e Algumas Explicações

A primeira coisa a ser feita para aplicar o teorema mestre é identificar as constantes a e b e a função f(n).

Certo cuidado deve ser tomado na hora de identificar a constante b. Observe que ela é o divisor na divisão n/b. Quando temos T(2n/3), por exemplo, o valor de b é igual a 3/2, pois 2n3=n3/2.

Também devemos nos atentar ao valor das constantes. O valor de a deve ser maior ou igual a 1, afinal o algoritmo deve gerar pelo menos um subproblema (quando não é caso base, obviamente). Já a constante b deve ser maior do que 1, senão ao invés de estarmos dividindo o problema, estaríamos gerando subproblemas maiores que o problema original.

Em todos os três casos, devemos calcular o valor de logba e comparar as funções f(n) e nlogba.

O valor de ϵ nos casos 1 e 3 pode ser qualquer valor real maior do que zero que satisfaça a notação assintótica do caso analisado. Se tal valor não existir, então devemos tentar outro caso.

Se você preferir, o logaritmo binário no caso 2 (lgn=log2n) pode ser substituído por logn. Não faz diferença em termos de notação assintótica.

Ir para o índice

Exemplos e Exercícios Resolvidos

Acredito que a melhor forma de aprender o teorema mestre é através de exercícios e exemplos, pois não é tão simples memorizá-lo, mesmo que sejam apenas três casos.

As recorrências a seguir foram retiradas do livro Algoritmos: teoria e prática, listado na seção de referências no final da postagem.

Exemplo 1

Seja a recorrência

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

Vamos identificar as constantes a, b e a função f(n):

a=9,b=3,f(n)=n

As duas constantes e a função satisfazem as condições do teorema. Isto é, a=91, b=3>1 e f(n)=n é uma função assintoticamente positiva, pois a função é positiva quando n tende ao infinito.

Agora vamos calcular o valor de logba:

logba=log39=2

Para o primeiro caso, temos que verificar se f(n)=n é O(nlogbaϵ)=O(n2ϵ), para alguma constante ϵ>0. Se escolhermos ϵ=1, então O(n2ϵ)=O(n), portanto f(n)=n é O(n). Logo, como a recorrência satisfaz o primeiro caso do teorema mestre, então T(n)=Θ(nlogba)=Θ(n2).

Uma vez que o primeiro caso foi satisfeito, então não precisamos analisar os demais casos.

Ir para o índice

Exemplo 2

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

Para essa recorrência, temos

a=11,b=32>1,f(n)=1

Para entender melhor como esses valores foram obtidos, podemos reescrever a recorrência da seguinte forma

T(n)=1×T(n3/2)+1

Agora vamos calcular o valor de logba:

logba=log3/21=0

Para o primeiro caso, teríamos O(nlogbaϵ)=O(nϵ), porém não é possível encontrar uma constante ϵ>0 de forma que f(n) seja O(nϵ). Isso só seria possível se ϵ fosse negativo ou zero.

No segundo caso, temos Θ(nlogba)=Θ(n0)=Θ(1). Como f(n)=1 é Θ(1), então o segundo caso é satisfeito. Portanto, T(n)=Θ(nlogbalgn)=Θ(n0lgn)=Θ(lgn) ou, equivalentemente, T(n)=Θ(logn).

Ir para o índice

Exemplo 3

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

Temos que

a=3,b=4,f(n)=nlog2n

Primeiramente, calculamos logba:

logba=log43=0,7924812504

O primeiro e o segundo caso não são satisfeitos. Não irei dar explicações detalhadas para não estender a postagem.

Analisando o terceiro caso, podemos escolher ϵ=0,2075187496 (eu fiz essa escolha para que a soma logba+ϵ seja igual a 1, pois fica mais fácil de fazer as contas). Dessa forma,

Ω(nlogba+ϵ)=Ω(n0,7924812504+0,2075187496)=Ω(n)

e f(n)=nlog2n=Ω(n), pois f(n) é assintoticamente maior.

Entretanto, ainda precisamos verificar se a condição de regularidade af(n/b)cf(n) também é satisfeita:

af(n/b)cf(n)3×n4log2n4cnlog2n34n(log2nlog24)cnlog2n34n(log2n2)cnlog2n34nlog2n2×34ncnlog2n34nlog2n32ncnlog2n

Se escolhermos c=3/4<1, então

34nlog2n32n34nlog2n32n032n0n0

Ou seja, a condição é satisfeita para c=3/4 e qualquer n maior do que zero. Concluímos que T(n) se enquadra no terceiro caso do teorema mestre, portanto T(n)=Θ(f(n))=Θ(nlog2n).

Observação: em geral, o valor de c não é único.

Ir para o índice

Exemplo 4

A relação de recorrência a seguir é um contraexemplo no qual o teorema mestre não é aplicável, isto é, nenhum dos três casos é satisfeito (CORMEN, 2012)

T(n)=2T(n/2)+nlog2n

Primeiramente, identificamos a, b e f(n):

a=2,b=2,f(n)=nlog2n

Agora, calculamos o valor logba

logba=log22=1

Consequentemente, temos que nlogba=n. É fácil de ver que os casos 1 e 2 não são satisfeitos. Vamos analisar o caso 3, isto é, tentaremos mostrar que f(n)=nlog2n=Ω(n1+ϵ). Para tentar realizar essa demonstração, utilizarei a definição da notação Ômega Ω do livro do Cormen:

0cn1+ϵf(n)0cnnϵnlog2n

Como n é positivo, então podemos dividir a desigualdade por nnϵ sem que o sentido da desigualdade se altere

0clog2nnϵ

Como ϵ>0, então o termo log2nnϵ é decrescente, pois a função nϵ é assintoticamente maior que a função log2n. Mesmo se escolhermos um ϵ muito próximo de zero, a função nϵ será maior do que log2n a partir de algum valor de n. Em síntese,

limnlog2nnϵ=0,ϵ>0

Uma das consequências disso é que é impossível encontrar uma constante positiva c, tal que

clog2nnϵ

Portanto, terceiro caso não é satisfeito. Assim, o teorema mestre não se aplica à relação de recorrência T(n).

De acordo com Cormen (2012), isso ocorre porque a função f(n)=nlog2n não é polinomialmente maior que n1+ϵ.

Ir para o índice

Observações Gerais

Caso Base

As recorrências desta postagem foram apresentadas sem um caso base. Isso não significa que ele não existe. A razão para isso é que o caso base não é utilizado nos cálculos.

Algo similar ocorre quando utilizamos o método de Akra-Bazzi para resolver recorrências.

f(n) é uma Notação Assintótica

Frequentemente, a função f(n) é dada em termos de alguma notação assintótica. Por exemplo,

T1(n)=2T(n/2)+Θ(n)

T2(n)=T(n/5)+O(logn)

Nesse caso, podemos assumir que f(n) é a função indicada na notação. Para T1(n), teríamos f(n)=n e, para T2(n), teríamos f(n)=logn.

Limitações do Teorema

Como vimos no exemplo 4, existem recorrências que o teorema mestre não é capaz de resolver. Para essas recorrências, devemos empregar outro método.

Essa limitação ocorre por causa de lacunas existentes entre os casos 1 e 2 e entre os casos 2 e 3, que estão relacionadas ao fato de a função f(n) não ser polinomialmente menor ou maior do que nlogba, respectivamente (CORMEN, 2012).

Além disso, se cairmos no caso 3, ainda temos que verificar a condição de regularidade, que pode não ser satisfeita.

Ir para o índice

Leia também

Aproveite e leia também os seguintes artigos

Ir para o índice

Referências

CORMEN, T. H. et al. Algoritmos: teoria e prática. 3 ed. Rio de Janeiro: Elsevier, 2012.

Sugestões de livros para estudantes de computação na Amazon (patrocinado): Lista de Livros

Obrigado pela leitura! Se você puder, considere apoiar financeiramente o Blog Cyberini, Chave Pix: cyberpix9@gmail.com

Doar com PayPal

Siga o blog

Redes sociais: Facebook, Twitter, YouTube, Pinterest, Instagram, Telegram

Importante: utilize o bom senso na hora de comentar. Acesse a política de privacidade para maiores informações sobre comentários.

Nenhum comentário:

Postar um comentário

Este site usa cookies para fornecer serviços, analisar o tráfego e exibir publicidade personalizada, conforme a nossa política de privacidade. Seus dados, como IP e user agent, são compartilhados com nossos parceiros (como o Google). Saiba Mais

RecusarAceitar