A complexidade de algoritmos mede o desempenho, mostrando o tempo ou espaço que o algoritmo usa conforme cresce o tamanho da entrada. É o chakra da eficiência do código!


🔍 Tipos de Complexidade

⏱️ Complexidade de Tempo

Refere-se ao tempo que o algoritmo leva para executar. Normalmente expressa em Big O, que mostra como o tempo cresce com o tamanho da entrada.

🧠 Complexidade de Espaço

Refere-se à quantidade de memória usada, incluindo variáveis, estruturas e chamadas recursivas.


📜 Principais Classes de Complexidade de Tempo

Ícone Notação Nome Descrição Exemplo Naruto
🟢 O(1) Constante Tempo fixo, independente do tamanho da entrada. Verificar se Naruto tem um Rasengan.
🔵 O(log n) Logarítmica Cresce lentamente, divide o problema a cada passo. Buscar um ninja em uma lista ordenada.
🟡 O(n) Linear Cresce proporcionalmente ao tamanho da entrada. Contar todos os ninjas da vila.
🟠 O(n log n) Linearítmica Combina linear com logarítmico, comum em ordenação eficiente. Organizar os ninjas em ordem de força.
🔴 O(n²) Quadrática Cresce muito rápido com entrada grande. Duelo entre todos os pares de ninjas.
🟣 O(2ⁿ) Exponencial Cresce dobrando para cada aumento de entrada. Decidir estratégias combinatórias na guerra ninja.
O(n!) Fatorial Cresce extremamente rápido, para permutações e combinações. Planejar todas as sequências de jutsus possíveis.

📊 Tabela Simplificada de Complexidades

n (Entrada) O(1) O(log n) O(n) O(n log n) O(n²) O(2ⁿ)
10 1 3 10 30 100 1024
100 1 6 100 600 10.000 ~1.27x10³0
1000 1 9 1000 9000 1.000.000 ~1.07x10³01

💥 Exemplos com Código e Tema Naruto


1. 🟢 O(1) – Constante

Verificar se Naruto tem um Rasengan


public boolean temRasengan(String nome) {
    return nome.equals("Naruto Uzumaki");
}