En general, solo usamos la notación big-O cuando n puede elevarse a valores obscenamente grandes, porque la notación big-O describe cómo crece el tiempo de ejecución a medida que crece la entrada. Por ejemplo, al ordenar una lista, la mayoría de los mejores algoritmos se ordenan O(n log n), lo que significa, y solo significa, que cuando la lista es lo suficientemente larga, el tiempo que lleva ordenarla es proporcional n log n. Cuando la lista no es lo suficientemente larga, otros factores (por ejemplo, en cualquier momento que su algoritmo pueda tomar para asignar espacio adicional), se vuelven significativos e incluso pueden tomar el tiempo de ejecución.
Con las cadenas de JavaScript, de nhecho puede ser arbitrariamente grande *, por lo que decimos que la comparación lleva O(n)tiempo. Pero con los números de JavaScript (que son números de coma flotante de precisión doble IEEE 754 ), ntiene un límite máximo de 64-1 para un bit de signo, 11 para un exponente y 53 para dígitos significativos **. Debido a esto, sabemos exactamente cuánto tiempo tomará una comparación de números, y los mejores sistemas que tenemos para comparar números de ese tamaño exacto funcionan más o menos independientemente de cuántos de esos 64 dígitos cada número realmente tiene, por lo tanto, se considera comparar estos números en JavaScript O(1).
* Técnicamente, hay un límite superior porque la memoria RAM puede agotarse. Sin embargo, el idioma no especifica un tamaño máximo para las cadenas, y elO(n) parte de la comparación de cadenas domina el tiempo de ejecución mucho antes de que eso suceda.
** Por cierto, esto significa que los números en JavaScript no pueden aumentar infinitamente. Más allá de cierto punto, comienzan a tirar dígitos más pequeños (por ejemplo, los números superiores a 2 ^ 53 solo pueden ser pares, y los números superiores a 2 ^ 54 solo pueden ser divisibles por 4), y cuando el número se hace lo suficientemente grande, se redondea hasta el infinito. Por el contrario, si divide un número una y otra vez para hacerlo infinitamente pequeño, eventualmente se redondeará a cero.
2por ejemplo, no lo es3. Eso es. Del mismo modo123no lo es124. Una cadena es una colección de caracteres"abc"diferente"abd"pero tiene que verificar cada carácter.