Resolvendo uma relação de recorrência com √n como parâmetro


18

Considere a recorrência

T(n)=nT(n)+cn

para n>2 com alguma constante positiva c , e T(2)=1 .

Conheço o teorema do mestre para resolver recorrências, mas não tenho certeza de como poderíamos resolver essa relação usando-a. Como você aborda o parâmetro raiz quadrada?


5
O teorema do mestre não é aplicável aqui; n não pode ser escrito comonb . O que mais você já tentou?
Raphael

@ Rafael: Eu tentei o método de substituição, mas parecia ficar preso em qual valor eu deveria escolher substituir.
candidato a

1
Que tal "desdobrar a recorrência algumas vezes, observar um padrão, adivinhar a solução e provar "?
Raphael

Bem, esta é a primeira vez que encontro esse tipo, talvez alguma ajuda aqui me ajude a resolver problemas futuros da natureza com facilidade.
candidato a

Como você mencionou o Teorema Mestre, presumo que você precise resolver essa relação para limites assintóticos e realmente não precise da expressão de forma fechada. Dada a seguir, existem algumas boas soluções para encontrar a expressão de forma fechada, que também fornece a complexidade assintótica. No entanto, se você precisar apenas da complexidade assintótica, a análise será mais simples. Dê uma olhada aqui para uma boa explicação sobre como encontrar complexidades assintóticas, com uma boa solução intuitiva para a instância do seu problema.
Paresh

Respostas:


9

Usaremos a sugestão de Raphael e revelaremos a recorrência. A seguir, todos os logaritmos são da base 2. Obtemos

ondeβ(n)é quantas vezes você precisa obter a raiz quadrada para começar com n e atingir 2. Acontece queβ(n)=loglogn. Como você pode ver isso? Considerar:

T(n)=n1/2T(n1/2)+cn=n3/4T(n1/4)+n1/2cn1/2+cn=n7/8T(n1/8)+n3/4cn1/4+2cn=n15/16T(n1/16)+n7/8cn1/8+3cn=n2T(2)+cnβ(n).
β(n)β(n)=loglogn Então, o número de vezes que você precisa obter a raiz quadrada para atingir 2 é a solução para1
n=2lognn1/2=212lognn1/4=214logn
, que éloglogn. Portanto, a solução para a recursão écnloglogn+112tlogn1loglogn. Para tornar isso absolutamente rigoroso, devemos usar o método de substituição e ter muito cuidado com a forma como as coisas se completam. Quando tiver tempo, tentarei adicionar esse cálculo à minha resposta.cnloglogn+12n

"Você tem que tomar a raiz quadrada vezes" - é algo que um iniciante pode-se esperar para ver? Além disso, seu resultado não se encaixa no Yuval; é pretendido por apenas assintoticamente? loglogn
Raphael

@Raphael: Yuval cometeu um erro, que agora está corrigido. Vou explicar a raiz quadrada na minha resposta.
quer

3
Outra idéia para ver que a recursão leva é a seguinte: Ao pegar a raiz quadrada de n, você reduz pela metade os dígitos necessários para a representação binária de n . Portanto, sua entrada precisa de w = log n bits e você divide o tamanho da palavra por 2 para cada nível de recursão. Portanto, você para após as etapas log w = log log n . O(loglogn)nnw=lognlogw=loglogn
A.Schulz

10

No seu comentário, você mencionou que tentou a substituição, mas ficou preso. Aqui está uma derivação que funciona. A motivação é que gostaríamos de nos livrar do multiplicador no lado direito, deixando-nos algo que se parece comU(n)=U(n. Nesse caso, as coisas funcionam muito bem:U(n)=U(n)+something

Agora vamos simplificar ainda mais as coisas, alterando para logs (uma vez quelg

T(n)=n T(n)+nso, dividing by n we getT(n)n=T(n)n+1and letting n=2m we haveT(2m)2m=T(2m/2)2m/2+1
). Seja S ( mlgn=(1/2)lgn Aha! Esta é uma recorrência bem conhecida com a solução S(m)=Θ(lgm) Retornando aT(
S(m)=T(2m)2mso our original recurrence becomesS(m)=S(m/2)+1
S(m)=Θ(lgm)
, temos então, com n = 2 m (e então m = lg n ), T ( n )T()n=2mm=lgn Então T ( n ) = Θ
T(n)n=Θ(lglgn)
.T(n)=Θ(nlglgn)

6

Se você escrever você terá T ( m ) = mm=logn .T(m)=m2T(m2)+c2m 

Agora você sabe que a árvore de recursão tem alta ordem e, novamente, não é difícil vê-lo O ( 2 m ) em cada nível, portanto, o tempo total de execução é: O ( ( log m ) 2 m ) , que conclui O ( n log log n ) para nO(logm)O(2m) O((logm)2m) O(nloglogn) n .

Ao todo, quando você vê oun annab,a<b  , é bom verificar o logaritmo.

PS: Claro que a prova deve incluir mais detalhes por eu pulei eles.


2

n=22k

T(n)=T(22k)=22k1T(22k1)+c22k=22k1+2k2T(22k2)+c(22k+22k)==22k1+2k2++20T(220)+c(22k+22k++22k)=22k1+ck22k=(cloglogn+1/2)n.

Edit: Thanks Peter Shor for the correction!


How did you come up with 22k? Note for OP: "" is not a proof, you'll have to provide that still (usually by induction).
Raphael

@Raphael: It's nearly a proof. You just need to show that it's also correct for numbers not of the form 22k.
Peter Shor

Actually, the recurrence is only well-defined for numbers of the form 22k, since otherwise, at some point n wouldn't be an integer, and you'll never reach the base case T(2).
Yuval Filmus

1
If this recurrence actually came from an algorithm, it would probably really be something more like T(n)=nT(n)+cn.
Peter Shor

1

Unravel the recurrence once as follows:

T(n)=n T(n)+n=n1/2(n1/4 T(n1/4)+n1/2)+n=n11/4 T(n1/4)+2n.

Continuing the unraveling for k steps, we have that:

T(n)=n11/2kT(n1/2k)+kn.

These steps will continue until the base case of n1/2k=2. Solving for k we have:

n1/2k=2logn=2kk=loglogn.

Substituting k=loglogn into the unraveled recurrence, we have

T(n)=n2T(2)+nloglogn.

2
Could you rewrite your picture to MathJax? We discourage images with text as the answers.
Evil

1
@PKG it seems like your edit is slightly different and also you explain steps, maybe you could answer on your own.
Evil
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.