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 .
fonte
Respostas:
Sim. Observe que se uma linguagem de registro possui “algoritmo recursivo” com “tempo de execução recursivo” polinomial, então está em P. Há um idioma de registro em E ∖ P por um argumento padrão de diagonalização.
Pode depender do modelo computacional, mas duvido que isso seja conhecido, uma vez que o teorema da hierarquia de tempo para máquinas de Turing com duas fitas não é poderoso o suficiente para distinguir, digamos, O ( n 2 ) tempo e o ( n 2 ) tempo, mesmo sem dar a este último o acesso constante às respostas em instâncias menores.
Comentários aleatórios sobre suas perguntas neste post:
fonte
Qualquer pergunta que tenha resposta recursiva tem resposta iterativa e vice-versa.
Qualquer algoritmo recursivo pode ser reescrito de maneira iterativa e vice-versa.
Portanto, sua pergunta não está boa.
fonte
Não tenho certeza se entendi corretamente sua noção de "complexidade recursiva".
Permite (razoavelmente) supor uma linguagem de programação que contenha um esquema para recursão primitiva, isto é, na qual é possível definir funções def
Se todas as minhas suposições forem atendidas, o exemplo que você está procurando não pode ser recursivo primitivo.
fonte