Czym jest Algorytmika?

31 marca 2019

Programiści na wszystkich stopniach zaawansowania korzystają z algorytmów, projektując sposób działania i funkcjonalności programów czy systemów

Algorytmika to część informatyki zajmująca się badaniem algorytmów. Programiści na wszystkich stopniach zaawansowania korzystają z algorytmów, projektując sposób działania i funkcjonalności programów czy systemów. Często ich tworzenie zaczyna się na kartce papieru, od rozrysowania tzw. flowchartów, czyli schematów blokowych.  

Zacznijmy od początku – czym jest sam algorytm? Skończony ciąg jasno zdefiniowanych czynności koniecznych do wykonania określonego rodzaju zadań – ta definicja chyba nie będzie pomocna.. Jednym słowem? Przepis. Algorytm to przepis na rozwiązanie problemu, instrukcja na wykonanie czynności. Algorytm mówi nam, jakie kroki trzeba wykonać po kolei, żeby otrzymać oczekiwany efekt. Każdy krok jest jasno zdefiniowany.

Algorytmika jest więc nauką o algorytmach. Mogliście spotkać się z nią w szkole. Przedmioty ścisłe, takie jak matematyka czy fizyka, zawierają elementy algorytmiki. Mogliście nawet nie mieć o tym pojęcia, a przecież wykonanie każdego obliczenia wymaga od nas wykonania po kolei pewnych kroków. Algorytmy na wykonanie pewnego typu zadań pojawiają się już w szkole podstawowej.

Jak nauczyć się algorytmiki?

Algorytmika nie pojawia się w programach nauczania szkół średnich, rzadko można ją też znaleźć w uczelnianych syllabusach. Jedyne studia, w ramach których uczy się czystej algorytmiki, to Informatyka i Matematyka. Zastosowanie algorytmiki jest niezbędne w pracy programistów. Głównym celem algorytmiki w IT jest pomoc w pisaniu programów komputerowych. Komputer nie jest mądry – jest to maszyna, która wykonuje zaprogramowane przez nas procedury. Musimy więc jak najdokładniej je zaprojektować i opisać, bo komputer zrobi dokładnie tak, jak mu powiemy i nie domyśli się, o co nam chodziło.

Bez algorytmiki nie ma co siadać do programowania! Takie podejście jest dość ortodoksyjne, jednak czasem pojawia się w internetowych dyskusjach. Algorytmy służą nam do tego, żebyśmy mogli powiedzieć maszynie, jakie kroki ma wykonać. Czasem ta praca zaczyna przypominać logiczne łamigłówki, dlatego warto rozpisać sobie wcześniej dany problem na kartce. Już na początku kursu programowania w Codecool prosimy naszych studentów o rozpisywanie tzw. flowchartów, na których w formie graficznej zapisuje się, jakie kroki należy wykonać.

Co to jest flowchart?

Schemat blokowy (block diagram, flowchart) to diagram, na którym algorytm jest reprezentowany przez opisane figury geometryczne, połączone liniami zgodnie z kolejnością wykonywania czynności wynikających z przyjętego algorytmu rozwiązania zadania; pozwala dostrzec istotne etapy algorytmu i logiczne zależności miedzy nimi. Na schemacie blokowym poszczególne operacje są opisane za pomocą skrzynek (klocków, bloków) połączonych ze sobą strzałkami.

W pracy początkującego programisty przydatne jest planowanie pracy oparte na myśleniu takimi właśnie krokami. Dopiero później dochodzi się do takich kwestii jak optymalizacja, przy której trzeba zastanowić się, czy zaprojektowany algorytm działa optymalnie, co stanie się, jeżeli np. z programu zacznie korzystać wielu użytkowników jednocześnie. W dalszej kolejności studenci muszą nauczyć się tworzenia struktur danych.

Jak tworzyć algorytmy?

Programując, warto znać kilka podstawowych algorytmów takich jak algorytmy wyszukiwania

czy algorytmy sortowania. Wiele algorytmów znajdziemy “zaszytych” w funkcjach edytorów kodu i nie będziemy musieli pisać ich ręcznie. Trzeba jednak dobrze orientować się, jak działają, by wybrać ten właściwy, który da nam oczekiwany rezultat.

Istnieje kilka sposobów tworzenia algorytmów komputerowych:

  • dziel i zwyciężaj – dzielimy problem na kilka mniejszych, aż do momentu, gdy ich rozwiązania staną się oczywiste
  • programowanie dynamiczne – problem dzielimy na kilka, ważność każdego z nich jest oceniana i po pewnym wnioskowaniu wyniki analizy niektórych prostszych zagadnień wykorzystuje się do rozwiązania głównego problemu
  • metoda zachłanna – wybieramy najbardziej obiecującą w danym momencie drogę rozwiązania
  • programowanie liniowe – oceniamy rozwiązanie problemu przez pewną funkcję jakości i szukamy jej minimum
  • wyszukiwanie wyczerpujące – przeszukujemy zbiór danych, aż do odnalezienia rozwiązania
  • heurystyka – człowiek na podstawie swojego doświadczenia tworzy algorytm, który działa w najbardziej prawdopodobnych warunkach; rozwiązanie zawsze jest przybliżone.

Na ile konieczne w pracy programisty jest wchodzenie głęboko w naukę algorytmów? Zależy od tego, czym chcemy się zajmować. W firmach IT, w których pracuje się nad bardzo skomplikowanymi rozwiązaniami, zatrudnia się do zespołów programistycznych dedykowane osoby, które nie mają bezpośredniej styczności z programowaniem, w zamian za to zajmują się tworzeniem algorytmów i opracowywaniem sposobów działania programu czy aplikacji. Programistom pozostaje przepisanie tego do danego języka programowania.

Podsumowanie

Żaden programista od algorytmiki nie ucieknie – przy prostych programach wystarczy przemyśleć schemat działania w głowie, lecz dobrą praktyką jest stworzenie prostego flowchartu. Przy większych, bardziej skomplikowanych systemach, algorytmy są już nieuniknione – zadaniem programistów jest przewidzieć i dokładnie przełożenie na język komputerów tego, co w programie ma się wydarzyć. Algorytmy pomagają uporządkować strukturę programu i opisują wszystkie funkcjonalności.