Divisão e conquista
Merge sort, subvetor máximo, exponenciação e Hanoi, com recorrências e as condições do teorema mestre.
Para ordenar [8,3,6,1], podemos ordenar [8,3] e [6,1] separadamente e fundir as respostas ordenadas. A divisão e conquista resolve subproblemas menores por recursão e combina as soluções parciais numa solução completa.
A prova tem duas obrigações: mostrar que a divisão cobre todos os casos do problema inteiro e que a combinação reconstrói a resposta a partir das partes. O custo conta as chamadas recursivas, o tamanho de cada uma e o trabalho feito fora delas. Dividir a entrada não garante por si só um algoritmo rápido, como mostra Hanoi no fim da lição.
Merge sort
Divide um vetor em duas metades, ordena cada uma e funde os dois vetores ordenados. Na fusão, compara os primeiros elementos ainda não usados e retira o menor. Quando um lado acaba, acrescenta o restante do outro.
Na fusão de [3,8] com [1,6], escolhemos 1, depois 3, depois 6 e finalmente 8. Antes de cada escolha, a saída já contém os menores elementos retirados em ordem, e os próximos candidatos são os menores ainda disponíveis de cada lado, por isso retirar o menor mantém o invariante. Por indução no tamanho, as metades estão ordenadas e a fusão ordena o vetor inteiro.
Escolher primeiro o elemento da metade esquerda em empate preserva a ordem original dos elementos iguais, tornando o algoritmo estável. Trocar essa regra não altera a ordenação por valor, mas pode perder estabilidade.
Para potência de dois,
No nível há subproblemas de tamanho , com trabalho total . Há níveis até às folhas, logo . Arredondar tamanhos não muda a ordem. A implementação habitual usa espaço auxiliar para fusão e para chamadas.
Teorema mestre
O formato é , com , constantes e um caso base de custo constante. Compara com , o custo associado às folhas.
| Condição | Resultado |
|---|---|
| para algum | |
| e para algum , a partir de certo tamanho |
A diferença polinomial nos casos 1 e 3 e a condição de regularidade do caso 3 fazem parte do enunciado. Não concluas só pelo sinal de uma comparação informal.
Em , temos e aplica-se o primeiro caso: . Com trabalho , dá ; com trabalho , dá e a regularidade verifica-se porque .
Há extensões para , mas as três linhas acima não resolvem qualquer função. Uma recorrência como não tem subproblemas de tamanho . Usa expansão ou soma: .
Subvetor que atravessa o meio
Para um intervalo contíguo não vazio de soma máxima, divide entre os índices e . A resposta está totalmente à esquerda, totalmente à direita ou atravessa a divisão.
O terceiro caso é a soma do melhor sufixo da esquerda com o melhor prefixo da direita. Percorre da divisão para fora, acumulando somas e guardando os melhores extremos. Qualquer intervalo que atravessa contém esses dois pedaços, portanto escolher os melhores independentemente maximiza o cruzamento.
No vetor [-4,3,-1,5,-6,2], divide depois do . Na esquerda, o melhor intervalo é [3], soma 3; na direita é [5], soma 5. O melhor sufixo da esquerda é [3,-1], soma 2. O melhor prefixo da direita é [5], soma 5. O cruzamento soma 7 e vence.
No caso base de um elemento, devolve o próprio elemento. Inicializar sufixos ou prefixos a zero admite uma parte vazia e pode falsear a variante não vazia com valores negativos.
A procura do cruzamento custa , dando . Podemos devolver com cada subproblema a soma total, melhor prefixo, melhor sufixo e melhor intervalo. Com estes quatro resumos, a combinação custa e a recorrência passa a . Isso exige mudar a informação devolvida, não apenas retirar o ciclo da combinação.
Exponenciação por quadrados
Para inteiro , calcular por multiplicações sucessivas exige multiplicações quando . Usamos
Calcula uma vez e guarda-o. Para , obtemos , , e . A recorrência é e o número de multiplicações é .
Chamar a mesma função duas vezes para as duas parcelas do quadrado daria e desperdiçaria o resultado. Se os inteiros tiverem precisão arbitrária, o custo de cada multiplicação cresce com o número de bits. O limite logarítmico conta multiplicações, não afirma tempo logarítmico em bits para produzir um número com muitos dígitos.
Pico de vetor estritamente unimodal
Um vetor é estritamente unimodal quando cresce de forma estrita até um pico e depois decresce de forma estrita. Com , o pico é no índice . Só esta hipótese permite descartar metade por comparação local.
Compara com no meio. Se , o pico está à direita; se , está à esquerda ou é . A igualdade nunca acontece no caso estrito. Cada passo reduz o intervalo a cerca de metade, com trabalho fora da chamada, logo .
Usando índices de 0 a 4 e , começamos com . Como , conservamos os índices 0 a 2. Agora e , pelo que conservamos apenas o índice 2. O pico é 5.
Com repetições, comparar dois valores iguais pode esconder um pico dos dois lados. Em e , os índices 3 e 4 contêm 1 em ambos os vetores, mas o pico está em lados opostos. Em geral, um vetor de valores 1 com uma única ocorrência de 3 é fracamente unimodal, seja qual for a posição do 3. Valores iguais não localizam esse pico; no pior caso é preciso examinar posições. A Questão 7 do primeiro mini-teste (Spring 2026) pede o algoritmo no caso estrito e pergunta pelo caso fraco com repetições.
Torres de Hanoi
Os discos começam empilhados por tamanho, com o maior em baixo. Só podemos mover o disco do topo, um de cada vez, e nunca colocar um maior sobre um menor. Para mover discos da haste para , usando , precisamos de mover primeiro os pequenos para , mover o maior de para e mover os pequenos de para .
O caso não faz movimentos. A recorrência para o número de movimentos é
com solução . Por indução, se , então .
Este número também é um limite inferior: antes de mover o maior, todos os pequenos têm de sair da sua haste e do destino; depois têm de regressar ao destino. As duas fases exigem pelo menos movimentos cada. O algoritmo atinge esse mínimo.
Não aplica o teorema mestre, pois o tamanho diminui por 1. Divisão e conquista é uma técnica de desenho, não uma garantia de custo polinomial: gerar a sequência custa , embora a pilha tenha apenas profundidade .
Exercícios
Derivar duas recorrências
A faz três chamadas de tamanho n/3 e combina em Θ(n). B faz duas chamadas de tamanho n-1 e combina em Θ(1). Deriva a complexidade de cada um e indica onde podes aplicar o teorema mestre.
Pista
Escreve o tamanho das chamadas sem o substituir por outro formato.
Mais uma pista
Para A, n elevado a log_3 3 é n. Para B, expande os níveis que duplicam o número de chamadas.
Solução
A tem T(n)=3T(n/3)+Θ(n), caso equilibrado do teorema mestre, dando Θ(n log n). B tem T(n)=2T(n-1)+Θ(1), que não tem a forma n/b e, por isso, não admite esse teorema. A árvore de B duplica em cada um de n níveis, dando Θ(2^n) com caso base constante. Para entradas grandes, A cresce menos, mas a escolha só é válida se ambos resolverem o problema pedido.
Confere a tua resposta:
- Escrevi as duas recorrências corretas.
- Obtive Θ(n log n) e Θ(2^n).
- Não apliquei o teorema mestre a B.
Erros frequentes
Trocar n-1 por n/2 altera a recorrência. Uma técnica recursiva não tem automaticamente custo logarítmico.
Um máximo que usa as duas metades
Divide [2,-5,4,3,-2,1] depois do 4. Calcula o melhor sufixo da esquerda, o melhor prefixo da direita e a soma do melhor intervalo que atravessa a divisão.
Pista
Um sufixo tem de terminar no 4; um prefixo da direita tem de começar no 3.
Solução
O melhor sufixo é [4], soma 4, e o melhor prefixo é [3], soma 3. O cruzamento é [4,3], soma 7. O melhor intervalo da esquerda soma 4 e o da direita soma 3, portanto o cruzamento é também o ótimo global.
Erros frequentes
Usar o melhor intervalo de cada metade sem exigir sufixo/prefixo pode criar um intervalo com uma lacuna.
Descarte seguro e patamares
Para A=[1,3,5,4,2], usa limites inclusivos lo,hi e . Compara A[m] com A[m+1] enquanto lo é menor que hi. Mostra os intervalos até encontrar o pico. Depois compara no meio [1,3,1,1,1,1,1] e [1,1,1,1,1,3,1]. Por que a mesma regra de descarte não serve para ambos?
Pista
Solução
Em [0,4], m=2 e 5 é maior que 4, por isso conservamos [0,2]. Agora m=1 e 3 é menor que 5; conservamos [2,2]. O pico tem índice 2 e valor 5.
Nos dois vetores com repetições, m=3 e as posições 3 e 4 contêm 1. O primeiro tem pico à esquerda; o segundo à direita. Escolher sempre o mesmo lado na igualdade perde uma das soluções. A redução para metade usava crescimento e decrescimento estritos.
Confere a tua resposta:
- Rastreei [0,4], [0,2] e [2,2].
- Obtive índice 2 e valor 5.
- Mostrei picos dos dois lados da mesma comparação central.