Método de substituição de recorrência
O método de substituição é uma técnica utilizada para resolver recorrências, especialmente em algoritmos que têm uma estrutura de recursão. Ele envolve fazer uma suposição sobre a forma da solução e, em seguida, provar essa suposição por indução. Vamos explorar esse método em detalhes, passo a passo.
Estrutura do Método de Substituição
-
Identificação da Recorrência: Primeiro, você deve ter uma recorrência a ser resolvida. Um exemplo típico é:
onde:
é o tempo de execução para um problema de tamanho . é o número de subproblemas. é o tamanho de cada subproblema. é o custo do trabalho fora das chamadas recursivas.
-
Suposição da Forma da Solução: Em seguida, você deve fazer uma suposição sobre a forma da solução. Por exemplo, suponha que
para alguma constante . Essa suposição será testada. -
Substituição na Recorrência: Substitua a suposição na recorrência original. Por exemplo, se você supõe que
para alguma constante , você substitui isso na recorrência: Simplificando isso, você terá:
-
Verificação do Cálculo: Após a substituição, você precisa encontrar uma condição sobre
e que faça a inequação verdadeira. Isso pode envolver escolher um valor apropriado para ou restringir . -
Prova por Indução: A prova geralmente é feita usando indução matemática. Para provar a suposição, você mostra que é verdadeira para um caso base (por exemplo,
), e então você assume que é verdadeira para todos os casos até e prova para .
Exemplo Prático
Vamos aplicar o método de substituição para resolver a seguinte recorrência:
Passo 1: Suposição
Suponha que
Passo 2: Substituição
Substituímos na recorrência:
Passo 3: Simplificação
Agora, queremos mostrar que:
ou seja, queremos garantir que:
Isso é verdade se escolhermos
Passo 4: Prova por Indução
-
Caso base: Para
: está de acordo com
. -
Passo Indutivo: Suponha que a suposição é verdadeira para
e mostre que é verdadeira para .
Conclusão
Após a verificação e a prova por indução, podemos concluir que:
O método de substituição é uma ferramenta poderosa e sistemática para resolver recorrências, especialmente em análises de algoritmos recursivos. Ele permite derivar limites assintóticos, ajudando a entender a eficiência dos algoritmos.