¿Puede un algoritmo descubrirse a sí mismo?

Es una pregunta muy interesante:

Primero, te dejo leer una situación similar:
El programa de Hilbert es un sistema matemático simple para probar la consistencia de cualquier sistema matemático.
Los teoremas de incompletitud de Gödel se dividen en dos partes:

  1. Un sistema matemático no puede probar su consistencia.
  2. Un sistema matemático no puede probar la consistencia de un sistema matemático complejo más alto.

Lejos de la parte matemática \ teórica:
Permítanme decir que la complejidad del problema (encontrar el algoritmo para resolver un problema) es R-difícil (no se conoce una solución, o se desconoce el tiempo de ejecución de la solución). El único algoritmo conocido es:

  • dejemos que L sea la representación binaria del problema (por ejemplo, un script de prueba).
  • Para i = 0 a infinito:
    • Ejecute el programa binario i-ésimo contra L.
    • Si el programa terminó y da la respuesta de escritura, interrumpa.

El algoritmo tiene un tiempo de ejecución desconocido. Incluso si excluimos los programas que no se ejecutarán por errores de sintaxis, errores de tiempo de ejecución, etc., podemos encontrar programas maliciosos, programas que se ejecutan para siempre, etc.
Hay una prueba de que el problema puede tener una solución más eficiente en un tiempo de ejecución determinista si P es igual a NP.

Volviendo a la pregunta principal. La respuesta ahora depende de la representación binaria del problema en sí. Entonces la pregunta será “¿podemos probar este algoritmo?”. En general, es posible, pero dado que suponemos que P no es igual a NP (porque no conocemos ningún algoritmo para resolver ningún problema de NP completo), el algoritmo y el script de prueba tardarán para siempre.

Depende
En teoria:
¿Cuál es la definición de algoritmo?
¿Cuál es su entrada? ¿Cuál es su salida?
Si seguimos la definición de algoritmo de The Art Of Computer Programming:
Primero, “Un algoritmo siempre debe terminar después de un número finito de tareas” (Capítulo 1.1).
Si input es “una función unaria que devuelve un valor booleano en tiempo finito”, y output es “un argumento (posiblemente una función) que hace que la función unaria sea verdadera”, no. Ningún algoritmo puede devolver un número natural que sea desigual para sí mismo. Entonces ese algoritmo no existe.
Si la salida es “un argumento o una prueba de que no existe”, Entscheidungsproblem garantizará la inexistencia de dicho algoritmo.
Si aflojamos la definición de algoritmo y utilizamos el “método computacional” para que no termine, el algoritmo teóricamente se volverá trivial de inmediato: en el lenguaje X, enumere todas las cadenas, aliméntelas al intérprete / compilador X, y pronto se generará. Toda salida debe satisfacer la entrada? Aún fácil Impleméntelo en Coq u otro asistente de prueba. (Nota: en Coq, todo el cómputo debe terminar, así que vaya con mónada no terminada en el Capítulo 7 de CPDT o algo similar) (Hasta donde yo sé, Coq no proporciona Coq API para comunicarse con Coq, así que cree un asistente de prueba más pequeño dentro de Coq. Esto es doloroso y difícil pero aún posible)
En la práctica: creo que tal cosa casi existe. MiniKanren ( https://github.com/webyrd/quines ) puede generar quines. Creo que está relativamente cerca de poder generar un intérprete minimalista como el del apéndice de The Reasoned Schemer.

sí.

El problema que veo durante la programación es que es difícil para el programador abandonar la “forma” en que los humanos piensan y la forma en que opera nuestra conciencia humana.
mientras desarrollamos el programa, tendemos a incluirlo en paradigns que son muy “humanos” … y crean paradojas que pueden “limitar” la forma en que funcionará un algoritmo.

una vez que tomamos eso del camino. Cualquier tipo de algoritmo es posible.

More Interesting

¿Qué libro es bueno para los algoritmos básicos?

¿Cuál es el menor número de operaciones necesarias para ordenar una matriz de n objetos arbitrarios?

¿Cuáles son las desventajas del algoritmo genético?

Si uno se está preparando para una entrevista en Google (y tiene 6 meses en la mano), ¿qué libro lo beneficiará más y por qué? ¿'Introducción a los algoritmos' (CLRS) o 'Algoritmos desbloqueados'?

¿Debo postularme a trabajos de desarrollo web si puedo construir aplicaciones CRUD pero no asimilo la notación Big O y nunca he trabajado en un proyecto grupal?

Solicitar respuestas (función Quora): ¿El algoritmo de crédito es proporcional?

Cómo aprender a ser bueno al traducir el problema inicial en un problema de coincidencia gráfica bipartita

Cómo calcular la complejidad del algoritmo de ordenamiento por selección

Cómo aprender estructuras de datos de manera efectiva

¿Cuál es el mejor algoritmo para encontrar el camino con dos limitaciones?

¿Podría dar un algoritmo que calcule la puntuación máxima de la mejor alineación de secuencia (S ', T') de S y T?

¿Cuáles son los algoritmos importantes que todo desarrollador de software graduado debe saber?

¿Funciona la siguiente implementación para encontrar la subcadena común más larga dentro de dos cadenas?

En el algoritmo EM, ¿debería aumentar el valor de la función objetivo a través de cada M-STEP?

¿Es posible usar los poderes de una matriz de adyacencia para calcular las rutas más cortas que BFS calcularía?