Przedmiot ten jest drugim krokiem (zaraz po *wstępie do informatyki*) przygotowującym do startu w zawodach algorytmicznych takich jak Olimpiada Informatyczna, ICPC czy Codeforces.
Wiedza ta przydatna będzie również na innych zajęciach, na przykład na *metodach implementacji algorytmów*.
Na przedmiocie przedstawimy uczestnikom klasyczne algorytmy oraz techniki programistyczne, używane na takich zawodach.
Głównym zamysłem jest nie tylko poznanie przez nich wybranych algorytmów, ale powinni oni również zdobyć umiejętność ich implementacji oraz zrozumienie na takim poziomie, aby można było je w miarę potrzeby zmodyfikować.
Planowo, na wykładzie skupimy się głównie na zrozumieniu idei algorytmów oraz ich poprawności. Za to ćwiczenia będą polegały przede wszystkim na prezentacji swoich implementacji oraz omówieniu jak wpłyną na działanie tych algorytmów poszczególne modyfikacje w kodzie.
##### Planowana tematyka wykładu:
* Podstawy teorii liczb
* Sumy zbiorów rozłącznych (Find Union)
* Techniki o złożoności pierwiastkowej
* Programowanie dynamiczne
* Drzewa przedziałowe
* Znajdowanie najniższego wspólnego przodka w drzewie
* Silnie spójne składowe
* 2-SAT
* Mosty i punkty artykulacji
* Szukanie najkrótszych ścieżek w grafach
* Haszowanie
* Algorytmy tekstowe
* Geometria
* Podstawy teorii gier
##### Wymagania:
* Znajomość materiału ze *wstępu do informatyki*
* Znajomość języka C++