Recomendaciones para la evaluación de algoritmos
Clase 15 de 18 • Curso de Complejidad Algorítmica con JavaScript
Contenido del curso
Clase 15 de 18 • Curso de Complejidad Algorítmica con JavaScript
Contenido del curso
Marcelo Arias
Jean Nuñez
Rubén Ernesto Aragón Gil
Juan Esteban Galvis
Marcelo Arias
Àlex Grau Roca
Hey, hasta ahora sabes que un algoritmo con O(1) es mejor que uno con O(n). ¡Genial! Pero, ¿Y si ese algoritmo con O(1) se ejecuta en 1000 horas?
💚 La complejidad algorítmica es importante, pero dónde se ejecuta tu algoritmo determina qué tan importante es.
📉 Cuando la Complejidad Algorítmica deja de ser relevante, es donde debemos mejorar nuestro algoritmo para alcanzar nuestro objetivo de eficiencia.
🚀 Tal vez tengamos el mejor algoritmo jamás visto, pero si lo ejecutamos en una computadora de hace 20 años con Intel Celeron, pues no podemos esperar mucha rapidez.
Es verdad!
Mi pc con Intel celeron 😥😭
Yo diría que entonces no simplificar la complejidad puede ayudar a mejorar la decisión entre cuál es mejor entre dos de la misma forma. Por ejemplo si dos algoritmos tienen complejidad espacial de O( 1 ) y temporal de O ( n ) pues cómo elijo?
En cambio si no simplificamos y vemos que:
Interesante caso Juan 😁
📖 Simplificar la complejidad ayuda a tener una visión de la eficiencia de los algoritmos independientemente de dónde se ejecute. Esto es genial porque un O(1) será el mismo, así tengamos una computadora de hace 20 años o una actual. La desventaja es que podemos descartar información importante al simplificar.
✅ Entonces, sí es correcto lo que comentas: «no simplificar la complejidad puede ayudar a mejorar la decisión»:
Aborando tu ejemplo. Digamos que buscamos el algoritmo más rápido, uno tiene O(n+5) y el otro O(n+50). Efectivamente, O(n+5) es el que debemos elegir. Pero si buscamos poco espacio, y uno tiene O(6) y el otro de O(20). Pues nos quedamos con O(6).
Y de repente, si llega un tercer algoritmo con O(n^2) en tiempo y espacio, lo podemos descartar enseguida.
Bajo mi punto de vista la confusión está un poco con el uso de las palabras. Como lo entiendo yo, aquí no hablamos de crecimiento como tal, en realidad estamos hablando de tipo de crecimiento, y es que el crecimiento como tal sería los 10 años. Lo bueno de establecer el tipo de crecimiento es que sabemos como se comportará el algoritmo sin importar otras variables (como el hardware), mientras que el crecimiento dependerá de otros factores variables, por lo que es más difícil de calcular.