Este repositório contém explicações e exemplos práticos sobre Big O Notation, que é usada para descrever a complexidade algorítmica de algoritmos e funções, em termos de tempo e espaço.
Big O Notation é uma forma matemática de descrever o comportamento assintótico de funções, ou seja, como o tempo de execução ou o uso de memória de um algoritmo cresce à medida que o tamanho da entrada aumenta. Ela fornece uma maneira de classificar algoritmos com base na sua eficiência.
- O(1): Complexidade constante
- O(log n): Complexidade logarítmica
- O(n): Complexidade linear
- O(n log n): Complexidade linear-logarítmica
- O(n²): Complexidade quadrática
- O(2^n): Complexidade exponencial
- Navegue até a pasta
examples. - Abra os arquivos de exemplo para entender como cada complexidade é implementada.
A complexidade constante significa que a função executa em um tempo fixo, independentemente do tamanho da entrada.
<?php
function acessoElemento($arr, $index) {
return $arr[$index];
}
$arr = [1, 2, 3, 4, 5];
echo acessoElemento($arr, 3);
?>A complexidade logarítmica é frequentemente associada a algoritmos que dividem a entrada em pedaços menores, como a busca binária.
<?php
function buscaBinaria($arr, $valor) {
$inicio = 0;
$fim = count($arr) - 1;
while ($inicio <= $fim) {
$meio = intdiv($inicio + $fim, 2);
if ($arr[$meio] == $valor) {
return $meio;
} elseif ($arr[$meio] < $valor) {
$inicio = $meio + 1;
} else {
$fim = $meio - 1;
}
}
return -1; // Não encontrado
}
$arr = [1, 3, 5, 7, 9, 11, 13, 15];
echo buscaBinaria($arr, 7);
?>A complexidade linear significa que o tempo de execução cresce diretamente com o tamanho da entrada.
<?php
function somaArray($arr) {
$soma = 0;
foreach ($arr as $valor) {
$soma += $valor;
}
return $soma;
}
$arr = [1, 2, 3, 4, 5];
echo somaArray($arr);
?>A complexidade linear-logarítmica ocorre em algoritmos como a ordenação por mergesort ou quicksort.
<?php
function quicksort($arr) {
if (count($arr) < 2) {
return $arr;
}
$pivo = $arr[0];
$menor = [];
$maior = [];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i] < $pivo) {
$menor[] = $arr[$i];
} else {
$maior[] = $arr[$i];
}
}
return array_merge(quicksort($menor), [$pivo], quicksort($maior));
}
$arr = [5, 2, 9, 1, 5, 6];
print_r(quicksort($arr));
?>A complexidade quadrática é geralmente vista em algoritmos que possuem loops aninhados, como o bubble sort.
<?php
function bubbleSort($arr) {
$n = count($arr);
for ($i = 0; $i < $n; $i++) {
for ($j = 0; $j < $n - 1 - $i; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
}
}
}
return $arr;
}
$arr = [64, 34, 25, 12, 22, 11, 90];
print_r(bubbleSort($arr));
?>A complexidade exponencial é frequentemente associada a problemas de força bruta, como o cálculo de números de Fibonacci recursivamente.
<?php
function fibonacci($n) {
if ($n <= 1) {
return $n;
}
return fibonacci($n - 1) + fibonacci($n - 2);
}
echo fibonacci(10);
?>Contribuições para melhorar o conteúdo e os exemplos são bem-vindas! Feel free to open issues or submit pull requests.