Articulo de referencia

Algoritmia empírica

En informática , la algoritmia empírica (o algoritmia experimental ) es la práctica de utilizar métodos empíricos para estudiar el comportamiento de los algoritmos . Esta prácti...

En informática , la algoritmia empírica (o algoritmia experimental ) es la práctica de utilizar métodos empíricos para estudiar el comportamiento de los algoritmos . Esta práctica combina el desarrollo de algoritmos con la experimentación: los algoritmos no solo se diseñan, sino que también se implementan y se prueban en diversas situaciones. En este proceso, se analiza un diseño inicial de un algoritmo para que este pueda desarrollarse de forma gradual. [ 1 ]

Descripción general

Los métodos de la algoritmia empírica complementan los métodos teóricos para el análisis de algoritmos . [ 2 ] Mediante la aplicación rigurosa de métodos empíricos, en particular de la estadística , a menudo es posible obtener información sobre el comportamiento de algoritmos como los algoritmos heurísticos de alto rendimiento para problemas combinatorios difíciles que (actualmente) son inaccesibles al análisis teórico. [ 3 ] Los métodos empíricos también pueden utilizarse para lograr mejoras sustanciales en la eficiencia algorítmica . [ 4 ]

La científica informática estadounidense Catherine McGeoch identifica dos ramas principales de la algoritmia empírica: la primera (conocida como análisis empírico ) se ocupa del análisis y la caracterización del comportamiento de los algoritmos , y la segunda (conocida como diseño de algoritmos o ingeniería de algoritmos ) se centra en métodos empíricos para mejorar el rendimiento de los algoritmos . [ 5 ] La primera suele basarse en técnicas y herramientas de la estadística , mientras que la segunda se basa en enfoques de la estadística , el aprendizaje automático y la optimización . Las herramientas de análisis dinámico , típicamente los analizadores de rendimiento , se utilizan comúnmente al aplicar métodos empíricos para la selección y el refinamiento de algoritmos de diversos tipos para su uso en diversos contextos. [ 6 ] [ 7 ] [ 8 ]

Las investigaciones en algoritmia empírica se publican en varias revistas, entre ellas el ACM Journal on Experimental Algorithmics (JEA) y el Journal of Artificial Intelligence Research (JAIR). Además de Catherine McGeoch, entre los investigadores más conocidos en algoritmia empírica se encuentran Bernard Moret , Giuseppe F. Italiano , Holger H. Hoos , David S. Johnson y Roberto Battiti . [ 9 ]

Análisis del rendimiento en el diseño de algoritmos complejos

En ausencia de algoritmia empírica, el análisis de la complejidad de un algoritmo puede implicar varios métodos teóricos aplicables a diversas situaciones en las que el algoritmo puede utilizarse. [ 10 ] Las consideraciones de memoria y caché suelen ser factores importantes a tener en cuenta en la elección teórica de un algoritmo complejo, o el enfoque para su optimización, para un propósito determinado. [ 11 ] [ 12 ] El perfilado de rendimiento es una técnica de análisis dinámico de programas que se utiliza normalmente para encontrar y analizar cuellos de botella en el código de una aplicación completa [ 13 ] [ 14 ] [ 15 ] o para analizar una aplicación completa e identificar código con bajo rendimiento. [ 16 ] Un perfilador puede revelar el código más relevante para los problemas de rendimiento de una aplicación. [ 17 ]

Un perfilador puede ayudar a determinar cuándo elegir un algoritmo sobre otro en una situación particular. [ 18 ] Cuando se perfila un algoritmo individual, como en el análisis de complejidad, las consideraciones sobre memoria y caché suelen ser más importantes que el número de instrucciones o los ciclos de reloj; sin embargo, los resultados del perfilador pueden considerarse en función de cómo el algoritmo accede a los datos, en lugar del número de instrucciones que utiliza. [ 19 ]

El perfilado puede proporcionar una visión intuitiva del comportamiento de un algoritmo [ 20 ] al revelar los resultados del rendimiento como una representación visual. [ 21 ] El perfilado de rendimiento se ha aplicado, por ejemplo, durante el desarrollo de algoritmos para la coincidencia de comodines . Los primeros algoritmos para la coincidencia de comodines, como el algoritmo wildmat de Rich Salz , [ 22 ] normalmente se basaban en la recursión , una técnica criticada por motivos de rendimiento. [ 23 ] El algoritmo de coincidencia de comodines de Krauss se desarrolló a partir de un intento de formular una alternativa no recursiva utilizando casos de prueba [ 24 ] seguido de optimizaciones sugeridas a través del perfilado de rendimiento, [ 25 ] lo que dio como resultado una nueva estrategia algorítmica concebida a la luz del perfilado junto con otras consideraciones. [ 26 ] Los perfiladores que recopilan datos a nivel de bloques básicos [ 27 ] o que se basan en la asistencia del hardware [ 28 ] proporcionan resultados que pueden ser lo suficientemente precisos como para ayudar a los desarrolladores de software a optimizar algoritmos para una computadora o situación particular. [ 29 ] El análisis del rendimiento puede ayudar a los desarrolladores a comprender las características de los algoritmos complejos aplicados en situaciones complejas, como los algoritmos coevolutivos aplicados a problemas arbitrarios basados ​​en pruebas, y puede contribuir a mejorar el diseño. [ 30 ]

Véase también

