Calculadora de Taxa de Crescimento Big-O
Entradas
| Tamanho da entrada n | 20 |
|---|
Calculadora de Taxa de Crescimento Big-O
Informe um tamanho de entrada n para comparar quantas operações cada classe de complexidade de tempo comum exige — de O(log n) a O(n!).
Entradas
Tamanho da Entrada
Resultados
Insira um valor para ver os resultados.
Complexidades Comuns
Crescimento Extremo
Taxa de crescimento Big-O
A notação Big-O classifica como a demanda de recursos de um algoritmo escala com o tamanho da entrada. Em vez de medir segundos em uma máquina específica, ela captura o formato do crescimento — quando n dobra, o trabalho dobra ou quadruplica? As seis complexidades a seguir são as mais frequentes em livros didáticos e entrevistas técnicas.
As seis classes comuns
O(log n) — Logarítmica. Cada passo elimina uma fração constante do trabalho restante. A busca binária em um vetor ordenado de um bilhão de elementos realiza apenas 30 comparações, pois reduz o espaço de busca à metade a cada passo. Consultas em árvores binárias de busca balanceadas e muitas recorrências de divisão e conquista se enquadram nessa classe.
O(n) — Linear. O trabalho cresce em proporção direta ao tamanho da entrada. Percorrer um vetor uma única vez para encontrar o máximo, contar caracteres em uma string ou ler cada elemento de uma lista são todos lineares. Algoritmos lineares são geralmente considerados eficientes.
O(n log n) — Linearítmica. A complexidade mais comum para ordenação. Merge sort, heapsort e Timsort (usado em Python e Java) atingem O(n log n), que também é o limite teórico inferior para ordenação baseada em comparações. Com , isso representa cerca de vinte milhões de operações — rápido na prática.
O(n²) — Quadrática. Dois laços aninhados sobre a entrada. Bubble sort, insertion sort e a multiplicação de matrizes ingênua têm complexidade de pior caso O(n²). Com , isso equivale a cem milhões de operações; com , chega a um trilhão — impraticável para dados de grande volume.
O(2ⁿ) — Exponencial. O trabalho dobra a cada elemento adicional. O algoritmo recursivo ingênuo de Fibonacci recalcula subproblemas de forma exponencial; a enumeração de todos os subconjuntos de um conjunto também cresce como . Com n = 40, a contagem ultrapassa um trilhão.
O(n!) — Fatorial. A classe de crescimento mais rápido na análise algorítmica cotidiana. Soluções por força bruta para problemas de permutação — como listar todos os percursos possíveis no Problema do Caixeiro Viajante — realizam uma operação por permutação, e existem permutações no total. Com n = 20, a contagem ultrapassa dois quintilhões de operações.
Exemplo com n = 20
A razão entre O(n log n) e O(n!) com n = 20 é de cerca de — a diferença entre uma ordenação rápida e um tempo de espera maior do que a idade do universo.
Orientações práticas
Constantes e efeitos de cache dominam para n pequeno; a complexidade domina para n grande. Um limiar em torno de n = 10.000 é onde O(n²) começa a se tornar problemático no hardware moderno (assumindo operações simples). Acima de , geralmente é necessário um algoritmo O(n log n) ou melhor. Algoritmos exponenciais e fatoriais exigem aproximações, programação dinâmica ou estratégias de poda para qualquer entrada do mundo real.
Conversor de Base Numérica é útil ao trabalhar com representações binárias do espaço de entrada.
Perguntas frequentes (FAQ)
O que a notação Big-O realmente mede?
A notação Big-O descreve o limite superior de como o tempo de execução (ou o uso de memória) de um algoritmo cresce à medida que o tamanho da entrada n aumenta. Ela deliberadamente ignora fatores constantes e termos de ordem inferior, pois esses importam cada vez menos à medida que n cresce.
Um algoritmo O(n²) sempre ultrapassará um O(n log n) para entradas suficientemente grandes, independentemente da velocidade do hardware. Big-O é uma ferramenta para comparar projetos de algoritmos — não uma previsão precisa do tempo de relógio.
Por que o logaritmo é de base 2?
A maioria dos algoritmos de divisão e conquista (busca binária, merge sort, árvores binárias de busca balanceadas) divide o trabalho pela metade a cada passo, portanto a profundidade dessa divisão é log₂ n. Na análise Big-O, a base do logaritmo é apenas um fator constante e não altera a classe de complexidade — log₂ n e log₁₀ n diferem apenas por uma constante.
Mas a base 2 é convencional na ciência da computação por causa da divisão binária. Esta calculadora usa base 2 para seguir essa convenção.
A partir de qual tamanho de entrada a complexidade começa a ser relevante?
Para entradas pequenas, como n < 50, um algoritmo O(n²) bem ajustado frequentemente supera um O(n log n) teoricamente mais rápido, pois tem menor overhead constante e melhor comportamento de cache. A complexidade passa a dominar quando n atinge as centenas ou os milhares.
Com n = 1.000, uma ordenação O(n log n) realiza cerca de 10.000 comparações, enquanto uma ordenação O(n²) realiza 1.000.000. Com n = 1.000.000, a diferença é de um bilhão para um trilhão — a complexidade torna-se o único fator relevante.
O(n!) é utilizado na prática?
Algoritmos O(n!) são impraticáveis para todas as entradas, exceto as menores. Com n = 20, n! ultrapassa dois quintilhões de operações — muito além do que qualquer computador pode processar em uma vida humana.
Na prática, problemas NP-difíceis como o Problema do Caixeiro Viajante são resolvidos com algoritmos de aproximação, heurísticas ou programação dinâmica que evitam a enumeração de todas as permutações. A coluna fatorial nesta calculadora serve como exemplo concreto de por que essas técnicas de aproximação existem.