🎯 Definicja

Notacja Big-O (O-notation) to jedno z podstawowych narzędzi służących do określania złożoności czasowej i pamięciowej algorytmu. Mierzy górne ograniczenie (“upper bound”) tempa wzrostu funkcji – tzn. ile operacji (lub jednostek zasobu) algorytm może maksymalnie wykonać dla danych wejściowych o rozmiarze n.

🔑 Kluczowe punkty

  • Big-O reprezentuje najgorszy przypadek (worst-case) działania algorytmu.
  • Pomaga w porównywaniu efektywności różnych algorytmów niezależnie od konkretnej implementacji czy maszyny.
  • Umożliwia oszacowanie skali problemu: jak czas/działania rosną względem przyrostu wejścia (n).
  • Wzrost może być: stały O(1), liniowy O(n), logarytmiczny O(log n), kwadratowy O(n²), wykładniczy O(2ⁿ) itd.

📚 Szczegółowe wyjaśnienie

Zasady zapisu i interpretacji

Dla funkcji O(g(n)) definiujemy:

Jest to formalnie zbiór funkcji rosnących nie szybciej niż g(n) – czyli ograniczenie z góry.

Przykłady złożoności

Przykładowa funkcjaKlasa złożonościOpis
return x + yO(1)Stała liczba operacji
for i in range(n): ...O(n)Liniowa, zależna od n
for i in range(n): for j in range(n): ...O(n²)Kwadratowa, podwójna pętla
binarySearch(arr, x)O(log n)Logarytmiczne – np. wyszukiwanie
fibonacci(n) (rekurencja)O(2ⁿ)Wykładnicza – złożona rekurencja

Kluczowe obserwacje

  • Pomijamy stałe (np. O(2n) → O(n))
  • Pomijamy niższe rzędy (np. O(n² + n) → O(n²))
  • Oceniamy dominującą część funkcji – to ona zadecyduje o skalowaniu dla dużych n.

💡 Przykład zastosowania

Sortowanie typu Bubble Sort ma złożoność O(n²), co czyni go nieefektywnym dla dużych zbiorów danych. Dla danych 10 000 elementów Bubble Sort może potrzebować aż 100 000 000 operacji. Z kolei Merge Sort (O(n log n)) poradzi sobie znacznie szybciej.

W praktyce oznacza to, że wybór odpowiedniego algorytmu — ocenianego właśnie przy pomocy notacji Big-O — ma bezpośredni wpływ na skalowalność i wydajność aplikacji.

📌 Więcej informacji

👽 Brudnopis

  • Big-O = górna granica złożoności (“najgorszy przypadek”)
  • O(1) zawsze przewidywalny czas, niezależnie od rozmiaru danych
  • O(n log n) traktowany jako “praktycznie szybki” (QuickSort, MergeSort)
  • uważaj na “hidden cost”: duża stała w O(1) może sprawiać problemy
  • Notacje powiązane: Ω (minimum), Θ (dokładny wzrost)