Przedmiot ten jest uzupełnieniem wiedzy na temat podstawowych algorytmów, używanych na 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. Listy zadań będą wymagały implementacji wskazanych algorytmów. Za to ćwiczenia będą polegały przede wszystkim na prezentacji swoich implementacji, wytłumaczeniu poprawności i złożoności, a także 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
* 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++