Recenzja książki „Myślenie algorytmiczne”

Myślenie algorytmiczne to sposób rozwiązywania problemów poprzez tworzenie uporządkowanych procedur (algorytmów), które prowadzą do rozwiązania zadania w sposób efektywny i powtarzalny, spełniający postawione wcześniej założenia. Polega na analizie problemu, rozbiciu go na mniejsze części, określeniu sekwencji działań i przewidywaniu możliwych wyników. 

Myślenie algorytmiczne jest podstawą programowania komputerowego, ale ma zastosowanie także w codziennym życiu, np. przy planowaniu zadań, optymalizacji procesów czy podejmowaniu decyzji. Przykładem myślenia algorytmicznego może być przepis kulinarny, który składa się z uporządkowanej sekwencji kroków prowadzącej do założonego celu, czyli dania. Ba, przepisy kulinarne zawierają także elementy programowania współbieżnego. 

W informatyce myślenie algorytmiczne obejmuje również analizę efektywności algorytmów (np. złożoność czasowa i użycie pamięci) oraz wybór odpowiednich struktur danych. Rozwija umiejętności logicznego myślenia, kreatywność i systematyczność.

Książka Myślenie algorytmiczne” jest przeznaczona dla programistów pragnących tworzyć programy spójne logicznie i efektywne. Grupą wyróżnioną przez autora są młodzi, zdolni programiści pragnący spróbować swych sił w olimpiadach informatycznych i konkursach programistycznych. Z tego powodu przykłady dyskutowanych zadań i problemów są przez autora pieczołowicie wybrane z zasobów kilku olimpiad informatycznych z różnych krajów. Także dlatego duży nacisk położono na wybór właściwych algorytmów, zapewniających optymalne użycie pamięci i czasu wykonywania napisanego programu, ponieważ te czynniki mają szczególnie duże znaczenie przy ocenianiu prac. 

Książka nie jest podręcznikiem programowania, nie omawia podstawowych, oklepanych algorytmów w rodzaju wież Hanoi, optymalizacji grafu czy metod sortowania. Autor celowo i z rozmysłem stawia i dokładnie omawia trudne zadania programistyczne, których zapewne nie potrafiłbyś rozwiązać samodzielnie. Szczególną uwagę zwraca na analizę problemu, dobór właściwych struktur danych i analizę wydajności algorytmu. Jest to szczególnie ważne na olimpiadach informatycznych, gdzie jest narzucony maksymalny czas wykonania programu. Także witryny oceniające rozwiązania zadań bezlitośnie odrzucają rozwiązania, które nie wyrabiają się w czasie”. Dlatego elegancja algorytmu nie jest tym, co tygrysy (czyt. algorytmy sprawdzające) lubią najbardziej. Algorytmy rekurencyjne są piękne, ale niewydajne. Jak to w życiu – liczy się skuteczność.

Książka przedstawia kilka klas problemów, a w każdym z nich starannie dobrane 2-3 zadania są dokładnie omówione w różnych wariantach rozwiązania:

  • tablice mieszające,
  • drzewa i rekurencja,
  • memoizacja i programowanie dynamiczne,
  • grafy i przeszukiwanie wszerz,
  • najkrótsze ścieżki na grafach ważonych,
  • wyszukiwanie binarne,
  • kopce i drzewa segmentów,
  • struktura zbiorów rozłącznych,
  • randomizacja.

Tytuł Myślenie algorytmiczne” jest dokładnie tym, co Autor chciał przekazać. Każde zadanie (matematyczne czy programistyczne) można i należy sprowadzić do abstrakcji, która z kolei pozwala wybrać metodę rozwiązania. W przypadku zadań złożonych dobrą praktyką jest poszukanie rozwiązania dla problemu uproszczonego, pozbawionego subtelności, podobnie jak w modelowaniu fizycznych układów dynamicznych. Pozwoli to określić sedno problemu, a w konsekwencji sposób jego rozwiązania. Pozwoli też ominąć pułapki związane z niewłaściwym wyborem metody. Wybór języka programowania jest sprawą drugorzędną, Autor wybrał język C. Nie jest to trudny język, może nieco przestarzały, ale za to czytelny i zrozumiały. Osobiście wybrałbym Pythona, ze względu na wyjątkowe cechy edukacyjne tego języka, zwłaszcza struktury danych.

Ostatni rozdział książki omawia efektywność algorytmów, bo rozwiązania zadań konkursowych nie tylko muszą podać poprawne wyniki. Powinny też spełniać wymagania dotyczące wykorzystania pamięci i czasu procesora. Dlaczego? Chociażby po to, żeby wyeliminować rozwiązania trywialne i naiwne oraz metody brutalne znane na przykład z łamania haseł z wykorzystaniem słownikowych baz danych. Czas wykonania programu świadczy też o jakości zastosowanego algorytmu. Biorąc pod uwagę powyższe wymagania można dojść do wniosku, że nie jest to książka dla każdego, mimo trochę mylącego podtytułu: “Jak rozwiązywać problemy za pomocą algorytmów”. Ale jeśli trafi do właściwej osoby…

Daniel Zingaro Myślenie algorytmiczne. Jak rozwiązywać problemy za pomocą algorytmów”. Wydanie II, Wydawnictwo Helion, 2025

Notka o autorze.
Daniel Zingaro jest wykładowcą University of Toronto. Główny obszar jego zainteresowań stanowi metodyka nauczania informatyki. Jest znany z niekonwencjonalnego podejścia do nauczania. 

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *