Em geral, usamos a notação big-O somente quando n pode subir para valores obscenamente grandes, porque a notação big-O descreve como o tempo de execução aumenta à medida que a entrada aumenta. Por exemplo, ao classificar uma lista, a maioria dos melhores algoritmos é classificada O(n log n)- o que significa, e somente significa, que quando a lista é longa o suficiente, o tempo que leva para classificá-la é proporcional an log n . Quando a lista não é longa o suficiente, outros fatores (por exemplo, a qualquer momento que seu algoritmo leve para alocar espaço extra) tornam-se significativos e podem potencialmente levar o tempo de execução.
Com seqüências de JavaScript, npode realmente ficar arbitrariamente grande *, por isso dizemos que a comparação leva O(n)tempo. Porém, com números JavaScript (que são números de ponto flutuante de precisão dupla IEEE 754 ), ntem um limite máximo de 64-1 para um bit de sinal, 11 para um expoente e 53 para dígitos significativos **. Por isso, sabemos exatamente quanto tempo levará para que uma comparação de números ocorra, e os melhores sistemas que temos para comparar números desse tamanho exato funcionam mais ou menos da mesma forma, independentemente de quantos desses 64 dígitos cada número realmente Portanto, a comparação desses números no JavaScript é considerada O(1).
* Tecnicamente, há um limite superior porque a RAM pode acabar. No entanto, o idioma não especifica um tamanho máximo para seqüências de caracteres, e oO(n) parte da comparação de cadeias domina o tempo de execução muito antes disso.
** A propósito, isso significa que os números no JavaScript não podem aumentar infinitamente. Depois de um certo ponto, eles começam a jogar fora dígitos menores (por exemplo, números acima de 2 ^ 53 só podem ser pares e números acima de 2 ^ 54 só podem ser divisíveis por 4) e, quando o número fica grande o suficiente, ele arredonda para cima ao infinito. Por outro lado, se você dividir um número repetidamente para torná-lo infinitesimalmente pequeno, ele acabará arredondando para zero.
2por exemplo, não é3. É isso aí. Da mesma forma123não é124. Uma string é uma coleção de caracteres"abc"diferente,"abd"mas você deve verificar cada caractere.