Dividir para Conquistar (Divide and Conquer)
Definição
Dividir para Conquistar (Divide and Conquer) é uma técnica de projeto de algoritmos que consiste em dividir um problema grande em subproblemas menores, resolver cada um deles recursivamente, e então combinar os resultados.
Essa abordagem é comum em algoritmos eficientes de ordenação, busca, multiplicação de matrizes e geometria computacional.
Etapas principais
- Dividir o problema em subproblemas menores do mesmo tipo;
- Conquistar cada subproblema recursivamente;
- Combinar os resultados em uma única solução final.
Por que usar
- Ajuda a resolver problemas grandes quebrando-os em partes menores, mais simples de resolver;
- Favorece o uso de recursão com melhor desempenho e clareza de lógica;
- Leva a algoritmos muito eficientes, como os de ordenação rápida (Quick Sort) e de busca (busca binária);
- Permite aproveitar a paralelização (cada subproblema pode ser resolvido de forma independente);
- Reduz a complexidade geral do código em problemas com estrutura naturalmente divisível.
Exemplos clássicos
- Merge Sort
- Quick Sort
- Busca binária
- Transformada rápida de Fourier (FFT)
- Multiplicação de Karatsuba
Exemplo prático (Python) — Soma com Dividir para Conquistar
def soma_dividir_conquistar(lista):
if len(lista) == 0:
return 0
if len(lista) == 1:
return lista[0]
meio = len(lista) // 2
esquerda = soma_dividir_conquistar(lista[:meio])
direita = soma_dividir_conquistar(lista[meio:])
return esquerda + direita
# Exemplo
numeros = [1, 2, 3, 4, 5]
print(soma_dividir_conquistar(numeros)) # Saída: 15
A função divide a lista até ter apenas um número por parte, e depois soma tudo na volta da recursão.
Visualização
1. Divide: [1, 2, 3, 4, 5]
2. Subdivide em [1, 2] + [3, 4, 5]
3. Soma [1] + [2] = 3
4. Soma [4] + [5] = 9
5. Soma [3] + 9 = 12
6. Soma 3 + 12 = 15
Saída
15