En términos prácticos, a menudo buscas un equilibrio diferente porque has identificado uno de tiempo o espacio como tu cuello de botella. Por lo tanto, no hay una razón a priori para preferir una solución que requiera mucho tiempo en lugar de una solución que requiera mucha memoria. Todo se reduce al contexto.
Pero en muchos casos podemos reducir la respuesta a una unidad común, a saber, el dinero. ¿Cuánto vale una respuesta para ti? ¿Cuánto tiempo estás dispuesto a esperar para obtenerlo? ¿Es más barato comprar más memoria o más núcleos de CPU? (Por supuesto, si su algoritmo no es paralelo, es un gran golpe contra él allí mismo). ¿Es incluso factible obtener suficiente RAM para hacer la versión con uso intensivo de memoria? Pero para hacer esta compensación, el factor constante es importante.
En el ejemplo específico que da, casi siempre terminaría eligiendo el algoritmo de tiempo O (n), al menos para comenzar, porque O (n ^ 2) es mucho peor en tamaños grandes que mi regla general diría que no es factible. Puedo obtener una máquina con 488 GB de memoria de Amazon por $ 4.256 / hora. La mayoría de los núcleos que puedo pagar con el mismo presupuesto son aproximadamente 96. Si no puedo permitirme O (n) memoria, probablemente no puedo permitirme O (n ^ 2) tiempo u O (n ^ 2) núcleos paralelos.
- Soy bueno en algoritmos y estructuras de datos, ¿cuál debería ser mi estrategia para comenzar una carrera independiente en este dominio?
- ¿Qué es NP-hard y NP-complete?
- ¿Cómo calculamos la complejidad espacio-temporal de un algoritmo?
- ¿Cuál es el enfoque algorítmico para resolver el problema de hackerrank Substring Diff?
- Cómo escribir un algoritmo que tome una muestra aleatoria de tamaño k de una secuencia de n elementos