¿Existe un método para el análisis automático de algoritmos en tiempo de ejecución?


10

Me pregunto, ¿hay algún método para el análisis automático de tiempo de ejecución que funcione al menos en un subconjunto relevante de algoritmos (algoritmos que se pueden analizar)?

Busqué en Google "Análisis de algoritmo automático" que me dio esto, pero es demasiado complicado. Solo quiero un ejemplo simple en psuedocode que pueda entender. Podría ser demasiado específico, pero pensé que valía la pena intentarlo.


No veo cómo el estrés entre "cualquiera" y "an" aclara lo que realmente buscas. Si algún procedimiento de decisión está vinculado a un algoritmo B particular, entonces no hay una entrada real y la respuesta es siempre la misma. Creo que lo que quiere preguntar es si 'algún algoritmo dentro de alguna clase de algoritmos' donde la clase está vinculada / es conocida. (Editar: esto también ha sido señalado por el comentario de mi madre).
Nicholas Mancuso

2
La ambigüedad en el uso de "an" y "any" es exactamente por qué se inventaron los cuantificadores .
Nate Eldredge

2
Edité la pregunta para centrarme en las partes relevantes. Observe cómo uso exactamente cero matemáticas para expresar el problema con precisión (en la medida en que haya especificado su pregunta hasta ahora) y de manera sucinta. Ahora, la pregunta todavía está mal planteada: por supuesto, existen tales algoritmos. Por ejemplo, hay un algoritmo simple que analiza todos los algoritmos de la clase (muy relevante) de algoritmos que se ejecutan en el tiempo . Por lo tanto, claramente necesita poner algunas restricciones en los conjuntos de entradas. (Tenga en cuenta que podría no haber "un ejemplo simple en psuedocode que pueda entender".)Θ(norteIniciar sesiónnorte)
Raphael

Respuestas:


12

La herramienta COSTA hace exactamente esto, aunque falla en muchos casos, como puede imaginar, debido a problemas de computabilidad . Hay muchos documentos sobre esto; El análisis de costos de Java Bytecode por E. Albert, P. Arenas, S. Genaim, G. Puebla, D. Zanardini es un buen punto de partida.

El enfoque adoptado es inferir una recurrencia en tiempo de ejecución del código Javabyte, y convertirlo a una forma cerrada. La herramienta también calcula los límites de uso del espacio.


8
@Nathvi Puedo entender que estás irritado por algunos comentarios, que estoy de acuerdo en que no eran realmente necesarios, pero también debes tener cuidado de no usar el término "tontería pedante" para el trabajo de científicos de gran reputación (y, por cierto, mi respuesta). Tiene derecho a que no le gusten las matemáticas, pero es poco probable que llegue muy lejos sin ella, y las palabras despectivas gratuitas no ayudan a nadie.
babou

12

Ningún algoritmo puede decidir si un algoritmo dado alguna vez se detiene o no, por lo que, en particular, ningún algoritmo puede analizar estrictamente la complejidad de un algoritmo dado.


2
Mi pregunta no se refiere a un algoritmo de entrada arbitrario, que si lo fuera, entonces su respuesta sería correcta, debido al problema de detención. Sería correcto si mi pregunta estuviera redactada: "¿Existe un algoritmo A que tome algún algoritmo B y luego muestre la complejidad temporal del algoritmo B?"
Nathvi

66
Si el algoritmo B es fijo, entonces asegúrese de que haya un algoritmo A. Es suficiente tener un algoritmo que no haga más que imprimir "O (n)" o cualquier medida de complejidad correspondiente a B. Si solo hay una entrada posible al algoritmo A, entonces solo necesitamos una salida.
mhum

55
@Nathvi tampoco estaba claro para mí: también entendí la pregunta como "¿hay un algoritmo para encontrar la complejidad de cualquier otro algoritmo", y todavía no entiendo tu pregunta real . Si le gusta contar votos a favor, aparentemente> 2 personas lo interpretaron de esa manera. En caso de confusión, es una buena idea editar su pregunta, de lo contrario solo las personas que lean esta conversación (en lugar de todos los que lean la pregunta) entenderán lo que está preguntando y le darán buenas respuestas. Parece que sentiste que la respuesta de DW fue hostil - FWIW, no creo que fuera para ser ..
jkff

