»   informatyka analityczna

Program studiów I stopnia

»   studia I stopnia

Metody algebraiczne informatyki

Analiza matematyczna 1

Środowisko programisty

WF

30h

Kurs BHK

4h

Analiza matematyczna 2

Metody programowania

Inżynieria danych

WF

30h

Języki programowania (do wyboru)

Systemy operacyjne

Sieci komputerowe

Algorytmy i struktury danych 1

Język obcy

Algorytmy i struktury danych 2

Programowanie niskopoziomowe

Inżynieria oprogramowania

Przedmioty fakultatywne (do wyboru)

Język obcy

Analiza algorytmów

Projekt programistyczny 1

Przedmioty fakultatywne (do wyboru)

Seminaria (do wyboru)

Język obcy

Ochrona własności intelektualnej

Projekt programistyczny 2

Seminaria (do wyboru)

Przedmioty fakultatywne (do wyboru)

Przedmiot fakultatywny z ekonomii lub psychologii

Tutorial

Przedmioty obieralne w toku studiów I stopnia

Języki programowania

Język programowania C++

Język programowania C#

Język programowania Java

Język programowania Python

Przedmioty fakultatywne

Algebra ogólna i złożoność obliczeniowa

Algorytmika problemów trudnych

Algorytmy numeryczne

Algorytmy teorii liczb

Geometria dyskretna

Metody probabilistyczne w uczeniu maszynowym

Projekt VR (FB Open Academy)

Programowanie mobilne

Programowanie współbieżne

Systemy rozproszone

Sztuczna inteligencja

Wstęp do grafiki komputerowej

Seminaria

Algebra i logika w informatyce

Algorytmika

Alg. probabilistyczne i aproksymacyjne

Optymalizacja kombinatoryczna

Paradygmaty języków programowania

Podstawy informatyki

Krótkie opisy niektórych kursów

Metody probabilistyczne informatyki

Rzucamy sprawiedliwą monetą dopóki nie wypadną 3 orły z rzędu lub 2 reszki z rzędu. Ile razy spodziewamy się rzucać? Losujemy punkt w kole o promieniu 1. Jaka jest oczekiwana odległość otrzymanego punktu od środka? Rzucamy igłą na parkiet o deskach szerokości równej długości igły. Dlaczego igła przecina krawędź deski z prawdopodobieństwem 2/pi? Kiedyś to właśnie w ten sposób szacowaliśmy wartość liczby pi! To wszystko i dużo więcej dowiesz się na kursie z probabila!

Matematyka dyskretna

Do modelowania różnorakich problemów informatycznych wykorzystywane są pewne uniwersalne struktury kombinatoryczne: aby napisać algorytm znajdowania najszybszych połączeń w sieci komunikacji miejskiej wykorzystasz zapewne grafy, aby napisać algorytm przydzielający zadania do procesorów wykorzystasz częściowe porządki. Badaniem skończonych struktur kombinatorycznych, takich jak grafy czy częściowe porządki, zajmuje się dział matematyki zwany Matematyką Dyskretną. Na tym kursie Matematyki Dyskretnej zapoznasz się z twierdzeniami opisującymi podstawowe własności uniwersalnych struktur skończonych oraz metodami ich zliczania i generowania. Tym samym, kurs ten wyposaży Cię w podstawowy aparat matematyczny niezbędny do konstruowania i analizowania algorytmów.

Programowanie obiektowe

Styl programowania nazywany „programowaniem obiektowym”  pozwala na tworzenie dużych projektów programistycznych które są łatwe w utrzymaniu i rozbudowie. Jest to możliwe dzięki podziałowi tworzonego kodu na klasy, pakiety, biblioteki etc. oraz przestrzeganiu ogólnie przyjętych zasad komunikacji pomiędzy nimi. Dobrze napisany „obiektowy” projekt ma przejrzystą strukturę, jest łatwy w zrozumieniu, a poszczególne jego komponenty mogę być modyfikowane i zastępowane z minimalnymi modyfikacjami w kodzie. Kurs „Programowanie obiektowe” uczy tych oraz wielu innych narzędzi (na przykładzie języków Java i C++) które projektanci języka dostarczają aby ułatwić pisanie takich projektów.

Metody formalne informatyki

Celem  wykładu jest zapoznanie z podstawowymi pojęciami i narzędziami logiki formalnej a w jej ramach z teorią mnogości. Poznasz aksjomatykę teorii mnogości. Zobaczysz jak wykonać konstrukcję iloczynu Kartezjańskiego, jak powstają pojęcia relacji i funkcji, jak organizują te pojęcia struktury porządkowe. Na wykładzie zobaczysz budowę systemów formalnych obecnych tak w informatyce jak i w matematyce. Poznasz jak wyglądają fundamentalne obiekty algorytmiczne i matematyczne oraz jak należy badać ich własności. Razem z wykładowcą skonstruujesz liczby naturalne i poznasz metody przeprowadzania rozumowań indukcyjnych. Zobaczysz jak w ramach teorii mocy fascynujące mogą być konstrukcje zbiorów nieskończonych i jak wiele jest różnych nieskończoności. Zobaczysz jak formalnie wprowadzać podstawy relacyjnych baz danych. Nauczysz się ściśle o nich rozumować.

Seminarium: Algebra i logika w informatyce

Problem spełnialności więzów jest jednym z najważniejszych problemów zarówno informatyki teoretycznej jak i zastosowań informatyki. Ze względu na to, że problem jest obliczeniowo trudny rozważa się jego prostsze wersje poprzez nakładanie ograniczeń na relacje wykorzystywane w więzach lub na kształt wejścia. Pełną klasyfikację złożoności obliczeniowej w pierwszej wersji (problem jest w P lub jest NP-zupełny) udało się uzyskać dzięki metodom algebry uniwersalnej, w drugim przypadku dzięki logice matematycznej. Na seminarium rozważamy problemy podobne do problemów spełnialności więzów i szukamy odpowiednich klasyfikacji.

