Co to jest algorytm? Wyjaśnienie, które zostaje w głowie
Każdy program komputerowy to algorytm w działaniu. Zanim napiszesz pierwszą linię kodu,
musisz zrozumieć czym jest algorytm, dlaczego ma kluczowe znaczenie i jak go czytać.
Z wizualizacjami i przykładami w 5 językach.
Zanim napiszesz w życiu choćby jeden program, musisz zrozumieć jedno pojęcie.
Nie język programowania. Nie składnię. Nie IDE. Algorytm.
Bo język możesz zmienić w tydzień. Myślenie algorytmiczne zostaje z tobą na zawsze.
Najprostsza definicja, jaką znam
Algorytm to przepis na rozwiązanie problemu — dokładna lista kroków,
które wykonujesz po kolei, żeby dostać konkretny wynik.
Algorytm jest niezależny od języka programowania. To logika. Kod to tylko jej zapis w języku, który rozumie komputer.
Ten sam algorytm możesz zapisać w Pythonie, PHP, C albo Javie — będzie działał identycznie.
Dlatego zanim zaczniesz pisać kod, najpierw powinieneś mieć algorytm.
Programiści, którzy tego nie rozumieją, piszą kod metodą prób i błędów.
Ci, którzy rozumieją — piszą go z głową.
Algorytmy są wszędzie
Nie musisz być programistą, żeby korzystać z algorytmów. Robisz to od lat.
GPS wyznaczający trasę, Instagram decydujący co ci pokazać, Spotify układający playlist —
to wszystko algorytmy. Ale też codzienniejsze rzeczy:
// analogie z życia
Algorytmy, których używasz codziennie
Każdy z poniższych przykładów ma dane wejściowe, konkretne kroki i wynik. To właśnie algorytm.
☕
Parzenie kawy
Wejście: ziarna, woda. Wyjście: kawa. Kroki zawsze takie same.
1
Zagotuj wodę do 92°C
2
Wsyp kawę do filtra
3
Zalej, poczekaj 4 minuty
4
Gotowe — nalej i pij
🗺️
Nawigacja GPS
Wejście: start i cel. Wyjście: najkrótsza trasa. Miliony obliczeń w sekundę.
1
Pobierz punkt startowy i cel
2
Sprawdź dostępne drogi
3
Oblicz koszty każdej trasy
4
Zwróć najtańszą
📚
Szukanie w słowniku
Jak szukasz — od A, czy otwierasz w połowie? To dwa różne algorytmy.
1
Otwórz słownik w połowie
2
Czy słowo jest przed czy za?
3
Odrzuć połowę stron
4
Powtarzaj aż znajdziesz
Trzy cechy każdego dobrego algorytmu
Możesz nazwać coś algorytmem tylko wtedy, kiedy spełnia trzy warunki.
Jeśli brakuje choćby jednego — to nie algorytm, tylko mniej lub bardziej sensowna lista kroków.
1. Skończoność
Algorytm musi się kiedyś zakończyć. Brzmi oczywisto, ale to jeden z częstszych błędów
w kodzie — nieskończona pętla. Program, który nigdy nie kończy pracy,
jest bezużyteczny.
2. Jednoznaczność
Każdy krok musi być precyzyjny — zero miejsca na domysły.
Instrukcja "zagotuj wodę" jest OK. "Podgrzej trochę" — nie, bo każdy
zrozumie to inaczej. Komputer nie zgaduje intencji.
3. Skuteczność
Algorytm musi dawać poprawny wynik dla każdego poprawnego wejścia.
Nie dla większości przypadków — dla wszystkich.
Dla egzaminu INF.03: Cechy algorytmu to stały temat zadań. Pamiętaj: skończoność, jednoznaczność, skuteczność. Czasem dodaje się też dane wejściowe i dane wyjściowe jako osobne cechy.
Schemat blokowy — algorytm na rysunku
Zanim zapiszesz algorytm w kodzie, często rysuje się go jako schemat blokowy.
Każdy kształt ma konkretne znaczenie. To język wizualny — zrozumiały
niezależnie od tego czy piszesz w Pythonie czy w C.
// schemat blokowy
Algorytm: czy liczba jest parzysta?
Operator modulo (%) zwraca resztę z dzielenia. Jeśli N % 2 == 0, liczba jest parzysta.
START
Pobierz liczbę N
N % 2 == 0 ?
TAK ✓
Wypisz "Parzysta"
NIE ✗
Wypisz "Nieparzysta"
KONIEC
Owalna — START lub KONIEC
Prostokąt — operacja, obliczenie, wejście/wyjście
Romb — warunek, decyzja (dwie ścieżki: TAK / NIE)
Strzałka — kierunek przepływu
Wskazówka: Na egzaminie INF.03 zadania często polegają na narysowaniu schematu blokowego lub odczytaniu co robi podany schemat. Ćwicz oba kierunki.
Sortowanie bąbelkowe — klasyczny przykład
Bubble Sort to jeden z pierwszych algorytmów, które poznaje każdy programista.
Nie dlatego, że jest szybki — bo nie jest. Ale dlatego, że jego logika jest tak prosta,
że można ją wytłumaczyć słowami.
Zasada: porównujemy każdą parę sąsiednich elementów. Jeśli są w złej kolejności —
zamieniamy je miejscami. Powtarzamy to dla całej listy tyle razy, ile potrzeba.
Po każdym przejściu największy nieposortowany element "wypływa" na koniec — jak bąbelek w wodzie.
Uwaga na złożoność: Bubble Sort ma złożoność O(n²). Dla 1000 elementów to milion operacji. W praktyce używaj sort() wbudowanego w język — to jest szybki algorytm (zazwyczaj Timsort lub Quicksort). Bubble Sort to narzędzie do nauki, nie do produkcji.
// interaktywna wizualizacja
Bubble Sort — krok po kroku
Naciśnij Start żeby zobaczyć jak elementy "wypływają" na swoje miejsca.
Wyszukiwanie binarne — mądrze, nie na siłę
Wyobraź sobie, że szukasz słowa "zupa" w słowniku. Możesz kartkować od litery A — zajmie ci to wieki.
Albo możesz otworzyć na środku, sprawdzić czy "zupa" jest przed czy za, i odrzucić połowę stron.
Powtórzyć to kilka razy i być przy "zupie" po 4-5 ruchach.
To właśnie Binary Search. Jeden warunek: lista musi być posortowana.
Jeśli jest — możesz znaleźć element spośród miliona w 20 krokach. Nie w milion.
W 20. To jest siła złożoności O(log n).
Złożoność obliczeniowa — dlaczego liczy się szybkość
Dwa algorytmy mogą dawać identyczny wynik, ale jeden robi to w milisekundy,
a drugi... nigdy nie kończy przy dużych danych. Notacja O() mówi ci
jak czas działania rośnie wraz z liczbą danych.
Przykład: dla 1000 elementów algorytm O(n) wykona 1000 operacji.
Algorytm O(n²) wykona ich milion. O(log n) — tylko 10.
Przy 10 milionach elementów ta różnica jest już życiowa.
// notacja O()
Złożoność obliczeniowa — ściągawka
Ile operacji dla n = 1000 elementów?
Notacja
Nazwa
n=1000
Ocena
Przykład
O(1)
Stały czas
1
świetny
Dostęp do tablicy po indeksie
O(log n)
Logarytmiczny
~10
świetny
Binary Search
O(n)
Liniowy
1 000
dobry
Liniowe przeszukiwanie listy
O(n log n)
Quasi-liniowy
~10 000
dobry
Merge Sort, Quick Sort, Timsort
O(n²)
Kwadratowy
1 000 000
wolny
Bubble Sort, Selection Sort
O(2ⁿ)
Wykładniczy
10³⁰⁰
katastrofa
Brute-force łamania haseł
Kod — ten sam algorytm w 5 językach
Teraz czas zobaczyć jak wygląda to w prawdziwym kodzie.
Wybierz algorytm i język — logika jest identyczna, zmienia się tylko składnia.
To jest najważniejsza lekcja tej sekcji.
// przykłady kodu
Ten sam algorytm, różne języki
Logika nie zmienia się — zmienia się tylko sposób jej zapisu.
parzystosc.py
Gdzie iść dalej?
Ten artykuł to wstęp. Algorytmy to temat na lata. Ale kilka konkretnych kroków na najbliższy czas:
Implementuj ręcznie. Zanim użyjesz wbudowanej funkcji sort(), napisz Bubble Sort sam. Zrozumiesz dlaczego potem chętnie wróciłeś do gotowca.
Rysuj schematy blokowe. Dla każdego nowego problemu. Na papierze. Zanim otworzysz IDE.
LeetCode / HackerRank. Zadania algorytmiczne to najlepszy trening. Zacznij od kategorii "Easy".
Dobry programista nie zna na pamięć wszystkich algorytmów. Rozumie kiedy i dlaczego dany algorytm zastosować.
Algorytmy wracają wszędzie — na rozmowach rekrutacyjnych, przy optymalizacji kodu,
przy projektowaniu baz danych. Im szybciej zbudujesz ten fundament, tym łatwiej
będzie ci rozumieć wszystko co przyjdzie potem.