¿Cuál es la diferencia entre un problema formal y solo un problema?

Yo diría que no hay diferenciación binaria.
Es más como dos cosas polares y hay mucho en medio y más allá de cada una.

Vayamos con algunos ejemplos e intentemos averiguar cuál es la diferencia.

“Lea dos números enteros no negativos (escritos en decimal) separados por espacios solo de la entrada estándar e imprima su suma a la salida como decimal. Termine el programa después. No produzca otros efectos secundarios, no genere datos adicionales. Cada El número es de hasta 1000 “. Eso es un poco formal: tenemos un conjunto específico de posibles entradas y una clara “entrada -> salida deseada”. Además, no nos queda mucha libertad para determinar qué hacer, excepto para la implementación del algoritmo.

Otro ejemplo. “Calcular el producto de dos enteros, cada uno es hasta 100 por valor absoluto”. Esto es menos formal en términos de programación, ya que somos libres de elegir cualquier forma de representar esos enteros. Por ejemplo, podemos decir que “2 * 5” también es una forma de representar un entero, no se especificó. Y tenga en cuenta que desde el punto de vista matemático es correcto: todavía tenemos un mapeo estricto entre las posibles entradas y las respuestas deseadas. Intuitivamente, eso no es lo que nos pidieron, se supone que debemos multiplicar estos números. Entonces, aquí van algunos supuestos implícitos sobre el lado de la programación del problema, específicamente – interfaz.

Uno mas. “Reconoce el texto escrito a mano de la imagen, la calidad es buena, el texto es horizontal, el humano promedio puede leerlo fácilmente, solo en inglés, sin palabras especiales”. Por un lado, hay muchos detalles y restricciones. Por otro lado, hay mucha implicidad: ¿qué es el “texto escrito a mano”? ¿Qué es el “reconocimiento”? ¿Deberíamos imprimir el texto o deberíamos mapear cada área de la imagen a alguna letra? ¿Quién es el “humano promedio”? Sin embargo, todavía podemos estar bastante seguros de que la mayoría de las “entradas reales” tienen una “salida deseada” única y es fácil de verificar.

Por último, si bien no menos importante. “Escribe una IA”. Guau. Suena increíble, pero ¿qué es la IA? ¿Cómo interactuamos con él? ¿Cómo lo distinguimos del algoritmo just-smart? ¿Qué hace en absoluto? Mira, aún no sabemos cómo verificar nuestra ‘solución’. Incluso si agregamos la prueba de Turing aquí, todavía hay mucha libertad (como ‘¿cómo elegimos un jugador humano’?). Además, desde el punto de vista filosófico, todavía existe el experimento de la “sala china” que muestra cómo, en realidad, la definición de IA es frágil.

Ahora, resumamos las razones que hacen que el problema sea menos formal:
1. Suposiciones implícitas sobre interfaz, datos de entrada, etc.
2. Posibilidad de elegir su propia métrica de “corrección”.
3. Las soluciones pueden ser ‘parciales’ y aún tener sentido.
Y cosas que hacen que el problema sea más formal:
1. Mapeo matemático de entradas a salidas.
2. Facilidad de verificación
3. Respuesta única
4. Especificación fija de qué solución es.
5. Existencia clara de la ‘solución de referencia’, que debe ser mejor por alguna razón.

Finalmente: el problema formal le proporciona especificaciones, no necesita suposiciones implícitas, puede verificar fácilmente su solución (de alguna manera) y cualquier otra persona puede verificar la solución y confirmar su resultado. Mientras tanto, el “problema no formal” es más como una idea o dirección de búsqueda en la que hay que buscar el mejor enfoque para cumplir con la comprensión intuitiva de un problema, sea lo que sea.

Por supuesto, en diferentes campos hay diferentes definiciones de cómo debería ser el problema formal. Por ejemplo, decir ‘muéstrame esta información exacta’ está bien para, por ejemplo, scripts en la vuelta, pero es completamente inaceptable en la programación competitiva, donde cada coma en la salida debe especificarse explícitamente.