¿Cómo comparamos la complejidad del espacio y el tiempo como O (n ^ 2) tiempo versus O (n) espacio y O (n) tiempo?

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.

Nosotros no?

O estás limitado en el espacio, o en el tiempo, o en ambos, o en ninguno, para un problema en particular. (Perdón por ser muy obvio). Donde tienes limitaciones, tienes que cumplirlas. Ambas restricciones existen normalmente; cómo uno intercambia uno contra el otro (de hecho, si puede hacer esto) se reduce a Otras cosas. No puede “preferir” una solución O (n) en el tiempo a una solución O (n ^ 2) en el tiempo, a pesar de que la primera rompe alguna restricción de espacio y la segunda no. Del mismo modo, pero con más evasión y tejido, con restricciones suaves (el tiempo es a menudo “más suave” que el espacio, pero no siempre; puedes comprar otra computadora) Además, si O (n) en el tiempo es realmente más lento que la solución O (n ^ 2) en el tiempo para el rango real de n que necesita, entonces no se pueden comparar de manera útil. De hecho, si solo necesita un rango limitado específico de n, entonces la notación O es realmente inútil.

No existe una función de preferencia automática universalmente válida sobre, por ejemplo, los números reales que pueden reducir la complejidad del espacio y la complejidad del tiempo a una sola variable libre. Uno puede reemplazar ambas medidas de complejidad con un solo punto que deambula por un espacio de restricción bidimensional, pero ya no se trata de una variable real con sus convenientes relaciones de orden. Alternativamente, puede juntarlos en una sola variable real codificada, y ya no tiene opciones útiles para optimizar usando una función de preferencia. ¡Sin duda, otros enfoques inútiles son posibles! Ninguno de ellos realmente trata el problema básico; Las restricciones de espacio y de tiempo son DIFERENTES, porque el espacio y el tiempo son diferentes en el mundo real. Hasta qué punto son fungibles no es algo que pueda descubrir observando las propiedades de complejidad de un algoritmo.