Jak oswoić algorytmy?

jak oswoić algorytmy

Czas na to, by zapoznać się z algorytmami! W pierwszym gościnnym wpisie w historii bloga Joanna Hulek wyjaśni Wam, jak oswoić algorytmy. Chodźcie poczytać!

Kilka słów wyjaśnienia na początek – z Joasią poznałam się w grupie Programuj, dziewczyno! i całkiem niedawno prowadziłyśmy razem na Facebooku live o tym, jak się uczyć programowania. Asia bardzo fajnie mówiła o algorytmach, wiec postanowiłam to wykorzystać i poprosiłam ją, by przygotowała o tym gościnny wpis. Ku mojej wielkiej radości, zgodziła się i powstał super materiał dla zupełnie początkujących. Gotowi? To ruszajcie w świat algorytmów, który wyjaśni Wam Asia. Oddaję jej głos 🙂


Wiecie, od czego zaczęła się moja przygoda z programowaniem? Miałam wtedy około 14 lat i pewnego dnia zapytałam się taty co to jest silnia. Byłam prawie pewna, że swoim starym zwyczajem, wskaże mi ręką 13-tomową encyklopedię, leżącą na półce w salonie i powie, żebym szukała pod “S”. Ale, ku mojemu zaskoczeniu, ręka taty powędrowała po kartkę papieru i długopis. Po chwili wręczył mi kartkę…

Function Silnia (n) {
     value silnia = 1, i = 1;
        do {
             i = i + 1;
             silnia = silnia * i;
        } while (i<n);
     write (n + "! = " + silnia);
}

…i powiedział:
– To jest algorytm napisany w pseudokodzie, który oblicza silnię z dowolnej liczby naturalnej n.

Wyobraźcie sobie moje zdziwienie kiedy okazało się, że odpowiedź taty nie dość, że jest dla mnie zupełnie niezrozumiała, to jeszcze na dodatek powoduje, iż mam teraz jeszcze więcej pytań i nawet nie wiem od którego zacząć. Co to jest algorytm? A pseudokod? Przecież to nieprawda, że „i=i+1”! To jest źle! O co chodzi z tymi angielskimi słówkami? Czy nie można tego jakoś tak po normalnemu? A średniki!? Po co tu one? No i… wciąż nie ma zielonego pojęcia co to jest ta cała silnia!
Tato, widząc moją konsternację zapytał:
– Znasz angielski? – dla gimnazjalisty, to jest pytanie gwóźdź do trumny – no wiadomo, że raczej nie bardzo, bo przecież oceny z tego przedmiotu wcale za rewelacyjne nie są, ale lepiej się rodzicom do tego nie przyznawać. Więc nieśmiało odpowiedziałam, że…
– Nooo… tak…
– Super, to teraz po kolei przeanalizujemy każdą linijkę.

Wspólnymi siłami udało nam się rozgryźć o co chodzi w tym całym dziwnym bełkocie. A ja, nie dość, że dowiedziałam się, że silnia to po prostu iloczyn wszystkich liczb naturalnych od 1 do danej liczby, to jeszcze odkryłam co to są algorytmy i w jaki sposób powstają programy komputerowe.
Fajnie jest mieć takiego tatę, co nie? 🙂
Ale nie o moim tacie będzie ten tekst, chociaż chciałabym mu go zadedykować, bo to właśnie on zaraził mnie miłością do programowania i algorytmów (a także żeglarstwa i gry na instrumentach), ale właśnie o algorytmach.

Algorytmy w naszym życiu

Będziecie zaskoczeni, ale… z całą pewnością doskonale wiecie co to są algorytmy. Ba! Jestem pewna, że korzystacie z nich codziennie.
Oto przykład jednego z nich:


[
zagotuj 1 l. wody
do wrzącej wody wsyp 1 płaską łyżeczkę soli
do osolonego wrzątku włóż 100g makaronu i dokładnie zamieszaj
gotuj na niedużym ogniu przez 8 minut co jakiś czas mieszając
ugotowany makaron odcedź za pomocą sita lub durszlaka i opłukaj bieżącą wodą
]

