Pular para o conteúdo principal

Notação Big O

Introdução

Big O é uma forma de medir a eficiência de algoritmos em termos de tempo (velocidade) ou espaço (memória) conforme o tamanho da entrada cresce.

Big O não mede o tempo de execução real — ela mede como o tempo ou a memória crescem dependendo do tamanho da entrada.


Principais Complexidades Big O

O(1) – Complexidade Constante

O tempo de execução não depende do tamanho da entrada. Sempre executa o mesmo número de passos.

O(log n) – Complexidade Logarítmica

Cada operação reduz o problema pela metade. Exemplo clássico: busca binária.

O(n) – Complexidade Linear

O tempo de execução cresce proporcionalmente ao tamanho da entrada. Exemplo: iterar por uma lista.

O(n log n) – Complexidade Quasilinear

Melhor que O(n²), mas pior que O(n). Usado em algoritmos de ordenação eficientes como Merge Sort e Quick Sort (em média).

O(n²) – Complexidade Quadrática

Cada elemento é comparado com todos os outros. Exemplos: Bubble Sort, Selection Sort.

O(2ⁿ) – Complexidade Exponencial

O número de operações dobra a cada elemento adicionado. Exemplos: gerar todos os subconjuntos de uma lista, problema da mochila (força bruta).

O(n!) – Complexidade Fatorial

Testa todas as permutações possíveis. Exemplos: problema do caixeiro viajante (força bruta), gerar todas as permutações de uma lista.


Tabela Resumo das Complexidades

ComplexidadeNomeCrescimentoExemplo Prático
O(1)ConstanteFixo, não muda com nAcessar item de array por índice
O(log n)LogarítmicaCresce lentamenteBusca Binária
O(n)LinearCresce proporcionalmente a nIterar por um array
O(n log n)QuasilinearEntre linear e quadráticoMerge Sort, Quick Sort
O(n²)QuadráticaCresce rapidamenteBubble Sort, Selection Sort
O(2ⁿ)ExponencialCresce muito rápidoSubconjuntos, problemas de combinação
O(n!)FatorialCrescimento explosivoPermutações, Caixeiro Viajante

Gráfico Visual do Crescimento das Complexidades

Crescimento de acordo com o tamanho da entrada n:

|
| O(n!)
| O(2^n)
| O(n²)
| O(n log n)
| O(n)
| O(log n)
|__________O(1)____________________________________> n
  • O(1) permanece constante.
  • O(log n) cresce devagar.
  • O(n) cresce proporcionalmente.
  • O(n log n) cresce um pouco mais rápido.
  • O(n²) cresce rapidamente.
  • O(2ⁿ) e O(n!) crescem muito rápido e logo se tornam impraticáveis.

Dicas para Memorizar Big O

  • O(1): acesso direto
  • O(log n): dividindo pela metade
  • O(n): proporcional
  • O(n log n): dividir e conquistar
  • O(n²): comparações duplas
  • O(2ⁿ): combinações dobrando
  • O(n!): todas as ordens possíveis