Referencias

  1. Fleischer, Rudolf; et  al., eds. (2002). Algorítmica experimental, del diseño de algoritmos al software robusto y eficiente . Springer International Publishing AG.
  2. Moret, Bernard ME (1999). Hacia una disciplina de algoritmia experimental . Serie DIMACS en matemáticas discretas e informática teórica. Vol. 59. Serie DIMACS en matemáticas discretas e informática teórica. págs. 197–213 . doi : 10.1090/dimacs/059/10 . ISBN   9780821828922. S2CID 2221596 . 
  3. Hromkovic, Juraj (2004). Algoritmos para problemas difíciles . Springer International Publishing AG.
  4. Guzman, John Paul; Limoanco, Teresita (2017). "Un enfoque empírico para el análisis de algoritmos que resulta en aproximaciones a la complejidad temporal de Big Theta" (PDF) . Journal of Software . 12 (12).
  5. McGeoch, Catherine (2012). Guía de algoritmia experimental . Cambridge University Press. ISBN 978-1-107-00173-2.
  6. Coppa, Emilio; Demetrescu, Camil; Finocchi, Irene (2014). "Perfiles sensibles a la entrada" . Transacciones IEEE sobre ingeniería de software . 40 (12): 1185–1205 . CiteSeerX 10.1.1.707.4347 . doi : 10.1109/TSE.2014.2339825 . 
  7. Moret, Bernard ME; Bader, David A.; Warnow, Tandy (2002). "Ingeniería de algoritmos de alto rendimiento para filogenética computacional" (PDF) . The Journal of Supercomputing . 22 (1): 99– 111. doi : 10.1023/a:1014362705613 . S2CID 614550 . 
  8. Zaparanuks, Dmitrijs; Hauswirth, Matthias (2012). Algorithmic Profiling . 33rd ACM SIGPLAN Conference on Programming Language Design and Implementation . ACM Digital Library. pp. 67–76 . CiteSeerX 10.1.1.459.4913 .  
  9. "Sobre algoritmia experimental: una entrevista con Catherine McGeoch y Bernard Moret" . Ubiquity . 2011 (agosto). Biblioteca Digital ACM. 2011.
  10. Grzegorz, Mirek (2018). "Gran ambigüedad" . código de rendimiento_.
  11. Kölker, Jonas (2009). "¿Cuándo falla la notación Big-O?" . Stack Overflow .
  12. Lemire, Daniel (2013). "Notación Big-O y rendimiento en el mundo real" . WordPress.
  13. "Detección de cuellos de botella en la aplicación" . Ayuda de dotTrace 2018.1 . JetBrains. 2018.
  14. Shmeltzer, Shay (2005). "Localización de cuellos de botella en su código con el generador de perfiles de eventos" . Documentación de JDeveloper de Oracle Technology Network . Oracle Corp.
  15. Shen, Du; Poshyvanyk, Denys; Luo, Qi; Grechanik, Mark (2015). "Automatización de la detección de cuellos de botella de rendimiento mediante la creación de perfiles de aplicaciones basada en búsquedas" (PDF) . Actas del Simposio Internacional de 2015 sobre Pruebas y Análisis de Software . Biblioteca Digital ACM. págs. 270–281 . doi : 10.1145/2771783.2771816 . ISBN  9781450336208. S2CID 8625903 . 
  16. "Análisis de rendimiento y memoria y cobertura de código" . Centro de aprendizaje de perfiles . SmartBear Software. 2018.
  17. Janssen, Thorben (2017). "11 consejos sencillos para optimizar el rendimiento de Java" . Consejos, trucos y recursos para desarrolladores de Stackify .
  18. O'Sullivan, Bryan; Stewart, Don; Goerzen, John (2008). "25. Perfilado y optimización" . Real World Haskell . O'Reilly Media.
  19. Linden, Doug (2007). "Perfilado y optimización" . Wiki de Second Life.
  20. Pattis, Richard E. (2007). "Análisis de algoritmos, Programación avanzada/Prácticas, 15-200" . Escuela de Ciencias de la Computación, Universidad Carnegie Mellon.
  21. Wickham, Hadley (2014). "Optimización de código" . R avanzado . Chapman and Hall/CRC.
  22. ^ Salz, rico (1991). "salvajemat.c" . GitHub .
  23. Cantatore, Alessandro (2003). "Algoritmos de coincidencia con comodines" .
  24. Krauss, Kirk (2008). "Matching Wildcards: An Algorithm" . Dr. Dobb's Journal .
  25. Krauss, Kirk (2014). "Matching Wildcards: An Empirical Way to Tame an Algorithm" . Dr. Dobb's Journal .
  26. Krauss, Kirk (2018). "Matching Wildcards: An Improved Algorithm for Big Data" . Develop for Performance.
  27. Grehan, Rick (2005). "Code Profilers: Choosing a Tool for Analyzing Performance" (PDF) . Freescale Semiconductor.Si, por otro lado, necesita analizar su código paso a paso con precisión microscópica, ajustando con precisión instrucciones individuales de la máquina, entonces un analizador de rendimiento activo con conteo de ciclos es insuperable.
  28. Hough, Richard; et al. (2006). "Evaluación del rendimiento de la microarquitectura con precisión de ciclo". Actas del Taller sobre Arquitectura Introspectiva . Instituto Tecnológico de Georgia. CiteSeerX 10.1.1.395.9306 .  
  29. Khamparia, Aditya; Banu, Saira (2013). Análisis de programas con herramientas dinámicas de instrumentación, pines y rendimiento . Conferencia internacional IEEE sobre tendencias emergentes en computación, comunicación y nanotecnología . Biblioteca digital IEEE Xplore.
  30. Jaskowski, Wojciech; Liskowski, Pawel; Szubert, Marcin Grzegorz; Krawiec, Krzysztof (2016). "El perfil de desempeño: un método de evaluación del desempeño multicriterio para problemas basados ​​en pruebas" (PDF) . Matemática Aplicada e Informática . 26 . De Gruyter: 216.