Teorema mestre (análise de algoritmos)

Fonte: testwiki
Saltar para a navegação Saltar para a pesquisa

Na análise de algoritmos, o teorema mestre para recorrências de divisão e conquista fornece uma análise assintótica (usando a notação Grande-O) para relações de recorrência que ocorrem na análise de muitos algoritmos de divisão e conquista. A abordagem foi apresentada pela primeira vez por Jon Bentley, Dorothea Haken, e James B. Saxe , em 1980, onde foi descrito como um "método unificador" para a solução de tais recorrências.[1] O nome "teorema mestre" foi popularizado pelo livro de algoritmos amplamente utilizado Algoritmos: teoria e prática por Cormen, Leiserson, Rivest e Stein.

Nem todas as relações de recorrência podem ser resolvidas com o uso do teorema; suas generalizações incluem o método de Akra-Bazzi.

Introdução

Considere um problema que pode ser resolvido usando um algoritmo recursivo como o algoritmo a seguir:

 procedimento p(entrada x de tamanho n):
 se n < alguma constante k:
   Resolver x diretamente, sem recursão
 senão:
   Criar a subproblemas de x, cada um com tamanho n/b
   Chamar o procedimento p recursivamente em cada subproblema
   Combinar os resultados dos subproblemas

O algoritmo acima divide o problema em um número de subproblemas recursivamente, cada subproblema sendo de tamanho Predefinição:Math. A sua árvore de chamadas tem um nó para cada chamada recursiva, com os filhos do nó sendo as outras chamadas feitas a partir dessa chamada. As folhas da árvore são os casos base da recursão, os subproblemas (de tamanho menor do que k) que não se resolve recursivamente. O exemplo acima teria a nós-filhos em cada nó que não fosse uma folha. Cada nó realiza uma quantidade de trabalho que corresponde ao tamanho do sub problema n passado para essa instância da chamada recursiva e dada por f(n). A quantidade total de trabalho realizado pelo algoritmo completo é a soma do trabalho realizado por todos os nós na árvore.O tempo de execução de um algoritmo, como o 'p' acima em uma entrada de tamanho 'n', geralmente denotado por T(n), pode ser expresso pela relação de recorrência

T(n)=aT(nb)+f(n)

onde f(n) é o tempo para criar os subproblemas e combinar seus resultados no procedimento acima. Essa equação pode ser substituída, sucessivamente, por si mesma e se expandir para obter uma expressão para a quantidade total de trabalho realizado.[2] O teorema mestre permite que muitas relações de recorrência desta forma serem convertidas para notação teta diretamente, sem fazer uma expansão da relação recursiva.

Forma genérica

O teorema mestre às vezes produz limites assintoticamente rígidos para algumas recorrências de algoritmos de divisão e conquista,que dividem uma entrada em subproblemas menores de tamanhos iguais, resolvem os subproblemas recursivamente e combinam as soluções dos subproblemas para fornecer uma solução para o problema original. O tempo para tal algoritmo pode ser expresso adicionando o tempo de execução no nível superior de sua recursão (para dividir os problemas em subproblemas e depois combinar as soluções de subproblemas) junto com o tempo de execução nas chamadas recursivas do algoritmo. Se denota o tempo total para o algoritmo em uma entrada de tamanho e indica a quantidade de tempo gasto no nível superior da recorrência, então o tempo pode ser expresso por uma relação de recorrência que assume a forma:

T(n)=aT(nb)+f(n)Aqui n é o tamanho da entrada de um problema, a é o número de subproblemas na recursão, e b é o fator pelo qual o tamanho do subproblema é reduzido em cada chamada recursiva (por exemplo, se o valor for 2, então o subproblema terá metade do tamanho). O teorema abaixo também assume um caso base para a recorrência, T(n)=Θ(1) quando n é menor que algum limite κ>0.

Recorrências desta forma frequentemente satisfazem um dos três casos a seguir, baseado em como o trabalho para dividir/recombinar o problema f(n) relaciona-se com a expoente crítico. (A tabela abaixo utiliza o padrão de big O notation.)

