Algorytmy, które musisz znać (2026)
Algorytmy na maturę z informatyki 2026 – Kompendium: NWD, Sito, Horner

Algorytmy na maturę z informatyki 2026 – Kompendium: NWD, Sito, Horner

Algorytmiczne Must-Have na maturze 2026:

  • Teoria liczb: Liczby pierwsze (Sito Eratostenesa), rozkład na czynniki (faktoryzacja), NWD i NWW.
  • Systemy liczbowe: Konwersja dowolny system -> dziesiętny (Schemat Hornera).
  • Ciągi: Ciąg Fibonacciego (iteracyjnie vs rekurencyjnie).
  • Analiza: Umiejętność określenia złożoności obliczeniowej (np. O(n) vs O(log n)).

Dlaczego algorytmy to klucz do wyniku 90%+?

Na maturze z informatyki zadania algorytmiczne pojawiają się zarówno w części teoretycznej (analiza pseudokodu, uzupełnianie luk), jak i praktycznej (plik z milionem liczb do przetworzenia). Nie wystarczy, że kod "działa". Musi działać szybko. Egzaminatorzy CKE premiują rozwiązania optymalne – dlatego zamiast sprawdzać dzielniki do n, musisz wiedzieć, kiedy przerwać pętlę przy pierwiastku z n. W tym kompendium przejdziemy przez najważniejsze algorytmy w języku Python.

1. Złożoność obliczeniowa – podstawa teorii

Zanim zaczniesz pisać kod, musisz wiedzieć, jak szybki on jest. Na maturze często pada pytanie: „Jaka jest złożoność tego algorytmu?”. Oto ściąga:

ZłożonośćNazwaPrzykład algorytmu
O(1)StałaDostęp do elementu tablicy: tab[5].
O(log n)LogarytmicznaAlgorytm Euklidesa, Wyszukiwanie binarne.
O(n)LiniowaZnalezienie minimum w nieposortowanej tablicy.
O(n log n)Liniowo-logarytmicznaDobre sortowanie (Merge Sort, Quick Sort).
O(n²)KwadratowaSortowanie bąbelkowe, sprawdzanie par każdy z każdym.
Pamiętaj: Jeśli masz do przetworzenia plik z 100 000 wierszy, algorytm O(n²) prawdopodobnie przekroczy czas (Time Limit Exceeded).

1.5. Wyszukiwanie Binarne – Znajdź igłę w stogu siana

Jeśli masz posortowaną tablicę i musisz znaleźć w niej element, nigdy nie używaj zwykłej pętli for (O(n)). Wyszukiwanie binarne dzieli zakres na pół w każdym kroku, co daje złożoność O(log n). Dla miliona elementów potrzebuje tylko ok. 20 sprawdzeń!

Binary Search (Iteracyjnie)

def binary_search(arr, target):
  left, right = 0, len(arr) - 1
  while left <= right:
      mid = (left + right) // 2
      if arr[mid] == target:
          return mid  # Znaleziono indeks
      elif arr[mid] < target:
          left = mid + 1
      else:
          right = mid - 1
  return -1  # Nie znaleziono
💡
Pamiętaj: Tablica MUSI być posortowana. Kluczowy jest warunek while left <= right oraz aktualizacja mid + 1 / mid - 1, aby uniknąć pętli nieskończonej.

2. Liczby pierwsze: Metoda naiwna vs Sito Eratostenesa

Badanie pierwszości to klasyk. Mamy dwie sytuacje: sprawdzasz jedną liczbę lub szukasz wszystkich liczb pierwszych w zakresie.

A. Sprawdzanie jednej liczby (Optymalne)

def is_prime(n):
  if n < 2:
      return False
  # Sprawdzamy dzielniki tylko do pierwiastka z n
  for i in range(2, int(n ** 0.5) + 1):
      if n % i == 0:
          return False
  return True
💡
Kluczowa optymalizacja: range(2, int(n**0.5) + 1). Złożoność wynosi O(√n). Bez tego, dla dużych liczb, program będzie działał za wolno.

B. Sito Eratostenesa (Generowanie zakresu)

def sieve(n):
  primes = [True] * (n + 1)
  primes[0] = primes[1] = False
  for i in range(2, int(n ** 0.5) + 1):
      if primes[i]:
          # Wykreślamy wielokrotności liczby i
          for j in range(i * i, n + 1, i):
              primes[j] = False
  return [x for x in range(n + 1) if primes[x]]

print(sieve(30)) # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
💡
Jeśli zadanie brzmi 'Znajdź wszystkie liczby pierwsze mniejsze od miliona', Sito jest jedynym słusznym wyborem. Jest znacznie szybsze niż sprawdzanie is_prime dla każdej liczby z osobna.

3. NWD i NWW – Algorytm Euklidesa

Największy Wspólny Dzielnik (NWD) przydaje się przy skracaniu ułamków i zadaniach z teorią liczb. Algorytm Euklidesa jest jednym z najstarszych i najszybszych algorytmów świata.

Algorytm Euklidesa (Wersja iteracyjna)

def nwd(a, b):
  while b:
      a, b = b, a % b
  return a

# NWW obliczamy ze wzoru:

