¿Qué tan comunes son los algoritmos de tiempo exponencial de casos genéricos en el software de producción?

11

Sé que los algoritmos de tiempo exponencial generalmente deben evitarse, pero a veces son necesarios. Un caso es el vendedor ambulante. ¿Qué tan comunes son estos algoritmos en el software de producción? ¿Son estos casos típicamente necesarios o resultado de trabajos urgentes? Entiendo que muchos pueden resolverse con una buena heurística. ¿Qué se hace típicamente con aquellos que no pueden?

Ingeniero mundial
fuente
1
Mi impresión es que para cosas como el problema del vendedor ambulante, uno abandona el algoritmo de tiempo exponencial, y en cambio va con una heurística mucho mejor (en el caso del vendedor ambulante, son bastante buenos)
Soandos
Muchos problemas se resuelven con algoritmos "exponenciales". (TSP, CDS, ILP, etc.) Es solo que los algoritmos exponenciales tienen buenas heurísticas, por lo que funcionan razonablemente con muchos datos del mundo real. Una mejor pregunta podría ser, "¿Qué tan comunes son los algoritmos de tiempo exponencial de caso genérico en el software de producción?"
user541686
Ajustó la pregunta
Ingeniero mundial
El vendedor ambulante es n !, no exponencial.
user281377
1
@ user281377: También está en O (n ^ 2 2 ^ n) así que sí, es un problema exponencial. Esto también está claro porque se puede asignar a SAT en tiempo poli que se puede resolver en 2 ^ n tiempo, lo que funciona para todos los problemas de NP.
Raphael

Respuestas:

7

Algo que no está en el software de producción pero sí en el software de producción es la verificación formal . Probablemente no se adopte para la mayoría del software del cliente, pero gana seguimiento para los sistemas y controladores integrados, es decir, para hardware y software cuya corrección es importante (y manejable).

Esos problemas verficiation que en realidad son computables (Barrera # 1) son a menudo EXPTIME -Hard, en los casos más afortunados se obtiene PSPACE problemas -Complete (Barrera # 2). Ambas clases son (se sospecha que son) más difíciles que los problemas NP-completos, que son fáciles en comparación. Los problemas doblemente exponenciales también se obtienen fácilmente.

En estos casos, la heurística (en el sentido del resultado final) no es suficiente, ya que necesita resultados definitivos; Por lo tanto, necesita grandes máquinas y tiempo. Hay heurísticas (en el sentido de selección alternativa) que a menudo conducen a un tiempo de ejecución más corto (es decir, exploración inteligente del espacio de búsqueda cuando se buscan estados de error), pero en el peor de los casos, esperar es todo lo que puede hacer. O puede hacer una prueba con lápiz y papel y hacer que la revisen las máquinas , lo que es computacionalmente más simple.

Rafael
fuente
5

Algoritmo de uso común con complejidad exponencial en el peor de los casos es el método simplex utilizado en programación lineal . Sin embargo, la complejidad del caso genérico de ese método es un problema abierto. Con algunos supuestos específicos es polinomial.

vartec
fuente
5

Los intérpretes de lenguaje de programación son peores que el tiempo exponencial (en la duración de su entrada, es decir, en la duración del programa que están interpretando), y son bastante comunes. Otro ejemplo es la demostración automática de teoremas / resolución de restricciones / resolución sat / programación lineal entera. Y otro ejemplo es la diferenciación simbólica implementada, por ejemplo, en Maple / Mathematica (aunque es posible hacer una diferenciación simbólica en tiempo lineal si se le permite compartir subexpresiones entre nodos).

Jules
fuente
1

Permítanme tomar el ejemplo del problema del vendedor ambulante. He trabajado en eso algunas veces.

Hay algunas ocasiones en que he estado en un equipo que escribió una solución para el problema del vendedor ambulante pero con algunos parámetros más. Por ejemplo, podría ser una tienda con una flota de técnicos e ingenieros, cada uno con un conjunto de habilidades único. Los destinos surgen todos los días en forma de solicitudes de servicio. Todos los programas están en producción aunque han sufrido modificaciones y mantenimiento desde que los escribieron originalmente.

Así es como funcionaron. Cada ingeniero recibiría una lista de cosas para reparar en un dispositivo portátil todos los días. A medida que terminan cada tarea de servicio, deben cerrar el caso. Los casos que quedan fuera se unen a los casos que se programarán para el día siguiente con una prioridad ligeramente mayor, ya que para entonces el cliente habría expresado cierta insatisfacción. Había una gran cantidad de razones por las cuales un ingeniero no asistiría a un caso. Los problemas de tráfico fueron los más comunes.

¿Qué tan comunes son? Al menos tan común como el número de solicitudes de servicio postventa provenientes de clientes. Sin el servicio posventa, por ejemplo, retener a los clientes será difícil y conseguir nuevos será más difícil.

Con muchas tiendas basadas en la web como Amazon y otras librerías y otras tiendas similares que funcionan bien en los negocios, creo que el vendedor ambulante es más común de lo que solía ser. Además, podría haber muchas variaciones del problema del vendedor ambulante que se enseñan en los libros de texto.

vpit3833
fuente
Como el viajero canadiense .
soandos