ccrit=logba=log(#subproblemas)/log(tamanho relativo do subproblema)
Caso Descrição Condição sobre f(n) em relação a ccrit, i.e. logba Limite do Teorema Mestre Exemplos notacionais
1 O trabalho para dividir/recombinar um problema é reduzido pelos subproblemas.

i.e. a árvore de recursão é leaf-heavy

Quando f(n)=O(nc) onde c<ccrit

(limitado superiormente por um polinômio de expoente menor)

... então T(n)=Θ(nccrit)

(O termo de divisão não aparece; a estrutura da árvore recursiva domina.)

Se b=a2 and f(n)=O(n1/2ϵ), então T(n)=Θ(n1/2).
2 O trabalho para dividir/recombinar um problema é comparável aos subproblemas. Quando f(n)=Θ(nccritlogkn) para qualquer k0

(faixa limitada pelo polinômio de expoente crítico, vezes zero ou mais opcional logs)

... então T(n)=Θ(nccritlogk+1n)

(O limite é o termo de divisão, em que o log é aumentado por uma única potência.)

Se b=a2 e f(n)=Θ(n1/2), então T(n)=Θ(n1/2logn).

Se b=a2 e f(n)=Θ(n1/2logn), então T(n)=Θ(n1/2log2n).

3 O trabalho para dividir/recombinar um problema domina os subproblemas.

i.e. a árvore de recursão é root-heavy.

Quando f(n)=Ω(nc)onde c>ccrit

(limitado inferiormente por um polinômio de maior expoente)

... isso não produz necessariamente nada. Se é sabido ainda que
af(nb)kf(n) para alguma constante k<1 e suficientemente grande n (frequentemente chamado de condição de regularidade)

então o total é dominado pelo termo de divisão f(n):

T(n)=Θ(f(n))
Se b=a2 e f(n)=Ω(n1/2+ϵ) e a condição de regularidade é satisfeita, então T(n)=Θ(f(n)).

Uma extensão útil do caso 2 abrange todos os valores de k[3]

Caso f(n) ccrit, i.e. logba Limite do teorema mestre Exemplos notacionais
2a Quando f(n)=Θ(nccritlogkn) para qualquer k>1 ... entãoT(n)=Θ(nccritlogk+1n)

(O limite é o termo de divisão, em que o log é aumentado por uma única potência.)

b=a2 ef(n)=Θ(n1/2/log1/2n), entãoT(n)=Θ(n1/2log1/2n).
2b Quando f(n)=Θ(nccritlogkn) fpara k=1 ... then T(n)=Θ(nccritloglogn)

(O limite é o termo de divisão, em que o log recíproco é substituído por um log iterado.)

Se b=a2 f(n)=Θ(n1/2/logn), então T(n)=Θ(n1/2loglogn).
2c Quandof(n)=Θ(nccritlogkn) para qualquer k<1 ... then T(n)=Θ(nccrit)

(O limite é o termo de divisão, onde o log desaparece.)

Se b=a2 ef(n)=Θ(n1/2/log2n), então T(n)=Θ(n1/2).

Exemplos

Exemplo do caso 1

T(n)=8T(n2)+1000n2

Como se pode ver a partir da fórmula acima:

a=8,b=2,f(n)=1000n2, então
f(n)=O(nc), onde c=2

Em seguida, vamos ver se conseguimos satisfazer a condição do caso 1:

logba=log28=3>c.

Do primeiro caso do teorema mestre, segue que

T(n)=Θ(nlogba)=Θ(n3)

(de fato, a solução exata da relação de recorrência é T(n)=1001n31000n2, assumindo T(1)=1).

Exemplo do caso 2

T(n)=2T(n2)+10n

Como podemos ver na fórmula acima as variáveis possuem os seguintes valores:

a=2,b=2,c=1,f(n)=10n
f(n)=Θ(nclogkn) onde c=1,k=0

Em seguida, vamos ver se conseguimos satisfazer a condição do caso 2:

logba=log22=1 e, portanto, c=logba

Do segundo caso do teorema mestre, segue que

T(n)=Θ(nlogbalogk+1n)=Θ(n1log1n)=Θ(nlogn)

Assim, a relação de recorrência T(n) está em Θ(nlogn).

(Este resultado é confirmado pela solução exata da relação de recorrência, que é T(n)=n+10nlog2n, assumindo T(1)=1.)

Exemplo do caso 3

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

Como podemos ver na fórmula acima as variáveis possuem os seguintes valores:

a=2,b=2,f(n)=n2
f(n)=Ω(nc), onde c=2

Em seguida, vamos ver se a condição do caso 3 é satisfeita:

logba=log22=1, e portanto, sim, c>logba

A condição de regularidade também é satisfeita:

2(n24)kn2, escolhendo k=1/2

Então, pelo terceiro caso do teorema mestre:

T(n)=Θ(f(n))=Θ(n2).

Assim, a relação de recorrência T(n) está em Θ(n2), que está em conformidade com o f(n) da fórmula original.

(Esse resultado é confirmado pela solução exata da relação de recorrência, que é T(n)=2n2n, assumindo T(1)=1.)

Equações inadmissíveis

As equações a seguir não podem ser resolvidas utilizando o teorema mestre:[4]

  • T(n)=2nT(n2)+nn
    a não é uma constante; o número de subproblemas deveria ser fixo
  • T(n)=2T(n2)+nlogn
    diferença não polinomial entre f(n) e nlogba (veja abaixo; a versão estendida se aplica)
  • T(n)=0.5T(n2)+n
    a<1 não pode haver menos que um subproblema
  • T(n)=64T(n8)n2logn
    f(n), que é o tempo de combinação (dos subproblema), não é positivo
  • T(n)=T(n2)+n(2cosn)
    caso 3, mas viola a condição de regularidade.

No segundo exemplo inadmissível acima, a diferença entre f(n) e nlogba pode ser expressa com a relação f(n)nlogba=n/lognnlog22=nnlogn=1logn. É claro que 1logn<nϵ para qualquer constante ϵ>0. Portanto, a diferença não é polinomial e a forma básica do Teorema Mestre não se aplica. A forma estendida (caso 2b) aplica-se, dando a solução T(n)=Θ(nloglogn).

Aplicação em algoritmos comuns

Algortimo Relação de recorrência Tempo de execução Comentário
Pesquisa binária T(n)=T(n2)+O(1) O(logn) Aplicado o caso do teorema mestre c=logba, onde a=1,b=2,c=0,k=0[5]
Percurso em árvore binária T(n)=2T(n2)+O(1) O(n) Aplicado o caso do teorema mestre c<logba ondea=2,b=2,c=0
Pesquisa ótima de matriz ordenada T(n)=2T(n2)+O(logn) O(n) Aplica o caso do método de Akra-Bazzi para p=1g(u)=log(u) Θ(2nlogn)
Merge sort T(n)=2T(n2)+O(n) O(nlogn) Aplica o caso do teorema mestre c=logba, onde a=2,b=2,c=1,k=0

Ver também

Notas

Predefinição:Reflist

Referências

  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Introdução a Algoritmos, Segunda Edição. MIT Press e McGraw–Hill, 2001. Predefinição:ISBN. Seções 4.3 (O teorema mestre) e 4.4 (Prova do teorema mestre), pp. 73–90.
  • Michael T. Goodrich e Roberto Tamassia. Algorithm Design: Foundation, Analysis, and Internet Examples. Wiley, 2002. Predefinição:ISBN. O teorema mestre (incluindo a versão de Caso 2 incluídos aqui, que é mais forte do que o do CLRS) está no pp. 268-270.

Ligações externas

  1. Predefinição:Citation
  2. Duke University, "Big-Oh for Recursive Functions: Recurrence Relations", http://www.cs.duke.edu/~ola/ap/recurrence.html
  3. Chee Yap, A real elementary approach to the master recurrence and generalizations, Proceedings of the 8th annual conference on Theory and applications of models of computation (TAMC'11), pages 14–26, 2011. Online copy.
  4. Massachusetts Institute of Technology (MIT), "Master Theorem: Practice Problems and Solutions", http://www.csail.mit.edu/~thies/6.046-web/master.pdfPredefinição:Ligação inativa, Arquivado em http://web.archive.org/web/20110809082605/http://people.csail.mit.edu/thies/6.046-web/master.pdf
  5. Dartmouth College, http://www.math.dartmouth.edu/archive/m19w03/public_html/Section5-2.pdf