¿Hay algún problema para el cual se pruebe que no existe un algoritmo óptimo?

Sí, existen tales problemas, pero todas las instancias que conozco son de interés puramente teórico sin aplicaciones en la práctica.

El principal resultado teórico relacionado con esta pregunta es el teorema de aceleración de Blum.

Para ilustrar este teorema, he aquí una de sus consecuencias: hay una función [matemática] f [/ matemática] (un objeto matemático) con las siguientes propiedades:

  • [math] f [/ math] es una función total: devuelve algún valor para cada entrada válida
  • [math] f [/ math] es computable: hay algunos programas de computadora que computan [math] f [/ math]. Alimenta al programa con cualquier entrada válida y después de muchos pasos, el programa producirá la salida correcta.
  • Ahora puede elegir cualquier programa de este tipo [matemáticas] P_1 [/ matemáticas]. Sin embargo, independientemente del programa que elija, siempre podré acelerarlo, es decir, podré encontrar otro programa [matemático] P_2 [/ matemático] que calcule la misma función pero lo haga más rápido. Por ejemplo, siempre puedo encontrar un programa de tal manera que su complejidad temporal sea asintóticamente como máximo igual al logaritmo de la complejidad temporal de su programa.

Por lo tanto, no hay un programa óptimo que calcule [math] f [/ math]. Para cualquier programa que lo haga, hay otro programa mucho más rápido.

Esto puede parecer una contradicción, pero no lo es. Todo el truco está en que todos esos programas son tan lentos que las mejoras realmente no importan. Para un ejemplo simple de lo que puede estar pasando, considere la siguiente secuencia de “complejidades del tiempo”: [matemáticas] 2 ^ n, \ quad 2 ^ n / n, \ quad 2 ^ n / n ^ 2, \ quad 2 ^ n / n ^ 3 [/ math], … Cada una de estas funciones crece mucho más lentamente que la anterior, pero nunca llegará a cero.


TL, DR: Sí, hay problemas que no tienen ningún algoritmo óptimo. Podemos construir algunos problemas muy, muy complicados con la propiedad de que para absolutamente cualquier algoritmo que resuelva el problema podemos encontrar otro algoritmo que sea asintóticamente más rápido.

Lo obvio es encontrar el algoritmo óptimo para delimitar una función no computable, donde “mejor” significa un límite más estricto y “óptimo” significa que ha descubierto cómo calcular una función no computable.

Se refiere a una secuencia infinita de algoritmos de complejidad decreciente. De hecho, hay secuencias decrecientes limitadas, pero solo en conjuntos como [math] \ mathbb {Q} [/ math] o [math] \ mathbb {R}. [/ Math] Una función de complejidad temporal mide el número de pasos que toma un algoritmo para resolver un problema, entonces, es un número natural. Las secuencias decrecientes en [math] \ mathbb {N} [/ math] no pueden ser infinitas, lo que significa que la secuencia que imaginó llegaría a cero en un número finito de pasos.

Solo una nota, no calificada como respuesta.

Para los problemas discretos clásicos, cuya complejidad se define por el tamaño, es difícil encontrar un problema sin algoritmos óptimos.

Pero si pensamos en problemas de optimización en algunos espacios funcionales, puede ser más fácil encontrar uno, ya que la mayoría de los algoritmos están parametrizados por números reales.

More Interesting

¿Cómo se puede calcular el número de inversiones entre dos matrices en O (N log N)?

¿Cuál es el algoritmo más conocido para unir varias tablas (> 5) que contienen uniones externas (en una base de datos no Oracle) implementadas a través de un lenguaje programático?

¿Qué es un árbol de recursión?

Dada una matriz S de n enteros, ¿hay elementos a, b, c en S tales que a + b + c = 0? ¿Encuentra todos los tripletes únicos en la matriz que da la suma de cero?

¿Cuál era el objetivo de Pedro Domingos al escribir 'El algoritmo maestro'?

¿Qué es la técnica Hashing?

Cómo escribir un algoritmo de diccionario en un programa en C

¿Qué representa un peso en los bordes en un gráfico ponderado en la teoría de gráficos?

¿Qué tan bien funciona el algoritmo NativeTrack de AppsFlyer?

Gráfico distribuido: ¿Cuál es la forma más efectiva de distribuir los nodos de un gráfico en diferentes servidores en un sistema distribuido?

¿Qué series matemáticas debo saber para calcular la complejidad de cualquier algoritmo o pseudocódigo?

Un k-palíndromo es una cadena que se transforma en un palíndromo al eliminar como máximo k caracteres de él. Dada una cadena S y un número entero K, ¿encuentra si S es un k-palíndromo o no? Restricciones: S tiene como máximo 20,000 caracteres y 0 <= k <= 30

¿Cuál es la diferencia entre la clasificación rápida y el algoritmo de clasificación de burbujas?

¿Cuáles son algunos "problemas de práctica" en los que todos deberían trabajar para mejorar la programación (en cualquier lenguaje de programación)?

¿Por qué el valor de matriz no se incrementa cuando intento rotarlo?