Cuando intentamos construir un algoritmo para un nuevo problema, dividir y conquistar (usando la recursividad) es uno de los primeros enfoques que intentamos. Pero en algunos casos, este enfoque parece infructuoso ya que el problema se vuelve mucho más complicado a medida que crece su aporte.
Mi pregunta es: ¿hay problemas para los que podamos probar que un enfoque de divide y vencerás no puede ayudar a resolver? En las siguientes líneas trato de hacer esto más formal.
Supongamos que es un problema determinado cuya entrada tiene un tamaño (por ejemplo, un problema que acepta una entrada y una matriz de números). Supongamos que tenemos un algoritmo recursivo para resolver . El tiempo de ejecución recursivo de ese algoritmo se calcula suponiendo un oráculo que puede resolver por cada en tiempo constante. Por ejemplo:
- El tiempo de ejecución recursivo de la búsqueda binaria es , ya que solo utiliza una comparación y dos llamadas recursivas.
- El elemento máximo en una matriz se puede encontrar en el tiempo recursivo .
- El tiempo de ejecución recursivo de tipo de fusión es , debido al paso de fusión.
El tiempo recursivo suele ser menor que el tiempo de ejecución real, lo que refleja el hecho de que el algoritmo recursivo es más simple que una solución directa y no recursiva para el mismo problema.
Ahora mi pregunta es:
¿Hay algún problema que pueda resolverse en el tiempo , pero que probablemente no tenga un algoritmo recursivo con tiempo de ejecución recursivo asintóticamente menor que ?
Algunas variantes específicas de esta pregunta son:
- ¿Hay algún problema en que no tenga algoritmo con tiempo de ejecución recursivo ? (¿Tal vez clasificando?)
- ¿Hay algún problema con un algoritmo exponencial que no tiene un algoritmo con tiempo de ejecución recursivo polinómico?
EDITAR: al contrario de lo que supongo, la ordenación tiene un algoritmo con tiempo de ejecución recursivo P O ( 1 ) . Por lo tanto, todavía está abierto, si hay un problema en que no tiene algoritmo con tiempo de ejecución recursivo .
fuente
Respuestas:
Si. Tenga en cuenta que si un lenguaje de conteo tiene "algoritmo recursivo" con polinomio "tiempo de ejecución recursivo", entonces está en P. Hay un lenguaje de conteo en E ∖ P por un argumento de diagonalización estándar.
Puede depender del modelo computacional, pero dudo que esto se conozca, dado que el teorema de la jerarquía de tiempo para las máquinas de Turing de dos cintas no es lo suficientemente poderoso como para distinguir, digamos, el tiempo O ( n 2 ) y el tiempo o ( n 2 ) incluso sin dar a este último el acceso de tiempo constante a las respuestas en instancias más pequeñas.
Comentarios aleatorios sobre sus preguntas en esta publicación:
fuente
Cualquier pregunta que tenga respuesta recursiva tiene respuesta iterativa y viceversa.
Cualquier algoritmo recursivo puede reescribirse de forma iterativa y viceversa.
Por lo tanto, su pregunta no es válida.
fuente
No estoy seguro si entiendo correctamente su noción de "complejidad recursiva".
Si se cumplen todos mis supuestos, entonces el ejemplo que está buscando no puede ser primitivo recursivo.
fuente