Rekurencja, dziel i zwyciężaj, programowanie dynamiczne, podejście zachłanne i metoda połowienia — techniki algorytmiczne z zakresu rozszerzonego podstawy programowej.
Pytania z działów: Algorytmika i analiza algorytmów (172)
Konto zakładasz w minutę · pełny dostęp od 49 zł/mies.
Sprawdzian z algorytmiki z odpowiedziami →

Quiz · Algorytmy zaawansowane
172 pytania z tej części materiału w jednym miejscu. Wybierasz je filtrem, po każdej odpowiedzi widzisz wyjaśnienie, a quiz sam dobiera trudność i wraca do Twoich błędów.

Wybierasz dział, typ zadania i trudność 1–5. Przy każdej opcji widzisz, ile pytań zostaje w puli.
Od razu wiesz, czy dobrze — i dlaczego. Zadania otwarte ocenia AI według zasad oceniania CKE, z punktacją częściową.
Pytanie z błędem wraca po kilku dniach z plakietką „Powtórka”. Powtórki zajmują najwyżej 30% sesji; wyłączasz je jednym przełącznikiem.
Quiz liczy Twój poziom z ostatnich odpowiedzi i podsuwa pytania, przy których trafiasz ok. 70% — nie za łatwe, nie za trudne.
Zaznaczasz odpowiedź, klikasz „Sprawdź” i widzisz, która była poprawna i dlaczego. Możesz też odsłonić odpowiedź bez rozwiązywania albo pominąć pytanie.
Kilka pytań z bazy z działu „Algorytmy zaawansowane” — kliknij odpowiedź i sprawdź.
Podstawa programowa (zakres rozszerzony) wymienia tu: rekurencję (generowanie ciągów, potęgowanie, sortowanie, fraktale), metodę dziel i zwyciężaj (jednoczesne znajdowanie minimum i maksimum, sortowanie przez scalanie i szybkie), podejście zachłanne (wydawanie reszty, szukanie najkrótszej drogi), programowanie dynamiczne (najdłuższy wspólny podciąg) oraz znajdowanie podciągów o zadanych własnościach, np. spójnego podciągu o największej sumie.
W Informatorze CKE są przykłady takich zadań:
Według Informatora do około 60% punktów w arkuszu można uzyskać za zadania z analizy algorytmów i programowania. Algorytm zapisuje się w pseudokodzie albo w języku wybranym na egzamin — w 2027 r. to C/C++, Java albo Python (komunikat dyrektora CKE z 20 sierpnia 2026 r.).
Przed maturą
Zacznij od: Rekurencja, Programowanie dynamiczne (PD), Algorytm Kadane i 9 kolejnych pozycji.
Pełna lista10 umiejętności do odhaczenia, od „Rekurencja” po „Łańcuchy przedziałów i porządki”.
Lista umiejętności8 pułapek, np. „Rekurencja bez warunku stopu lub z błędnym warunkiem”. Przy każdej jest poprawna wersja i wyjaśnienie.
Typowe błędyNajpierw krótki quiz, potem pełny sprawdzian z całego zakresu.
Zakres materiału
Lista zgodna z wymaganiami podstawy programowej PR i Informatorem CKE.
Identyfikacja przypadku bazowego (warunek stopu) oraz kroku rekurencyjnego (wywołanie z mniejszymi danymi). Przykłady: silnia, ciąg Fibonacciego, algorytm Euklidesa w wersji rekurencyjnej, szybkie potęgowanie, rekurencyjne wstawianie elementu przy sortowaniu (Informator CKE, zadanie 5). Każde wywołanie zajmuje miejsce na stosie wywołań.
Przekształcanie procedury rekurencyjnej w wersję pętlową przy użyciu stosu lub akumulatora. Wzorzec: identyfikuj parametry zmienne, zastąp wywołanie pętlą while/for, kontroluj warunek zakończenia.
Podstawa programowa wymienia najdłuższy wspólny podciąg; tą samą metodą rozwiązuje się zadanie o łańcuchach przedziałów z Informatora CKE (zadanie 3.3) i zadanie o najdłuższym podciągu rosnącym w czasie O(n²). Idea: wynik[i] zależy od wcześniej obliczonych wyników, więc niczego nie liczymy drugi raz.
Rozwiązanie liniowe O(n): pamiętaj najlepszą sumę segmentu kończącego się na bieżącym elemencie; gdy jest ujemna, nowy segment zacznij od bieżącego elementu. W Informatorze CKE (zadanie 1.4) trzeba dodatkowo podać indeksy początku i końca segmentu, więc zapamiętuj też początek bieżącego segmentu.
Podział problemu na mniejsze podproblemy, rozwiązanie każdego z nich i połączenie wyników. Przykłady z podstawy programowej: jednoczesne znajdowanie minimum i maksimum, sortowanie przez scalanie O(n log n), sortowanie szybkie (średnio O(n log n)). Na połowieniu opierają się też wyszukiwanie binarne O(log n) i szybkie potęgowanie O(log n).
Wybór lokalnie najlepszej opcji w każdym kroku. Podstawa programowa podaje dwa zastosowania: wydawanie reszty i szukanie najkrótszej drogi. Metoda zachłanna nie zawsze daje wynik optymalny: dla nominałów 1, 3, 4 i kwoty 6 wyda trzy monety (4 + 1 + 1), a wystarczą dwie (3 + 3).
Tablica musi być posortowana. Algorytm: lewy=0, prawy=n-1; dopóki lewy ≤ prawy: środek = (lewy+prawy) div 2, porównaj z szukaną wartością i zawęź przedział. Złożoność O(log n). Wariant: znajdź pierwsze/ostatnie wystąpienie, znajdź najmniejszy element ≥ x.
Notacja O(): O(1) — stała, O(log n) — logarytmiczna, O(n) — liniowa, O(n log n) — quasi-liniowa, O(n²) — kwadratowa, O(n³) — sześcienna, O(2ⁿ) — wykładnicza. Zadania CKE opisują złożoność słowami: logarytmiczna, liniowa, kwadratowa, sześcienna (Informator, zadanie 4.2). Trzy zagnieżdżone pętle po n elementach to O(n³) — dla n = 10⁵ daje to rząd 10¹⁵ operacji.
W zadaniach, w których algorytm zapisuje się w arkuszu, CKE zwykle ogranicza dozwolone operacje do: dodawania, odejmowania, mnożenia, dzielenia, dzielenia całkowitego (div), reszty z dzielenia (mod), porównań, instrukcji sterujących, przypisań i samodzielnie napisanych funkcji; funkcje wbudowane są wtedy zabronione (Informator, zadanie 5.4; arkusze 2023 zad. 2.1, 2024 zad. 3.1, 2025 zad. 1.3, 2026 zad. 2.2). Dokładną listę zawsze podaje uwaga w treści zadania.
Zadanie 3 z Informatora CKE: łańcuch to ciąg przedziałów, w którym każdy kolejny zawiera poprzedni. Wzorzec: uporządkuj przedziały od najkrótszych do najdłuższych; dla każdego przedziału i licz dl[i] = max(dl[j]) + 1 po wszystkich przedziałach j zawartych w i (dl[i] = 1, gdy takich nie ma). Koszt O(n²).
Typowe błędy
Typowe błędy w zadaniach z tego działu — i jak ich unikać.
Rekurencja bez warunku stopu lub z błędnym warunkiem.
Zawsze sprawdź najpierw warunek bazowy, dopiero potem rób wywołanie rekurencyjne. Wzorzec: „jeśli n ≤ 0 zwróć ...; w przeciwnym razie zwróć f(n-1) + ...”.
Dlaczego: Bez warunku stopu wywołania nigdy się nie kończą i program przerywa błąd przepełnienia stosu. Pisz przypadek bazowy jako pierwszy.
Trzy zagnieżdżone pętle dla zadania z n=100000.
Sprawdź rozmiar danych. Dla n = 100 000 algorytm sześcienny to rząd 10¹⁵ operacji, a kwadratowy — 10¹⁰; szukaj rozwiązania liniowego albo O(n log n).
Dlaczego: W Informatorze CKE zadanie 1.3 ma 1000 liczb i — jak podaje komentarz do rozwiązania — program sześcienny jest dla tych danych wystarczająco szybki. Zadanie 1.4 ma 100 000 liczb, a przykładowe rozwiązanie jest liniowe.
Dla najdłuższego podciągu rosnącego (LIS) używanie warunku t[j] ≤ t[i].
Dla podciągu rosnącego: t[j] < t[i] (ściśle). Dla niemalejącego: t[j] ≤ t[i].
Dlaczego: Jedno słowo w treści zmienia wynik: „rosnący” oznacza nierówność ostrą, „niemalejący” — nieostrą. Podstawa programowa wymienia właśnie najdłuższy spójny podciąg niemalejący.
Założenie, że zachłanne wydawanie reszty zawsze daje najmniejszą liczbę monet.
Metoda zachłanna (zawsze największy możliwy nominał) jest optymalna tylko dla niektórych zestawów nominałów. Gdy nominały są nietypowe, sprawdź kontrprzykład albo użyj programowania dynamicznego.
Dlaczego: Dla nominałów 1, 3, 4 i kwoty 6 metoda zachłanna wyda 4 + 1 + 1 (trzy monety), a optymalnie jest 3 + 3 (dwie monety).
Bisection na tablicy nieposortowanej.
Wyszukiwanie połówkowe działa tylko na danych posortowanych. Jeśli nie są — najpierw posortuj O(n log n), potem szukaj O(log n).
Dlaczego: Podstawa programowa mówi o wyszukiwaniu binarnym w zbiorze uporządkowanym. Na danych nieuporządkowanych algorytm może odrzucić połowę, w której leży szukany element.
Implementacja Kadane bez obsługi tablicy z wszystkimi liczbami ujemnymi.
Inicjalizuj maks = t[0] (NIE maks = 0!) i ost_suma = t[0]. Dzięki temu jeśli wszystkie liczby są ujemne, algorytm zwróci największą (najmniej ujemną).
Dlaczego: Maks = 0 daje wynik 0 dla tablicy [-5,-3,-1], a poprawny segment niepusty to [-1]. Tak samo (maks = ost_suma = t[0]) zaczyna przykładowe rozwiązanie zadania 1.4 w Informatorze CKE.
Licznik wywołań funkcji rekurencyjnej przekazywany jako zwykły parametr (przez wartość).
Licznik wywołań trzymaj w zmiennej globalnej, przekazuj przez referencję albo zwracaj jako wynik funkcji.
Dlaczego: Parametr przekazany przez wartość jest w każdym wywołaniu osobną kopią, więc jego zmiana nie wraca do funkcji wywołującej.
Programowanie dynamiczne bez sortowania danych wejściowych.
Dla łańcuchów przedziałów / problemów z zawieraniem — pierwszy krok to sortowanie (po długości, po końcu, po początku). Dopiero potem buduj tablicę dl[].
Dlaczego: Wskazówka do zadania 3.3 w Informatorze CKE: długości łańcuchów oblicza się w kolejności od przedziałów najkrótszych do najdłuższych. Bez tego porządku komórka dl[i] bywa liczona, zanim znane są wartości, od których zależy.
Do zapamiętania
Jak się uczyć
Czytaj polecenie uważnie: „rosnący” to nie „niemalejący”, „spójny podciąg” to nie „podciąg”, „większy” to nie „większy lub równy”. Każde z tych słów zmienia algorytm.
Sprawdź rozmiar danych przed napisaniem kodu. Dla 1000 liczb wystarczy nawet rozwiązanie sześcienne (Informator CKE, zadanie 1.3), dla 100 000 potrzebne jest liniowe albo O(n log n) (zadanie 1.4).
Zawsze napisz przypadek bazowy rekurencji jako pierwszy. Potem dopisuj krok rekurencyjny. Po napisaniu — przetestuj na ręcznie obliczonym przykładzie z polecenia.
W zadaniach z plikiem danych najpierw sprawdź program na przykładzie z polecenia, dla którego znasz wynik. Dopiero potem uruchom go na całym pliku.
Przećwicz problemy wymienione w podstawie programowej: spójny podciąg o największej sumie, najdłuższy spójny podciąg niemalejący, najdłuższy wspólny podciąg — oraz łańcuchy przedziałów z Informatora CKE.
W pseudokodzie CKE spotkasz zapisy: „dla i = 2, 3, …, n wykonaj”, „dopóki … wykonaj”, strzałkę ← jako przypisanie oraz operatory div i mod (Informator, zadanie 4; arkusz 2025, zadanie 1). Gdy zadanie każe zapisać algorytm w arkuszu, możesz użyć pseudokodu albo języka programowania wybranego na egzamin.
Algorytm w pseudokodzie zawsze testuj na przykładzie z polecenia ręcznie (krok po kroku, prowadząc kolumny stanu zmiennych). Często wykrywasz off-by-one, zły warunek pętli czy złą inicjalizację.
Każdy typ wymaga innej strategii rozwiązywania.
FAQ
Naturalne kontynuacje tematu
Pełen dostęp do 172 zadań z tego działu (PR), edytora kodu z podświetlaniem składni (C++, Python, SQL) i oceny AI z punktacją CKE. Anulujesz kiedy chcesz.
Pełny dostęp od 49 zł/mies. · jednorazowo 59 zł na 30 dni (BLIK / Przelewy24 / Google Pay / Apple Pay / Revolut / Karta) · subskrypcję anulujesz w 1 kliknięciu
Wybierz, które kategorie plików cookies akceptujesz. Zgodę możesz zmienić w dowolnym momencie.
Sesja, bezpieczeństwo, podstawowa funkcjonalność (logowanie, koszyk subskrypcji, zabezpieczenia reCAPTCHA). Bez nich serwis nie działa.
Google Analytics 4 — anonimowe statystyki użycia serwisu. Pomaga nam poprawiać aplikację na podstawie tego, które funkcje są faktycznie używane.
Google Ads — remarketing i pomiar skuteczności reklam. Dzięki temu możemy pokazywać Ci trafniejsze reklamy i finansować rozwój darmowej wersji.
Zapamiętywanie preferencji (motyw ciemny/jasny, wybrane przedmioty, ustawienia sesji).
Dopasowywanie treści do Twoich zainteresowań (rekomendacje pytań, spersonalizowane przypomnienia o nauce).