Podstawy programowania

Kurs Podstawy Programowania wprowadzi Cię stopniowo w fascynujący świat algorytmów oraz struktur danych. Swoją przygodę z algorytmami będziesz kontynuował na kolejnych kursach takich jak Metody Programowania oraz Algorytmy i Struktury danych. Nie będziemy poznawać algorytmów „na sucho”. Każdy z nich  będziemy implementować w języku C lub C++ oraz testować za pomocą specjalnego systemu automatycznej weryfikacji programów. Jeśli nie umiesz jeszcze programować w tych językach albo znasz tylko ich podstawy, ten kurs będzie dla Ciebie idealny. Stopniowo będziesz samodzielnie pisał coraz trudniejsze programy oraz rozwiązywał coraz ciekawsze zadania.

Algorytmy numeryczne

Wiele danych w „prawdziwym świecie” nie jest liczbami całkowitymi - temperatura za oknem, wysokość Kopca Kościuszki czy prędkość samochodu to wielkości rzeczywiste, które możemy zmierzyć (i zapisać w komputerze) tylko z pewną dokładnością. Algorytmy numeryczne zajmują się takimi właśnie danymi - oprócz efektywności, muszą dbać też o błędy pomiarów i zaokrągleń. Na kursie dowiesz się, między innymi, dlaczego układy równań liniowych są takie ważne, jak szukać optymalnych parametrów, kiedy obliczenia dużo kosztują, oraz jak zgadywać wartości funkcji, o której prawie nic nie wiemy. Zastanowimy się też, jak firmy analityczne klasyfikują wyborców, jak działa kompresja MP3, skąd w kodzie gry Quake III Arena tajemniczy wzór (i szpetne przekleństwo), oraz jak armia USA przegrała bitwę z błędem zaokrąglenia.

Sztuczna inteligencja

Głębokie sieci neuronowe i uczenie maszynowe rozpalają wyobraźnię wielu osób, które widzą siebie w przyszłości w zawodzie informatyka. Wydaje się, że każdy słyszał o programie AlphaGo firmy Google Deepmind, który pokonał Lee Sedola, osiemnastokrotnego mistrza świata. Mecz, który odbył się w 2016 roku w Seulu został wybrany jako jedno z najważniejszych wydarzeń naukowych roku 2016 przez czasopismo Science. Kurs zaznajamia uczestnika z metodami sztucznej inteligencji: podstawami uczenia maszynowego, uczenia ze wzmocnieniem, metodami rozwiązywania problemów spełniania więzów i automatycznego dowodzenia twierdzeń.

Modele obliczeń

Pełne rozumienie złożoności świata problemów algorytmicznych jest niemożliwe bez matematycznego modelu komputera za który od lat 30-tych XX wieku uważa się maszynę Turinga. Prosta matematyczna definicja maszyny obliczeniowej pozwoliła zrozumieć granice obliczalności, w szczególności pokazać, że istnieją łatwo formułowalne problemy obliczeniowe dla których nie ma algorytmów: ani w C++, ani w Pythonie, ani w żadnym innym języku programowania nie da się napisać programu, który dla podanego np. w pliku innego programu komputerowego sprawdzi czy ten zakończy swoje działanie na wejściu długości 128. Na kursie poznaje się najważniejsze modele obliczeń oraz klasy problemów, które mogą być przez nie rozwiązane.

Seminarium: Podstawy informatyki

Jest to seminarium badawcze. Prezentowane są współczesne prace dotyczące teorii obliczeń, rachunku lambda, logik programów, programowania w logice, programowania funkcyjnego, problemów zliczania w rachunkach logicznych i związaną z tym problematyką asymptotycznej gęstości.

Język programowania C++

Od swojego powstania we wczesnych latach 80. ubiegłego wieku do czasów współczesnych, język C++ przeszedł  wręcz niewyobrażalną ewolucję od C „na sterydach” do jednego z najpopularniejszych języków programowania, wykorzystywanego między innymi w analizie danych zbieranych przez wielki zderzacz hadronów w Europejskim Ośrodku Badań Jądrowych CERN, w branży gier komputerowych, czy w końcu przy konstrukcji statków kosmicznych SpaceX. Uczestnicząc w kursie zaznajomisz się z tajnikami C++ oraz poznasz zaawansowane techniki programowania pozwalające pisać wysoce wydajny i efektywny kod. Poznasz współczesne metody projektowania kodu i nauczysz się używać języka C++ do rozwiązywania problemów stawianych współczesnym programistom.

Algorytmika problemów trudnych

Większość problemów informatycznych sprowadza się do skonstruowania algorytmu, który dla danej na wejściu instancji problemu znajduje zadowalające nas rozwiązanie. Od algorytmów takich wymaga się, aby działały szybko i znajdowały optymalne rozwiązanie, najlepiej dla wszystkich możliwych instancji problemu. Niestety, większość ważnych problemów informatycznych (komiwojażer, kolorowanie grafów) jest obliczeniowo trudne, co oznacza, że problemy te nie mają algorytmów spełniających wszystkie powyższe kryteria. Na tym kursie dowiesz się jak konstruować algorytmy rozwiązujące problemy trudne: wykładnicze i podwykładnicze (dokładne ale niezbyt szybkie), aproksymacyjne (szybkie ale dopuszczające rozwiązania przybliżone) oraz parametryzowane (szybkie i dokładne, ale tylko dla pewnych klas instancji problemu).

© 2018 Theoretical Computer Science @ UJ

web design by