No jak to, ale to przecież zwyczajny przepis na makaron! Owszem. Ale jest to równocześnie skończony ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego rodzaju zadań. Sposób postępowania prowadzący do rozwiązania problemu*. A jak to się ma do programowania? No… makaron generalnie, to nijak 😉 Trudno byłoby wymagać do laptopa, żeby ugotował dla nas obiad, ale już powolutku, małymi kroczkami, zbliżamy się do tego, w jaki sposób rozmawiać z komputerem, jak go programować.

Algorytmy nie tylko opisują jak rozwiązać dany problem, ale też mogą pomóc w odnalezieniu najlepszego (najszybszego, najtańszego) rozwiązania. Niemal każdy z problemów, możemy rozwiązać na kilka różnych sposobów – czyli korzystając z różnych algorytmów. Jedne, poprowadzą nas do rozwiązania bardzo okrężną drogą, a inne wykorzystają jakiś sprytny skrót, który znacznie usprawni nam działanie. I z tych własności algorytmów również korzystamy codziennie. Ja na przykład, od zawsze optymalizuję sobie wieszanie firanek i zasłon za pomocą metody dziel i zwyciężaj 😉

Algorytmy w służbie nauki

Skoro z algorytmami stykamy się codziennie, niemal na każdym kroku i skoro potrafią one znacznie usprawnić nasze życie, to czy w bardziej skomplikowanych dziedzinach również się one przydają? Jak najbardziej! Z pierwszymi naukowymi algorytmami spotykamy już w szkole, ucząc się zupełnych podstaw. Każdy wzór (czy to matematyczny, czy fizyczny), to nic innego, jak algorytm – przepis obliczania czegoś. Nawet ucząc się języków, korzystamy z algorytmów:

Arlena Witt, “Grama to nie drama” część 1, wyd. Altenberg, Warszawa 2017, s. 90
Arlena Witt, “Grama to nie drama” część 1, wyd. Altenberg, Warszawa 2017, s. 90

Ten z całą pewnością bardzo dobrze wszystkim znany “przepis” na zdanie w czasie present continuous języku angielskim, to nic innego, jak algorytm: użyj podmiotu, potem użyj czasownika “to be” w odpowiedniej formie, następnie użyj… Językoznawcy korzystają z całego mnóstwa podobnych algorytmów. Także psychologowie, socjologowie i nawet artyści posiłkują się w swojej pracy różnej maści schematami, etapami postępowania, przepisami itp., czasem nawet nie zdając sobie sprawy z tego, że korzystają właśnie z algorytmów.

Nauki ścisłe są wręcz przepełnione algorytmiką. Im bardziej złożony jest problem z którym mamy do czynienia, tym bardziej przydaje się tam algorytmika. Niemożliwym byłoby wykonywanie obliczeń, ani tym bardziej przeanalizowanie całych tablic z danymi i wyciągnięcie z nich jakichkolwiek wniosków, gdyby nie algorytmika. Wszelkie badania naukowe mają swoją metodologię, czyli po prostu algorytm postępowania – zbierania i analizy wyników. Statystyka opiera się na algorytmach, logistyka to również algorytmy, genetyka korzysta z algorytmów, wszelkie prognozy również wyliczane są na podstawie algorytmów. Wiele dziedzin nauki powstało z połączenia wiedzy specjalistycznej z jakiegoś zakresu oraz algorytmiki (np. ekonometria).

Algorytmy a programowanie

