INF.04Algorytmika i Struktury Danych
Złożoność obliczeniowa (Big O Notation)
Formalna miara efektywności algorytmu określająca zapotrzebowanie na czas procesora lub pamięć w funkcji rozmiaru danych wejściowych (n).
Co to jest złożoność obliczeniowa?
Złożoność obliczeniowa to formalna miara wydajności algorytmu. Określa, jak szybko rośnie czas wykonania (złożoność czasowa) lub zapotrzebowanie na pamięć operacyjną (złożoność pamięciowa) w funkcji rozmiaru danych wejściowych n.
Najczęstsze klasy złożoności czasowej (od najszybszych):
- O(1) – stała: Czas wykonania nie zależy od liczby danych (np. dostęp do elementu tablicy po indeksie:
arr[0], operacjapushna stosie). - O(log n) – logarytmiczna: Z każdym krokiem przestrzeń poszukiwań zmniejsza się o połowę (np. wyszukiwanie binarne w posortowanej tablicy).
- O(n) – liniowa: Czas rośnie proporcjonalnie do liczby elementów (np. przeszukanie liniowe tablicy, pojedyncza pętla
for). - O(n log n) – liniowo-logarytmiczna: Optymalna złożoność dla algorytmów sortowania przez porównania (np. Quicksort, Merge sort, Heapsort).
- O(n²) – kwadratowa: Czas rośnie proporcjonalnie do kwadratu danych wejściowych – podwójnie zagnieżdżona pętla (np. sortowanie bąbelkowe, sortowanie przez wstawianie/wybieranie).
- O(2ⁿ) – wykładnicza: Liczba operacji podwaja się przy każdym nowym elemencie (np. naiwna rekurencja dla ciągu Fibonacciego).
Pułapki na egzaminie INF.04:
- Jeśli algorytm wykonuje podwójną pętlę
for (i = 0; i < n; i++) for (j = 0; j < n; j++), jego złożoność to O(n²). - Wykonanie dwóch niezależnych pętli po n to O(n + n) = O(2n) = O(n), a nie O(n²)!
Chcesz sprawdzić to pojęcie w praktyce?
Przeszukaj pytania z oficjalnych arkuszy CKE powiązane z hasłem Złożoność obliczeniowa (Big O Notation) lub rozpocznij trening.