#3 Od przepisu na naleśniki do kodu w Java: Czym jest algorytm i jak go zapisać?

1. Dlaczego komputer jest... "głupi"?

Często myślimy o komputerach jako o potężnych maszynach myślących. Prawda jest jednak brutalna: komputer nie ma ani grama intuicji, nie potrafi się domyślać i nie potrafi improwizować. Jest po prostu ultraszybkim, ale ślepym wykonawcą poleceń.

Aby osiągnąć jakikolwiek rezultat, komputer potrzebuje precyzyjnego planu działania. Ten plan to właśnie algorytm.

Życiowe analogie:

W skrócie:
Algorytm to uporządkowany, skończony ciąg jasno zdefiniowanych operacji, który przekształca dane wejściowe (input) w pożądane dane wyjściowe (output).
Pamiętaj: Algorytm to pomysł/strategia, a kod źródłowy w danym języku to tylko jego zapis.

2. Żelazna piątka: Cechy poprawnego algorytmu

Na egzaminie zawodowym pytania o właściwości algorytmu pojawiają się regularnie. Dobry algorytm musi spełniać pięć podstawowych warunków:

  1. Skończoność - algorytm nie może działać w nieskończoność. Po wykonaniu określonej liczby kroków musi się zatrzymać i zwrócić wynik.
  2. Jednoznaczność (determinizm) - w każdym momencie wykonania musi być dokładnie wiadomo, co należy zrobić dalej. Dla tych samych danych wejściowych algorytm musi dać identyczny wynik za każdym razem.
  3. Poprawność - dla poprawnych danych wejściowych algorytm prowadzi do oczekiwanego, bezbłędnego rezultatu.
  4. Wykonalność - każda pojedyncza instrukcja musi być możliwa do wykonania przez maszynę (np. nie każemy komputerowi dzielić przez zero bez wcześniejszego sprawdzenia warunku).
  5. Ogólność (masowość) - algorytm nie może służyć tylko do dodania 2 + 2. Powinien radzić sobie z dodaniem dowolnych dwóch liczb a + b.

3. Cztery sposoby zapisu algorytmu - Twoja skrzynka z narzędziami

Projektując oprogramowanie, stajesz przed wyborem: jak zapisać swój pomysł przed zakodowaniem? W zależności od sytuacji wybierzesz inną metodę.

       [Jak rozmawiać z...]
              |
   +----------+----------+
   |                     |
[Z człowiekiem/        [Z programistą/
 Klientem]              Komputerem]
   |                     |
   +-> Lista kroków      +-> Pseudokod
   +-> Schemat blokowy   +-> Schemat blokowy
   +-> Drzewo decyzji

A. Lista kroków

To po prostu instrukcja spisana w punktach w języku naturalnym (np. po polsku).

B. Schemat blokowy

Graficzny standard modelowania procesów. Każda czynność ma przypisany dedykowany kształt geometryczny.

C. Drzewo decyzyjne

Hierarchiczna struktura grafowa rozgałęziająca się od korzenia (pytania początkowego) przez gałęzie (kolejne warunki) aż do liści (decyzji końcowych).

D. Pseudokod

Złoty środek pomiędzy językiem polskim a kodem źródłowym. Wygląda jak program (używa wcięć, konstrukcji JEŻELI, DOPÓKI), ale nie przejmuje się średnikami, bibliotekami czy zarządzaniem pamięcią.

4. Case Study: Jeden problem na 4 sposoby

Zobaczmy, jak w praktyce wygląda ten sam prosty problem:

Sprawdź, czy podana liczba całkowita x jest dodatnia, czy niedodatnia (ujemna lub równa zero).

1. Lista kroków

  1. Rozpocznij algorytm.
  2. Pobierz od użytkownika wartość liczby x.
  3. Jeśli x > 0, wyświetl komunikat: „Liczba jest dodatnia” i przejdź do kroku 5.
  4. W przeciwnym razie wyświetl komunikat: „Liczba jest ujemna lub równa zero”.
  5. Zakończ algorytm.

2. Drzewo decyzyjne

                         [ Czy liczba x jest dodatnia? ]
                                        |
                                < Czy x > 0? >
                                  /        \
                           TAK   /          \   NIE
                                /            \
              [ Wynik: "Dodatnia" ]        [ Wynik: "Niedodatnia" ]

3. Pseudokod

START
    ZMIENNA x: CAŁKOWITA
    CZYTAJ(x)

    JEŻELI x > 0 TO
        PISZ("Liczba jest dodatnia")
    W PRZECIWNYM RAZIE
        PISZ("Liczba jest ujemna lub równa zero")
    KONIEC JEŻELI
STOP

4. Schemat blokowy

5. Podsumowanie

Metoda zapisu Forma Najlepsze zastosowanie Czego unikać?
Lista kroków Słowna (punkty) Rozmowa wstępna z klientem Złożone pętle i skoki
Schemat blokowy Graficzna (figury) Prezentacja architektury, dokumentacja Bardzo duże, zawiłe algorytmy
Drzewo decyzyjne Graficzna (gałęzie) Wielowariantowe decyzje i klasyfikacja Procesy powtarzalne (pętle)
Pseudokod Tekstowa (półkod) Projektowanie logiki przed kodowaniem Komunikacja z laikiem