66
@ignis La respuesta puede estar incompleta, pero la oración que escribió Yuval es absolutamente correcta. Y el problema de la detención no es un caso secundario exótico: es la esencia misma de la computación.
David Richerby

3
@nikie Eso no ayuda en lo que respecta a esta pregunta; los límites de tiempo de ejecución son indecidibles incluso en el conjunto de todos los algoritmos que siempre terminan.
Raphael

9

Conozco un enfoque para el análisis de casos promedio (semi) automatizado, a saber, MaLiJAn ¹. Se parece mucho al tipo de análisis que Knuth usa en TAoCP. La idea central es

  • modelar el programa (flujo) como Markov Chain,
  • norte
  • norte
  • use álgebra computacional para obtener el costo promedio (wrt estas funciones).

Tenga en cuenta que solo las medidas de costo aditivas (por ejemplo, comparaciones, "tiempo") funcionan y solo el valor esperado es preciso (suponiendo funciones de probabilidad perfectas), no se pueden derivar momentos más altos.

Todos los pasos, excepto la extrapolación, son rigurosos [2] y se ha demostrado que el método reproduce resultados bien conocidos con alta precisión, dada la entrada de muestras aleatorias adecuadas, por supuesto. Si bien no hay pruebas ni garantías de aproximación de los resultados (el paso de extrapolación es, hasta ahora, puramente heurístico), los resultados obtenidos con la herramienta sirven para experimentar con algoritmos difíciles de analizar y formular hipótesis [3,4].


  1. Divulgación completa: fui miembro de este grupo de investigación y participé en el desarrollo de la herramienta.
  2. Análisis de máxima verosimilitud de algoritmos y estructuras de datos por U. Laube y M. Nebel (2010) [ preprint ]
  3. Ingeniería del Quicksort Dual Pivot de Java 7 usando MaLiJAn por S. Wild et al (2012) [ preprint ]
  4. Análisis de máxima verosimilitud del método Ford – Fulkerson en gráficos especiales por U. Laube und M. Nebel (2015) [ preprint ]

¿Estas técnicas vienen con una estimación de la precisión del análisis de casos promedio?
Martin Berger

@MartinBerger Lamentablemente, no. Tenemos algunas ideas al respecto, pero nada se solidificó y mucho menos se implementó todavía. Tenga en cuenta que es fácil engañar a cualquier método que verifique solo finitamente muchos tamaños de entrada, por lo que hay pocas esperanzas en general. Con supuestos sobre las funciones de tiempo de ejecución y / o conjuntos de datos, algo puede ser posible. La herramienta al menos debería poder decir "necesita más datos".
Raphael

Eso es interesante. Espero que puedas hacer este trabajo adicional.
Martin Berger

8

Por supuesto, como señaló Yuval Filmus, uno no debería esperar una solución general a tales problemas. Pero como suele ser el caso, se pueden encontrar soluciones para subconjuntos interesantes del caso general.

De ninguna manera soy un experto, o incluso un gran conocimiento en esta área, por lo que sé de algún trabajo de este tipo. Se trata del análisis automático de complejidad promedio, y el trabajo fue realizado por Philippe Flajolet y sus colegas.

λυ´ω

Un artículo que encontré en la web es uno de 1990: análisis automático de algoritmos de casos promedio por Philippe Flajolet, Paul Zimmermann y Bruno Salvy .

Esperaría que documentos posteriores hayan extendido este trabajo, pero realmente no lo sé. El trabajo fue muy citado, y buscarlo en la web debería generar un trabajo más reciente sobre el mismo tema.

Ahora, me temo que el trabajo de Flajolet y sus colegas fue muy matemático, y no esperaría mucha lectura fácil.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.