¿Es el análisis no asintótico de la complejidad computacional un área activa de investigación, o lo ha sido alguna vez en el pasado?

Para la mayoría de los problemas, calcular el tiempo de ejecución asintótico es bastante difícil. Pero para problemas más simples, con frecuencia se ha realizado mucha más investigación.

Por ejemplo, la clasificación de una matriz con elementos [math] n [/ math] es conocida por tomar comparaciones [math] \ Theta (n \ log n) [/ math], y varios algoritmos han logrado este límite asintóticamente.

Pero quicksort continúa siendo estudiado activamente. Ha habido múltiples análisis en los últimos años analizando el efecto del uso de dos o tres pivotes en lugar de uno solo.

Del mismo modo, el algoritmo de Dijkstra para calcular las rutas más cortas se conoce desde hace décadas. Pero todavía hay muchas otras preguntas interesantes que se han estudiado. (Si está interesado en el estado de cualquiera de estos, me complace ayudarlo a encontrar referencias).

  • ¿Podemos encontrar las k rutas más cortas entre dos nodos, para algún entero fijo k?
  • ¿Podemos equilibrar múltiples pesos uno contra el otro?
  • ¿Podemos paralelizar el problema?
  • ¿Podemos usar la heurística para acelerar nuestro cálculo?
  • ¿Podemos preprocesar un gráfico para responder consultas de ruta más cortas aún más rápido?

Y eso está fuera de mi cabeza. A pesar de la impresión que puede tener de los libros de texto de algoritmos, los problemas algorítmicos prácticamente nunca se resuelven definitivamente.

Depende de lo que quieras decir. Ciertamente, hay muchas personas que trabajan para hacer que el código se ejecute rápidamente sobre conjuntos particulares de entradas. Eso tiende a denominarse optimización en lugar de análisis no asintótico de la complejidad computacional.

En términos de un estudio general, comenzamos a hacer algo de trabajo en esa área en el programa Quantum Computer Science. El valor del análisis asintótico para los programas clásicos es que, en general, los programas útiles se comportan de la forma en que los resultados lo llevarían a esperar. Es decir, hay algunas constantes molestas para pequeños conjuntos de datos, pero para problemas que son lo suficientemente grandes como para preocuparse por la eficiencia, las constantes pueden ignorarse.

Para la computación cuántica, no está claro si eso es cierto. Desafortunadamente, el programa se interrumpió, pero estábamos viendo algunos resultados iniciales que indicaban que las constantes (y otros factores que se ignoran al analizar los programas clásicos) eran mucho más importantes en los programas cuánticos. Ojalá el programa hubiera continuado para que hubiéramos tenido más oportunidades de saber si eso se debió a que los programas no se habían optimizado adecuadamente o por algo inherente a la computación cuántica.