Powiedzmy to otwarcie – komputery nie są mądre. Rozumieją tylko zera i jedynki. Kiedyś było to “lampa się świeci” albo “lampa się nie świeci”, dzisiaj “jest impuls elektryczny” albo “nie ma impulsu elektrycznego” – ale to wszystko wciąż sprowadza się do iście Matrixowego ciągu zer i jedynek. Kiedyś programiści żmudnie wprowadzali te zera i jedynki do komputera, albo dziurkowali specjalne karty, a komputer sprawdzał, czy jest dziurka, czy jej nie ma i dzięki temu mógł wykonywać jakiekolwiek operacje. Te czasy już dawno minęły, a dziś programujemy z wykorzystaniem wysokopoziomowych języków, które są zrozumiałe i czytelne dla człowieka. Ale komputery wciąż koniec końców doprowadzą nasz kod do binarnego języka maszynowego i dopiero wtedy go wykonają. Krok po kroku, dokładnie w taki sposób, jak zaprojektował to programista. I właśnie dlatego programistom potrzebne są algorytmy – żeby być w stanie stworzyć jasno określony, jednoznaczny i skończony ciąg instrukcji, który będzie w stanie wykonać maszyna. Algorytmy, są więc podstawą i fundamentem programowania – bez nich, praca programisty nie miałaby racji bytu, ponieważ żaden komputer nie będzie w stanie samodzielnie wymyślić co ma robić dalej. Nawet sztuczna inteligencja jest algorytmem. Bardzo zaawansowanym i złożonym, ale wciąż algorytmem. Zobaczcie ten filmik.

Na codzień programiści, pisząc nawet bardzo prosty kod, tworzą mnóstwo algorytmów. Od takich zupełnie podstawowych, jak “Hello world”, aż po bardzo skomplikowane. Jeżeli jakiś program jest wykonalny i daje jakikolwiek rezultat, to jest on algorytmem. Ucząc się programowania zaczynamy stopniowo korzystać z coraz to bardziej skomplikowanych metod – instrukcji warunkowych, pętli, rekurencji… i dzięki temu jesteśmy w stanie tworzyć coraz bardziej zaawansowane algorytmy.

Dzięki algorytmom jesteśmy w stanie rozwiązać nie tylko te proste i podstawowe problemy, ale i te bardziej złożone, wymagające ogromnej mocy obliczeniowej również. Przy okazji ogromnej mocy obliczeniowej, pojawia się także problem złożoności obliczeniowej i wydajności algorytmu. Co z tego, że komputer jest w stanie obliczyć wszystko, skoro niektóre obliczenia zajęłyby mu nie sekundy, nie minuty, ani nawet nie godziny, tylko czasem nawet i lata, dekady bądź całe wieki! Dlatego też, poza podstawowymi algorytmami, warto uczyć się tych bardziej zaawansowanych i próbować tworzyć nowe algorytmy.

Skąd czerpać wiedzę

Algorytmika to ogromna i fascynująca dziedzina nauki. Nie czas jednak teraz i nie miejsce, na prowadzenie wykładów on-line z tego przedmiotu. Zresztą, z całą pewnością znajdziecie niejedną osobę, która wprowadzi Was w meandry algorytmiki o wiele lepiej, niż ja. A moim skromnym zadaniem było jedynie pomóc Wam oswoić się z algorytmami – powiedzieć:
– Dzień dobry, drogi Czytelniku, to jest algorytm.
– Witaj algorytmie, oto jest Czytelnik. Uśmiechnij się do niego ładnie.
i pokazać Wam, że algorytmy wcale nie są takie straszne. Wręcz przeciwnie! Są bardzo fajne, miłe i sympatyczne. A na dodatek – bardzo pomocne w życiu!

Dla wszystkich tych, którzy stali się niesamowicie głodni wiedzy i chcą zacząć zgłębiać tajniki algorytmiki, podeślę kilka smacznych przekąsek – materiałów, które pomogą zapoznać się bliżej z tym tematem:

  • https://pl.khanacademy.org/computing/computer-science/algorithms – bardzo przyjemny i sympatyczny kurs na stronie KhanAcademy, stanowiący świetne wprowadzenie do algorytmiki. Poza teorią, zawiera fajne gry i ćwiczenia, które pomagają lepiej zrozumieć omawiane tematy. W kursie znajdziecie między innymi takie tematy, jak: podstawy algorytmiki, wydajność, sortowanie, przeszukiwanie, grafy, wierze Hanoi.
  • http://www.algorytm.org/ – polska strona o algorytmach i strukturach danych. Zawiera bardzo dużo materiałów z teorii algorytmów, oraz implementacje wielu algorytmów w różnych językach programowania.
  • http://main.edu.pl/en/user.phtml?op=show&page=algorytmika&c=50000 – Kurs algorytmiki na stronie Młodzieżowej Akademii Informatycznej (MAIN) – poza teorią z przykładami implementacyjnymi, można tam znaleźć również treści zadań do rozwiązania.
  • https://techdevguide.withgoogle.com/ – Google Tech Dev Guide – strona, na której znajdziecie między innymi sporo ciekawych zadań z algorytmiki.
  • http://algo-rythmics.ms.sapientia.ro/ – AlgoRythmics -węgierski projekt taneczny, pomagający zrozumieć algorytmy. Z całą pewnością pomoże Wam tanecznym krokiem wejść w temat sortowania 🙂
  • Książki – na rynku jest dostępnych wiele tytułów i wydaje mi się, że żadna książka o algorytmach krzywdy Wam nie zrobi. Ja osobiście, uczyłam się algorytmów z kilku podręczników i materiałów z wykładów na mojej uczelni. A pierwsza książka o algorytmach, z którą ja miałam do czynienia, to podręcznik autorstwa Macieja Sysło.

Joanna Hulek
Mimo, iż wciąż jeszcze nie zdradziła tego sekretu swojemu mężowi, to właśnie algorytmy są jej pierwszą i największą miłością – taką od pierwszego wejrzenia, aż po grobową deskę.

* Źródło: https://pl.wikipedia.org/wiki/Algorytm

5 Replies to “Jak oswoić algorytmy?”

  1. Ups… Mały chochlik drukarski nam się tu wkradł, a nawet dwa 😉 Zaraz poprawimy. A póki co, jeśli czytacie ten esej i coś wydaje się Wam trochę niespójne, to tak, zgadza się – coś tu nie gra 🙂

    1. Już naprawione! 🙂

  2. Ja się algorytmów uczyłam dopiero na studiach i to mój pierwszy algorytm rekurencyjny (silnia oczywiście 😀 ) kolega z roku tłumaczył na imprezie na przykładzie kieliszków…
    może dlatego polubiłam się z algorytmiką :thiking: ;D

  3. Słyszałam same pozytywy o tej książkę, jeszcze jej nie skończyłam czytać, ale jak na razie w jasny sposób tłumaczy zawiłości algorytmów

    https://helion.pl/ksiazki/algorytmy-ilustrowany-przewodnik-aditya-bhargava,algoip.htm#format/d

    1. Kupiłam tę książkę na podstawie kilku opinii uczących się dziewczyn. Jeśli o mnie chodzi, to raczej nie polecam. Rozdział o notacji dużego O do mnie trafił, ale sposób wyjaśnienia i a tym bardziej zilustrowania pozostałych problemów nie pomógł mi, wręcz zniechęcił 🙁
      Może polecają ją osoby uczące się Pythona, bo w ten sposób pisane są niektóre przykłady – a ja nie polubiłam się z tym językiem, wolę C++ albo Javę.
      Oczywiście to jest tylko moja subiektywna opinia, ale jak poczytałam o tym samym na Khan Academy, to od razu zrozumiałam np.rekurencję.
      Szkoda, bo sporo czasu spędzam przy komputerze i chętnie dokształciłabym się czytając coś w wersji papierowej.
      Na plus “ciekawostki”, w niektórych rozdziałach autor odsyła do innych źródeł, m.in. właśnie Khan Academy.

Dodaj komentarz