Nasz sylabus
LOGIKA
rachunek zdań, kwantyfikatory (rozumienie), techniki dowodowe (wprost, nie wprost), indukcja (definiowanie i dowodzenie)
ELEMENTARNA TEORIA LICZB
Podzielność, NWD, algorytm Euklidesa (rozszerzony algorytm Euklidesa*), NWW, liczby pierwsze i złożone, rozkład liczby na czynniki pierwsze, testowanie pierwszości (algorytm „pierwiastkowy”), sito Eratostenesa, systemy liczbowe (reprezentacja liczb w komputerze), schemat Hornera, arytmetyka modulo
KOMBINATORYKA (kluczowa w projektowaniu algorytmów)
zbiory i operacje na zbiorach, iloczyn kartezjański, relacje (równoważności, porządek częściowy, porządek liniowy, porządek leksykograficzny), funkcje (różnowartościowa, na, wzajemnie jednoznaczna, składanie funkcji), ciągi (arytmetyczny, geometryczny, liczby Fibonacciego), permutacje, kombinacje (współczynniki dwumianowe), słowa skończone nad skończonym alfabetem, zliczanie obiektów kombinatorycznych, dowody kombinatoryczne, zasada szufladkowa, definicje i równania rekurencyjne, proste metody rozwiązywania równań rekurencyjnych (rozwijanie, argumenty kombinatoryczne)
DYSKRETNY RACHUNEK PRAWDOPODOBIEŃSTWA*
definicja klasyczna, dyskretne zmienne losowe, wartość oczekiwana
GRAFY (skończone)
grafy nieskierowane i skierowane, wierzchołki, stopień wierzchołka, krawędzie, ścieżki, cykle (w tym Eulera i Hamiltona), spójność, silna spójność*, podgrafy, drzewa i lasy, grafy ważone*, drzewa rozpinające, minimalne drzewa rozpinające*, klasy grafów (dwudzielne, planarne*), drzewa ukorzenione, drzewa binarne i ich własności, metody przechodzenia drzew w tym drzew ukorzenionych, metody przechodzenia grafów*, skojarzenia w grafach dwudzielnych*
GEOMETRIA*
geometria analityczna na płaszczyźnie: punkt, odcinek, prosta, wektor, okrąg i koło, wielokąt i jego własności, reprezentacja obiektów geometrycznych w komputerze, metryki Eucklidesowa i miejska, iloczyn skalarny i wektorowy wraz z zastosowaniami
MATERIAŁY ŹRÓDŁOWE
portal: smurf.mimuw.edu.pl/uczesie
Witold Lipski, Kombinatoryka dla programistów, WNT
Środowiska programistyczne (do wyboru)
On-line
ideone.com
repl.it
Desktop
Dev c++
Codeblocks
Wprowadzenie do programowania
Obsługa środowiska programistycznego
System sprawdzający rozwiązania uczniowskie
Zmienne i typy zmiennych (całkowity, rzeczywisty)
Tradycyjne wskaźniki (operatory new, delete i delete[])*
Typ struct*
Wejście i wyjście (strumieniowe), formatowanie wyjścia
Operatory arytmetyczne
Biblioteka matematyczna
Instrukcja warunkowa i operatory logiczne, typ logiczny
Instrukcje iteracyjne
Synchronizacja wejścia/wyjścia strumieniowego
Testowanie programu (przekierowanie strumienia w konsoli, wypisywanie pośrednich wyników)
Tablice statyczne jednowymiarowe
Biblioteka algorithm (sortowanie)
Łańcuchy znaków (typ char, string, rzutowanie typów)
Funkcje, parametry funkcji, zasięg zmiennych
Funkcje rekurencyjne
Struktury danych: stos, kolejka, vector, pair
Tablice dwuwymiarowe
Biblioteka STL*
MATERIAŁY ŹRÓDŁOWE
portal: main2.edu.pl
Wiki Rafała Nowaka: www.rafalnowak.pl>wiki
Karol Kuczmarski, Kurs C++ od zera do gier kodera
Metody projektowania algorytmów i strategie algorytmiczne:
specyfikacja, projektowanie pętli – niezmienniki, metoda siłowa (brute force), algorytmy zachłanne, rekurencja, dziel i rządź, programowanie dynamiczne, przeszukiwanie z powrotami, zamiatanie*
Elementy złożoności obliczeniowej: operacja dominująca, złożoność pesymistyczna, notacja asymptotyczna O (wielkie O), podstawowe klasy funkcji złożoności (logarytmiczna, liniowa, nlog n, kwadratowa, sześcienna, wykładnicza)
Algorytmy
Podstawowe algorytmy dla liczb całkowitych: zamiana systemu liczbowego, algorytm Euklidesa (iteracyjny, rekurencyjny), rozszerzony algorytm Euklidesa*, pierwiastkowy test pierwszości, sito Eratostenesa, rozkład na czynniki pierwsze, szybkie potęgowanie
Proste przetwarzanie tablic jednowymiarowych: wypełnianie, przesuwanie (shifting), odwracanie (reversing), przeszukiwanie, przeszukiwanie cykliczne (rotating), znajdowanie minimum/maksimum, wyszukiwanie binarne, sumy prefiksowe, zliczanie, sortowanie przez zliczanie, arytmetyka wielkich liczb
Proste algorytmy dla tekstów, palindromy, wyszukiwanie wzorca w tekście algorytmem naiwnym, algorytm KMP*
Sortowanie: przez wstawianie, sortowanie przez scalanie, sortowanie szybkie*, sortowanie przez kopcowanie*
Proste przetwarzanie tablic dwuwymiarowych: problem 8 hetmanów, wyznaczanie najtańszej drogi z dolnego lewego rogu do górnego prawego rogu w tablicy liczbowej przy ruchach tylko w prawo i do góry, operacje macierzowe*
Przeszukiwanie drzew ukorzenionych (prefiksowe, infiksowe i postfiksowe)
Przeszukiwanie grafów (w głąb i wszerz), drzewo przeszukiwania
Spójność, sortowanie topologiczne, cykl Eulera, dwuspójność*, silna spójność*, domknięcie przechodnie*
Najkrótsze ścieżki (algorytm Dijkstry, Bellmana-Forda, Floyda-Warshall)*
Minimalne drzew rozpinające (algorytmy Prima i Kruskala)*
Skojarzenia w grafach dwudzielnych (algorytm w czasie O(VE))*
Gry kombinatoryczne – algorytm minmax*
Proste algorytm geometryczne na płaszczyźnie*: lokalizacja punktu w wielokącie, wypukła otoczka
Podstawowe abstrakcyjne struktury danych i ich implementacje
Wektor
Stos, kolejka, lista
Reprezentacja grafu (macierz sąsiedztwa, listy sąsiedztwa)
Kopiec binarny
Reprezentacja zbiorów rozłącznych (problem Find-Union)*
Zbiór
Statyczne, zrównoważone drzewa przeszukiwań binarnych (drzewa przedziałowe, drzewa licznikowe), dynamiczne, zrównoważone drzewa przeszukiwań binarnych*, wzbogacanie
Kolejka priorytetowa*
Biblioteka STL*
MATERIAŁY ŹRÓDŁOWE
portal: main2.edu.pl
portal: szkopuł.edu.pl

WSPARCIE DLA UCZNIÓW
Bezpłatne koła dla zainteresowanych, pięciodniowy bezpłatny obóz informatyczny, rozgrywki algorytmiczno – programistyczne.

WYKŁADY I WEBINARIA
Organizowane w każdym miesiącu przez przedstawicieli uczelni partnerskich , wykłady poświęcone aktualnym wyzwaniom informatyki.

WSPARCIE DLA NAUCZYCIELI
Warsztaty rozwojowe dla nauczycieli, przygotowane specjalne materiały, wsparcie mentora, wynagrodzenie za prowadzenie kół projektowych.
Projekt
„Mistrzostwa w Algorytmice i Programowaniu”
jest finansowany przez:
