Quando tentamos construir um algoritmo para um novo problema, dividir e conquistar (usando recursão) é uma das primeiras abordagens que tentamos. Mas, em alguns casos, essa abordagem parece infrutífera à medida que o problema se torna muito mais complicado à medida que sua entrada cresce.
Minha pergunta é: existem problemas para os quais podemos provar que uma abordagem de dividir e conquistar não pode ajudar a resolver? Nas linhas seguintes, tento tornar isso mais formal.
Seja um certo problema cuja entrada tenha tamanho (por exemplo, um problema que aceite uma entrada com uma matriz de números). Suponha que tenhamos um algoritmo recursivo para resolver . O tempo de execução recursivo desse algoritmo é calculado assumindo um oráculo que pode resolver para cada em tempo constante. Por exemplo:
- O tempo de execução recursivo da pesquisa binária é , pois utiliza apenas uma comparação e duas chamadas recursivas.
- O elemento máximo em uma matriz pode ser encontrado no tempo recursivo .
- O tempo de execução recursivo da classificação por mesclagem é , devido à etapa de mesclagem.
O tempo recursivo é geralmente menor que o tempo de execução real, o que reflete o fato de que o algoritmo recursivo é mais simples do que uma solução não-recursiva direta para o mesmo problema.
Agora minha pergunta é:
Existe um problema que pode ser resolvido no tempo , mas provavelmente não possui algoritmo recursivo com tempo de execução recursivo assintoticamente menor que ?
Algumas variantes específicas desta pergunta são:
- Existe um problema em que não possui algoritmo com tempo de execução recursivo ? (Talvez classificando?)
- Existe um problema com um algoritmo exponencial que não possui algoritmo com tempo de execução recursivo polinomial?
EDIT: ao contrário do meu palpite, a classificação tem um algoritmo com tempo de execução recursivo . Portanto, ainda está aberto, se existe algum problema em que não possua algoritmo com tempo de execução recursivo .