Algorytm to skończony, jednoznaczny ciąg kroków, który z danych wejściowych prowadzi do konkretnego wyniku. Brzmi sucho, ale w praktyce algorytmem jest wszystko, co da się rozpisać na „zrób to, potem tamto, a jak coś się zgadza, to skręć w lewo”. Przepis na naleśniki też jest algorytmem — tyle że zamiast jajek masz zmienne, a zamiast patelni procesor. Każdy program komputerowy to w gruncie rzeczy zbiór algorytmów ubranych w składnię konkretnego języka.
Żeby coś zasługiwało na miano algorytmu, musi spełniać kilka warunków: ma się kończyć (nie kręcić w nieskończoność), każdy krok ma być jednoznaczny (zero „no, jakoś tam policz”), a dla tych samych danych wejściowych ma dawać ten sam wynik. Algorytm jest abstrakcyjny — nie zależy od języka. Ten sam pomysł na sortowanie zapiszesz w Pythonie, w Go i na kartce, i nadal będzie tym samym algorytmem.
Przykład z praktyki
Weź klasykę: wyszukiwanie binarne. Masz posortowaną listę i szukasz liczby. Zamiast przeglądać element po elemencie, sprawdzasz środek, odrzucasz połowę, która Cię nie interesuje, i powtarzasz. Milion elementów? Znajdziesz w jakieś 20 porównaniach zamiast miliona. W Pythonie nie musisz nawet pisać tego ręcznie:
import bisect; i = bisect.bisect_left(lista, szukana)
To samo myślenie napędza Google (PageRank), nawigację (Dijkstra liczący najkrótszą trasę) i feed na Instagramie. Algorytm rozwiązuje problem — implementacja to tylko sposób zapisu.
Na co uważać
- Algorytm to nie kod. Najpierw rozumiesz logikę, potem ją zapisujesz. Klepanie kodu bez planu kończy się spaghetti.
- Złożoność ma znaczenie. Dwa algorytmy mogą dawać ten sam wynik, ale jeden działa sekundę, a drugi godzinę. Stąd notacja
O(n)— opisuje, jak czas rośnie wraz z danymi. - Poprawny ≠ wydajny. Działający kod to dopiero połowa roboty. Sortowanie bąbelkowe działa, ale na dużych danych jest dramatem.
- Pętle bez warunku stopu to nie algorytm, tylko zawieszka. Zawsze upewnij się, że Twój ciąg kroków kiedyś się skończy.
Pojęcia powiązane: struktury danych, złożoność obliczeniowa (notacja O), pseudokod, rekurencja, iteracja, sortowanie i wyszukiwanie, struktura danych.