Resolvendo a relação de recorrência

7

Resolvendo a relação de recorrência . O livro do qual este exemplo é afirma falsamente que adivinhando e depois argumentando T(n)=2T(n/2)+n
T(n)=O(n)T(n)cn

T(n)2(cn/2)+ncn+n=O(n) wrong!!

uma vez que é constante. O erro é que não provamos a forma exata da hipótese indutiva.c

Acima, citei exatamente o que o livro diz. Agora, minha pergunta é por que não podemos escrever onde e agora temos e, portanto, ?cn+n=dnd=c+1T(n)dnT(n)=O(n)

Nota:

  1. A resposta correta éT(n)=O(nlogn).
  2. O livro que estou me referindo aqui é Introdução aos algoritmos de Cormen et al., Página 86, 3ª edição.
Saurabh
fonte
4
Não, você não pode. Sua hipótese de indução é , e é isso que você precisa provar. Na verdade, a recorrência não resolve para . T(n)cnO(n)
A.Schulz

Respostas:

7

Os autores dão a resposta:

O erro é que não provamos a forma exata da hipótese indutiva, ou seja, que .T(n)cn

É verdade que isso é difícil de entender se você não está acostumado a fazer induções (certo), porque elas não fazem a indução explícita / rigorosamente. Em resumo: você precisa ter uma constante para todos os , mas essa (des) prova constrói muitos (um por ).cnn


Por muito tempo, lembre-se do que significa:T(n)O(n)

cN.n0N.nn0.T(n)cn

ou equivalente,

cN.nNT(n)cn .

A segunda forma funciona melhor para uma indução, como você conhece a âncora. Então você precisa de uma constante que forneça um limite superior para todos os .c n

Vamos inspecionar o que a indução faz:

  • Âncora de indução: a âncora de não é explicitamente dada, mas é constante, portanto, encontramos um adequado .Tc
  • Hipótese de indução: Há alguns para que para todos os , para alguns arbitrários mas fixos .cT(k)cnknn
  • Etapa indutiva: como mostrado na pergunta, construa para que .d>cT(n+1)dn

Então, com efeito, construímos uma nova constante para cada . Isso não se encaixa na definição de ! E, pior, é completamente sem sentido: toda função pode ser "delimitada" por qualquer outra função se você puder ajustar o fator com .nOn

Em relação à prova de indução, deve fazer parte da reivindicação (e é, oculta no ), que está ligada "fora" da indução. Então, o mesmo aparece em âncora, hipótese e passo. Veja a última parte desta resposta para um exemplo.cOc

Rafael
fonte
Obrigado, entendi o ponto e, é claro, não faz sentido ter uma nova constante para cada . Mas como você escreveu "ou equivalentemente ..." (terceira declaração), ou seja, podemos sempre encontrar um para o qual é . ncn01
Saurabh
2
Na prática, Geralmente funciona. c=1010100!
31412 JeffE
@SaurabhHota: Dado e a partir da primeira forma, funciona como constante para a segunda forma. A outra direção é imediata, ou seja, a constante é carregada com (ou um valor arbitrário, de fato). n0cc+maxnn0T(n)/nn0=1
Raphael