Śledzenie pseudokodu i złożoność obliczeniowa
Naucz się śledzić pseudokod krok po kroku. Tabelki śledzenia (dry run) i błyskawiczne szacowanie złożoności O(n) na maturze z informatyki.
W arkuszu dostajesz kilkanaście linijek pseudokodu i pytanie, co wypisze dla podanego n. Zmienia się treść algorytmu, nie sposób jego rozgryzienia: tabelka śledzenia zmiennych działa tak samo na silni, jak na sortowaniu. Do tego dochodzi drugie stałe pytanie, o złożoność, którą rozpoznasz po liczbie zagnieżdżonych pętli. Na zajęciach widzimy, że gubi się nie sam algorytm, tylko kolejność wykonania — co dzieje się w zagnieżdżonej pętli i które instrukcje zdążyły się wykonać do danego momentu.
- Śledzenie algorytmu (Zostań ludzkim kompilatorem)
Na maturze często spotkasz się z zadaniem, w którym CKE rzuca Ci krótki pseudokod i pyta: "Jaki wynik wypisze ten algorytm dla ?". Komputer stoi na stanowisku przez cały egzamin, ale przepisywanie pseudokodu do środowiska bywa wolniejsze niż rzetelna tabelka — a przy pytaniu o złożoność i tak nic nie da.
Najskuteczniejszą, całkowicie bezbłędną metodą analizy jest tabelka śledzenia zmiennych. Polega ona na wypisaniu wszystkich zmiennych z algorytmu w postaci nagłówków kolumn. Następnie przechodzisz linijka po linijce przez kod i aktualizujesz ich wartości, wykreślając stare.
- Zapis CKE — co znaczy każdy symbol
Pseudokod w arkuszach ma swoją stałą konwencję i warto ją znać na pamięć, bo połowa błędów w tym zadaniu bierze się nie z algorytmu, tylko z przeczytania zapisu po swojemu.
x ← 5 podstawienie: "wstaw 5 do x" x = 5 porownanie: "czy x rowna sie 5" x ≠ 5 roznica; czasem zapisywane jako x <> 5 dla i = 1 do n wykonuj: petla przechodzi TAKZE przez n dla i = n do 1 krok -1: petla malejaca dopoki warunek wykonuj: warunek sprawdzany PRZED wejsciem powtarzaj ... az warunek: cialo wykona sie co najmniej raz jezeli warunek to: ... w przeciwnym razie: ... n div 2 dzielenie calkowite: 7 div 2 = 3 n mod 2 reszta z dzielenia: 7 mod 2 = 1 T[i] i-ty element tablicy |T| albo dlugosc(T) liczba elementow tablicy zwroc x zakonczenie funkcji z wynikiem
= prawie zawsze oznacza porównanie. Jeśli pomylisz je z podstawieniem, cała tabelka śledzenia wyjdzie błędna.
- Jak to wygląda w praktyce?
Najlepiej nauczyć się tego na konkretnym przykładzie z arkusza maturalnego.
Zadanie
n ← 4 wynik ← 1 DOPÓKI n > 0 WYKONUJ: wynik ← wynik * n n ← n - 1 WYPISZ wynik
💡 Pokaż rozwiązanie krok po kroku▼
- Złożoność obliczeniowa (Notacja Big O)
Złożoność obliczeniowa określa, jak bardzo wydłuża się czas działania algorytmu w zależności od rozmiaru danych wejściowych (oznaczanych w informatyce jako ).
Na maturze rzadko musisz liczyć każdą matematyczną operację – wystarczy oszacować rząd wielkości. Twoim głównym celem podczas analizy pseudokodu powinno być poszukiwanie pętli.
- Jak błyskawicznie rozpoznać złożoność?
Najczęstsza na maturze. Pojawia się, gdy mamy tylko jedną pętlę przechodzącą przez elementy. Jeśli ilość danych wzrośnie 10 razy, czas wykonania również wzrośnie 10 razy.
DLA i = 1 DO n WYKONUJ...
Typowa dla np. sortowania bąbelkowego. Rozpoznasz ją po dwóch zagnieżdżonych w sobie pętlach. Jeśli dane wzrosną 10 razy, czas wzrośnie aż 100 razy!
DLA i = 1 DO n:
DLA j = 1 DO n...
Ekstremalnie szybka złożoność! Występuje, gdy z każdym krokiem pętli zbiór danych zmniejsza się o połowę (np. wyszukiwanie binarne).
DOPÓKI lewy < prawy:
srodek = (lewy + prawy) / 2
Święty Graal programowania. Kod wykonuje się zawsze w tym samym czasie, niezależnie od tego, czy przetwarza 5 elementów, czy 5 miliardów.
if (tablica[0] % 2 == 0):
WYPISZ "Parzysta"
Rząd dobrych algorytmów sortowania — przez scalanie i szybkiego. Rozpoznasz po tym, że dane są dzielone na pół, a na każdym poziomie podziału przechodzi się przez wszystkie elementy.
sortuj(lewa polowa)
sortuj(prawa polowa)
scal wyniki
Rekurencja z dwoma wywołaniami w jednym kroku, jak naiwny Fibonacci, albo sprawdzanie wszystkich podzbiorów. Przy program nie skończy pracy za twojego życia.
zwroc f(n-1) + f(n-2)
- Z pseudokodu do działającego kodu
W części praktycznej masz komputer, więc najpewniejszą metodą sprawdzenia własnej tabelki jest przepisanie algorytmu i uruchomienie go. Poniżej ten sam pseudokod obok gotowego kodu — zwróć uwagę na trzy miejsca, w których zapis się zmienia.
PSEUDOKOD CKE PYTHON s ← 0 s = 0 dla i = 1 do n wykonuj: for i in range(1, n + 1): s ← s + T[i] s = s + T[i - 1] WYPISZ s print(s)
range(1, n + 1), a nierange(1, n)— pseudokod CKE obejmuje wartość końcową.T[i - 1], bo tablica w arkuszu jest numerowana od 1, a w Pythonie od 0.//zamiastdiv,%zamiastmod,==zamiast pojedynczego=w warunku.
Przy pytaniu o złożoność komputer nic nie da — tam liczy się umiejętność policzenia pętli. Ale przy pytaniu „co wypisze algorytm” uruchomienie kodu zamienia zadanie za kilka punktów w formalność, o ile pamiętasz o tych trzech różnicach.
Lista pomyłek, które kosztują punkty mimo poprawnego rozumowania — i sposoby, żeby ich uniknąć.
Korepetycje z informatyki
Zdajesz maturę rozszerzoną z informatyki?
Prowadzimy indywidualne przygotowanie do matury z informatyki — algorytmy, Python i C++, bazy danych i arkusz kalkulacyjny. Zajęcia online, na arkuszach CKE. Zobacz program i cennik.
Zobacz korepetycje z informatykiUczysz się w technikum informatycznym? Prowadzimy też przygotowanie do kwalifikacji INF.02, INF.03 i INF.04. Zobacz egzaminy zawodowe →
Nadal czujesz się niepewnie?
To tylko jeden z pewniaków. Na kursie przechodzimy przez nie wszystkie, krok po kroku, aż poczujesz ten spokój.
Pomóżcie mi zdać maturę!