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)
∃c∈N.∃n0∈N.∀n≥n0.T(n)≤cn
ou equivalente,
∃c∈N.∀n∈NT(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)≤cnk≤nn
- 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