Prawie 25 lat Olimpiady Informatycznej

advertisement
Prawie 25 lat Olimpiady Informatycznej
Karol Pokorski
Instytut Informatyki Uniwersytetu Wrocławskiego
8 października 2016
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Ostrzeżenie
Nie znam zadań na OI, więc zagadnienia podawane jako
podstawowe/zaawansowane nie są w żaden sposób wskazówką n.t.
przyszłych treści zadań na OI.
Ostrzeżenie
Sporo rzeczy na slajdach to moje prywatne opinie i obserwacje, a
nie oficjalne stanowisko kogokolwiek z ramienia OI.
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
I etap
Nie zmieniło się od lat:
miesiąc czasu na rozwiązanie pięciu zadań,
dość popularne są progi kwalifikacyjne rzędu ≈ 100 punktów.
Zmiany:
podzadania.
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
II etap
Nie zmieniło się od lat:
dzień próbny (jedno zadanie, 3 h) oraz dwa dni właściwe (dwa
zadania, 5 h),
wyniki nie są jawne, widać tylko wyniki na testach
przykładowych.
Zmiany:
podzadania,
testy „ocen”,
bardzo duża wariancja progów kwalifikacyjnych do finału.
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Finał
Nie zmieniło się od lat:
dzień próbny (jedno zadanie, 3 h) oraz dwa dni właściwe (trzy
zadania, 5 h),
Zmiany:
podzadania,
testy „ocen”,
odsłanianie wyników,
trudność zadań,
wyższe wyniki zawodników,
spryt zawodników, częste udane „oszustwa” organizatorów.
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
C++11
listy inicjalizacyjne (std::vector<int> x = {1, 2, 3};)
automatyczne określanie typu (auto),
pętle for oparte na zakresie (for (int x : tab)),
funkcje i wyrażenia lambda
([](int a, int b){ return a + b; }),
typy krotkowe (std::tuple),
nowe kontenery STL
(std::unordered set oraz std::unordered map),
wyrażenia regularne (#include <regex>),
inteligentne wskaźniki
(std::shared ptr, std::unique ptr).
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Czynniki kluczowe w odniesieniu sukcesu na II etapie
znajomość podstawowych algorytmów i struktur danych,
inteligencja, zdolność kojarzenia faktów, zauważania powiązań
i zależności,
umiejętność szybkiej implementacji wymyślonych rozwiązań,
umiejętność testowania,
nie popełnianie błędów.
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Podstawowe algorytmy i struktury danych
rekurencja, przeszukiwanie z nawrotami, metoda „dziel
i zwyciężaj”,
wyszukiwanie binarne (oraz jego zastosowania) (zadanie Test
na inteligencję),
obsługa dużych liczb,
algorytmy zachłanne,
programowanie dynamiczne (zadanie Konduktor),
maski bitowe (zadanie Wiedźmak),
teoria gier (nimbery, funkcja mex, twierdzenie
Sprague–Grundy’ego) (zadanie Kamyki).
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Podstawowe algorytmy i struktury danych
Struktury danych:
stos, kolejka,
kopiec binarny,
drzewo BST,
statyczne drzewo przedziałowe (zadanie Łyżwy),
Union–Find (zadanie Biura).
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Podstawowe algorytmy i struktury danych
Teoria liczb:
algorytm Euklidesa i rozszerzony algorytm Euklidesa,
odwrotność modularna (zadanie Wyszukiwanie wzorca),
dzielniki liczb, rozkład na czynniki pierwsze, sito Eratostenesa
(zadanie Sejf),
szybkie potęgowanie modularne.
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Podstawowe algorytmy i struktury danych
Kombinatoryka:
podzbiory, permutacje (silnia), kombinacje (symbol Newtona)
(zadanie Permutacja),
interpretacje kombinatoryczne,
zasada włączeń i wyłączeń.
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Podstawowe algorytmy i struktury danych
Algorytmy tekstowe:
najdłuższy podciąg wspólny,
wyszukiwanie wzorca i funkcja π (zadanie Szablon),
haszowanie podsłów (zadanie Korale),
okresy słów, pierwiastki słów, lemat o okresowości (zadanie
Kafelki),
algorytm Manachera (zadanie Antysymetria).
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Podstawowe algorytmy i struktury danych
Algorytmy grafowe:
reprezentacja listowa i macierzowa grafu,
przeszukiwanie w głąb (DFS) (zadanie Gildie) i wszerz (BFS),
kolejność pre-order, post-order, in-order,
sortowanie topologiczne,
silnie spójne składowe (zadanie Profesor Szu),
minimalne drzewo rozpinające (zadanie Labirynt),
cykl Eulera,
grafy funkcyjne (zadanie Randka),
algorytm Dijkstry (zadanie Sumy).
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Podstawowe algorytmy i struktury danych
Geometria obliczeniowa:
iloczyn skalarny i iloczyn wektorowy,
technika zamiatania,
najbliższa i najdalsza para punktów,
sortowanie kątowe,
otoczka wypukła (zadanie Wyspy).
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Czynniki kluczowe w odniesieniu sukcesu na finale
znajomość trudniejszych algorytmów i struktur danych,
znajomość sztuczek algorytmicznych,
strategia, zachowanie spokoju, elastyczność dla zmieniających
się warunków,
intuicja i wyczucie,
szybkość,
nie popełnianie błędów,
wytrenowanie.
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Trudniejsze algorytmy i struktury danych
przepływy (zadanie Mosty),
skojarzenia w grafach dwudzielnych,
macierze (zadanie Chomiki),
dwuspójne składowe,
test Millera–Rabina (zadanie Najdzielniejszy dzielnik),
drzewo palindromiczne.
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Sztuczki algorytmiczne
meet-in-the-middle (zadanie Szyfr),
Mo’s algorithm,
równoległe wyszukiwanie binarne (zadanie Meteory),
dekompozycja heavy–light.
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Olimpiada
sport umysłowy,
długie przygotowania, ciężka praca,
potrzebny trener, mentor,
krzywa rozwoju nie jest zbliżona do funkcji liniowej.
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Wyjątkowość Olimpiady
mało zadań, dużo czasu,
prawie bez limitu na trudność zadań,
zadania wymagają pomysłu, wiele różnych ścieżek z pozoru
sensownych prowadzi do niczego.
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Dlaczego warto?
Dla wszystkich:
algorytmy i struktury danych (szczególnie na I i II etapie)
przydatne w pracy informatyka,
umiejętność programowania,
motor do wzmożonej pracy nad sobą,
nauka jak się uczyć,
znajomość własnych sił i słabości.
Dla najlepszych:
stypendia, prestiż, docenienie, widoczny sens ciężkiej pracy,
duża i silna sieć kontaktów,
łatwiejsza kariera naukowa,
możliwość pracy w wielkiej korporacji za granicą.
Karol Pokorski
Prawie 25 lat Olimpiady Informatycznej
Download