Przedmiot przewidziany jako nieobowiązkowa kontynuacja obowiązkowego przedmiotu Algorytmy i struktury danych. Chociaż pogłębimy niektóre poruszone na AiSD tematy oraz poruszymy kilka nowych, będzie to dalej wykład przeglądowy, niejako zachęcający do dalszej eksploracji interesujących poddziedzin algorytmiki (na przykład na naszym Wydziale).
Studenci, który zaliczą ten przedmiot raczej nie powinni się jeszcze tytułować ekspertami od algorytmów, ale prawdopodobnie będą wiedzieli, gdzie udać się dalej by zgłębić interesujące (na przykład poruszone na wykładzie) tematy.
Przybliżony program (może ulec drobnej zmianie):
* sposoby radzenia sobie z trudnością problemów (optymalizacje czasowe/pamięciowe algorytmów wykładniczych, kernelizacja, parametryzacja, algorytmy "praktyczne"),
* wprowadzenie do algorytmów aproksymacyjnych (trudność aproksymacji niektórych problemów, algorytmy o stałym współczynniku aproksymacji, wielomianowe schematy aproksymacji),
* mniej znane algorytmy na wyszukiwanie wzorca w tekście,
* praktyczne rozwiązania dla odległości edycyjnej (np. zależne od wartości tej odległości),
* problem poprzednika w ciągu i różne jego rozwiązania,
* rekurencyjne struktury danych (np. optymalna struktura dla problemu sum częściowych),
* optymalne (lub bliskie optymalnym) pamięciowo struktury (succint),
* wprowadzenie do algorytmów randomizowanych (np. dla problemu minimalnego cięcia, filtry Blooma, cookoo hashing),
* bardziej skomplikowane algorytmy przepływowe oraz zastosowania przepływów (np. cyrkulacje, przepływy z ograniczeniami dolnymi, min-cost flow etc.),
* wprowadzenie do programowania liniowego.
Format przedmiotu będzie bardziej zbliżony do tego co jest na większości przedmiotów informatycznych (czyli inny niż na AiSD). W szczególności:
* wykład,
* ćwiczenia (w systemie deklaracji),
* brak pracowni,
* jednoczęściowy egzamin pisemny na koniec semestru.