def nww(a, b):
return (a * b) // nwd(a, b)
💡
Złożoność logarytmiczna O(log(min(a, b))). Wersja z modulo (%) jest znacznie szybsza niż wersja z odejmowaniem. Pamiętaj o wzorze na NWW – łączy się on bezpośrednio z NWD.

4. Rozkład na czynniki pierwsze (Faktoryzacja)

Częste zadanie maturalne: "Dla każdej liczby z pliku wypisz jej czynniki pierwsze". Tutaj również kluczowa jest pętla do pierwiastka z liczby.

Faktoryzacja liczby n

def get_prime_factors(n):
  factors = []
  d = 2
  temp = n
  while d * d <= temp:
      while temp % d == 0:
          factors.append(d)
          temp //= d
      d += 1
  if temp > 1:
      factors.append(temp)
  return factors

print(get_prime_factors(60)) # Wynik: [2, 2, 3, 5]
💡
Algorytm dzieli liczbę przez najmniejszy możliwy dzielnik (2, potem 3, itd.) tak długo, jak się da. Warunek if temp > 1 na końcu wyłapuje ostatni czynnik pierwszy, jeśli liczba nie zredukowała się do 1.

5. Systemy liczbowe i Schemat Hornera

Konwersja z systemu binarnego (lub dowolnego innego) na dziesiętny może być wykonana klasycznie (sumując potęgi) lub sprytniej – Schematem Hornera. CKE uwielbia Schemat Hornera w części teoretycznej.

Schemat Hornera (System X -> Dziesiętny)

def horner(liczba_str, system):
  wynik = 0
  for cyfra in liczba_str:
      wynik = wynik * system + int(cyfra)
  return wynik

# Binarny na dziesiętny

print(horner("1101", 2)) # 13

# Ósemkowy na dziesiętny

print(horner("17", 8)) # 15
💡
Zamiast potęgować cyfra * podstawa^k, Horner wykorzystuje mnożenie i dodawanie: ((1*2 + 1)*2 + 0)*2 + 1. Jest to bardziej efektywne i często wymagane w specyfikacji zadania.

6. Ciąg Fibonacciego – Pułapka rekurencji

Wyznaczanie n-tego wyrazu ciągu Fibonacciego to idealny przykład na pokazanie różnicy między rekurencją a iteracją. Na maturze unikaj czystej rekurencji dla dużych n!

Fibonacci Iteracyjnie (Bezpieczny)

def fib_iter(n):
  if n <= 1: return n
  a, b = 0, 1
  for _ in range(2, n + 1):
      a, b = b, a + b
  return b
💡
Złożoność liniowa O(n). Działa błyskawicznie nawet dla n=1000.

Fibonacci Rekurencyjnie (Ryzykowny)

def fib_rec(n):
  if n <= 1: return n
  return fib_rec(n-1) + fib_rec(n-2)
💡
Złożoność wykładnicza O(2^n). Dla n=40 program może działać kilka sekund, dla n=50 – 'zawiśnie'. Używaj tylko dla bardzo małych n lub z zapamiętywaniem (memoization).

Najczęściej zadawane pytania (FAQ) - Algorytmika

Wątpliwości przed egzaminem? Odpowiadamy.

Czy muszę pisać własną funkcję konwersji systemów, czy mogę użyć int(x, base)?

W części praktycznej (programowanie) MOŻESZ używać funkcji wbudowanych jak int('101', 2), bin(), hex(). Oszczędzasz czas i minimalizujesz ryzyko błędu. Własne algorytmy (Horner) są wymagane głównie w części teoretycznej (zapisywanie algorytmu w pseudokodzie) lub gdy system jest nietypowy (np. podstawa ujemna).

Jaką metodę sortowania wybrać na maturze?

W Pythonie używaj wbudowanej metody .sort() lub funkcji sorted(). Działają one w oparciu o Timsort (O(n log n)) i są niezwykle szybkie. Nie ma sensu pisać ręcznie QuickSorta, chyba że treść zadania wyraźnie tego wymaga (bardzo rzadkie).

Czy Sito Eratostenesa jest konieczne?

Jeśli masz zadanie typu „znajdź liczby pierwsze w przedziale do 100 000”, Sito jest najlepszym wyborem. Sprawdzanie każdej liczby osobno funkcją is_prime może przekroczyć limit czasu, jeśli danych wejściowych jest dużo.

Podsumowanie

Opanowanie tych 6 algorytmów (Pierwszość, Sito, NWD, Faktoryzacja, Horner, Fibonacci) daje Ci solidną bazę na maturę z informatyki 2026. Pamiętaj, że w części praktycznej liczy się poprawny wynik i czas działania programu. Ćwicz implementację tych schematów, aż będziesz je pisać z pamięci. Potrzebujesz wsparcia w nauce algorytmiki? Sprawdź nasze kursy maturalne na PROkorepetycje.pl!

Podoba Ci się ten artykuł? 💻

To tylko wycinek wiedzy! Na naszych korepetycjach omawiamy te tematy jeszcze dokładniej. Zapisz się na lekcję próbną i zdaj egzamin na 100%.

🚀 Zadzwoń i umów darmową konsultację

Autor: Alan Ostrowski