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!
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.
Refere-se à quantidade de memória usada, incluindo variáveis, estruturas e chamadas recursivas.
| Í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. |
| 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 |
Verificar se Naruto tem um Rasengan
public boolean temRasengan(String nome) {
return nome.equals("Naruto Uzumaki");
}