Algoritmos e estruturas de dados · Fundamentos · 6 min de leitura
Big-O: complexidade de tempo e espaço
A régua para comparar algoritmos: como o número de passos cresce quando a entrada cresce — de O(1) a O(2ⁿ), com exemplos do dia a dia.
Arraste para o lado para ver o diagrama inteiro.
O que o Big-O mede
Big-O descreve como o custo de um algoritmo cresce quando a entrada (n) cresce, ignorando constantes e detalhes da máquina. Não diz "quantos milissegundos", e sim "se dobrar a entrada, o que acontece": em O(n) o tempo dobra, em O(n²) quadruplica, em O(log n) aumenta um passo só.
Como calcular
- Laços em sequência somam: O(n) + O(n) = O(n).
- Laços aninhados multiplicam: um laço de n dentro de outro de n é O(n²).
- Dividir pela metade a cada passo dá O(log n) (busca binária).
- Fique com o termo dominante e descarte constantes: O(3n² + 5n + 100) = O(n²).
Pior caso, caso médio e espaço
Normalmente falamos do pior caso (a garantia). Às vezes o caso médio importa mais: tabela hash é O(1) em média e O(n) no pior caso. Big-O também mede memória extra — uma cópia do array custa O(n) de espaço, um contador custa O(1).
No código: antes e depois
// O(n²): compara cada item com todos os outros
fun temRepetido(ids: List<Int>): Boolean {
for (i in ids.indices)
for (j in i + 1 until ids.size)
if (ids[i] == ids[j]) return true
return false
} // O(n) de tempo e O(n) de espaço: um conjunto lembra o que já passou
fun temRepetido(ids: List<Int>): Boolean {
val vistos = HashSet<Int>()
for (id in ids) if (!vistos.add(id)) return true
return false
} Trocar o laço aninhado por um HashSet troca tempo por memória: com 100 mil ids, a primeira versão faz cerca de 5 bilhões de comparações; a segunda, 100 mil inserções.
Em resumo
- Big-O mede crescimento, não tempo absoluto.
- Laços aninhados multiplicam; em sequência, somam.
- Descarte constantes e termos menores.
- Meça também o espaço (memória extra).
- Para n pequeno, a constante pode importar mais que a classe.
Exercícios
Responda e confira na hora. Complexidades valem com ou sem espaços, como O(n log n).
-
Um laço percorre os n itens e, dentro dele, outro laço percorre os n itens de novo. Qual a complexidade?
Ver a solução
Resposta: O(n²). Para cada um dos n itens de fora, o laço de dentro roda n vezes: n × n = n².
-
Simplifique O(3n² + 5n + 100).
Ver a solução
Resposta: O(n²). Quando n cresce, 3n² domina 5n e 100; e a constante 3 é descartada.
-
Um algoritmo O(n²) leva 1 segundo com n = 1.000. Quantos segundos ele leva com n = 10.000?
Ver a solução
Resposta: 100. A entrada ficou 10 vezes maior; em O(n²) o tempo cresce 10² = 100 vezes.
Perguntar à IA
Monte um prompt pronto sobre Big-O: complexidade de tempo e espaço na sua linguagem e no seu caso, e abra num chat gratuito.
O prompt vai para o site que você escolher. Não cole senhas, tokens nem dados reais de clientes. Para Gemini e outros, copie e cole.