Wydział Informatyki
Kierunek studiów Informatyka i ekonometria Poziom i forma studiów pierwszego stopnia inżynierskie stacjonarne
Specjalność / Ścieżka dyplomowania --- Profil kształcenia praktyczny
Nazwa przedmiotu Algorytmy i struktury danych Kod przedmiotu IE1ASD
Rodzaj przedmiotu obowiązkowy
Forma zajęć i liczba godzin W Ć L P Ps T S Semestr 3
30 30 30 Punkty ECTS 7
Przedmioty wprowadzające Matematyka dyskretna (IE1MDY),   Programowanie obiektowe (IE1POB),  
Cele przedmiotu

Celem przedmiotu jest wykształcenie umiejętności oceny efektywności algorytmu oraz projektowania efektywnych rozwiązań jeszcze przed fazą implementacji algorytmu. Student zostanie wyposażony w wiedzę na temat: metod wyznaczania/szacowania kosztów obliczeniowych rozwiązań algorytmicznych, metod projektowania efektywnych rozwiązań algorytmicznych, metod projektowania efektywnych struktur danych, problemów trudnych obliczeniowo. Student wykształci umiejętności: projektowania efektywnych obliczeniowo algorytmów i struktur danych, oceny efektywności zastosowanych rozwiązań, identyfikacji problemów trudnych obliczeniowo i stosowania rozwiązań przybliżonych dla tych problemów. Celem przedmiotu jest również wykształcenie umiejętności skutecznego komunikowania się w zakresie problemów inżynierskich i naukowych z przedstawicielami innych dziedzin.

Treści programowe

Wykład:

1. Podstawowe pojęcia (poprawność algorytmu. złożoność obliczeniowa algorytmu).
2. Rekurencja jako technika kodowania algorytmów.
3. Techniki projektowania algorytmów:"dziel i zwyciężaj",zachłanna, programowania dynamiczne.
4. Implementacja kolejki priorytetowe (w postaci kopca).
5. Implementacje struktury słownika (drzewa i tablice haszujące).
6. Algorytmy grafowe i struktury danych reprezentujące grafy.
7. Klasy złożoności obliczeniowej (P, NP, NPC, NP-hard), przykłady problemów trudnych obliczeniowo.
8. Algorytmy z powrotami.
9. Algorytmy przybliżone i heurystyczne.
10. Inne zagadnienia (algorytmy przetwarzania tekstu, geometria obliczeniowa).

Ćwiczenia:
1. Obliczanie złożoności czasowej programów iteracyjnych, określanie rzędu złożoności, znajdywanie efektywnych rozwiązań podstawowych problemów obliczeniowych.
2. Ćwiczenia dotyczącej algorytmów rekurencyjnych i "dziel i zwyciężaj": projektowanie algorytmów i obliczanie złożoności.
3. Rozwiązywanie problemów obliczeniowych z zastosowaniem techniki zachłannej i programowania dynamicznego.
4. Ćwiczenia dotyczące działania wydajnych struktur danych (kopców, drzew i tablic haszujących).
5. Rozwiązywanie problemów grafowych.
6. Ćwiczenie związane z techniką powrotów.
7. Ćwiczenie umiejętności rozpoznawania problemów trudnych-obliczeniowo i stosowania w ich przypadku rozwiązań przybliżonych/heurystycznych.

Pracownia specjalistyczna:
1. Podstawowe problemy obliczeniowe, optymalizacja algorytmów (porównanie, projektowanie, implementacja) pod względem złożoności czasowej.
2. Rozwiązanie problemów obliczeniowych z zakresu rekurencji/"dziel i zwyciężaj".
3. Projektowanie i implementacja wydajnych algorytmów (technika programowania dynamicznego i zachłanna) do rozwiązywania problemów optymalizacji kombinatorycznej.
4. Implementacja drzewiastej struktury słownika.
5. Rozwiązywanie problemów grafowych.

Metody dydaktyczne

ćwiczenia przedmiotowe,   programowanie z użyciem komputera,   metoda przypadków,   wykład problemowy,   wykład informacyjny,  

Forma zaliczenia

Wykład - egzamin pisemny.
Ćwiczenia - dwa kolokwia.
Pracownia specjalistyczna - ocena cząstkowych zadań problemowych.

Symbol efektu uczenia się Zakładane efekty uczenia się Odniesienie do kierunkowych efektów uczenia się
EU1 zna fundamentalne pojęcia i notacje stosowane w analizie algorytmów i struktur danych oraz w opisywaniu problemów obliczeniowych, decyzyjnych itp., które można rozwiązać za pomocą komputera K_W01
K_W04
EU2 potrafi oceniać złożoność czasową i pamięciową algorytmów oraz struktur danych; umie porównać różne rozwiązania tego samego problemu K_U03
EU3 wykorzystuje standardowe rozwiązania projektowe i implementacyjne algorytmów oraz struktur danych K_U03
EU4 potrafi zaproponować i zaprojektować lub dobrać algorytmy i struktury danych do efektywnego rozwiązania zadanego inżynierskiego lub naukowego; potrafi oszacować złożoność problemu i zidentyfikować problemy trudne oraz takie, dla których zadowalające jest rozwiązanie przybliżone/heurystyczne K_U03
K_U11
EU5 potrafi zweryfikować poprawność algorytmu podstawowymi metodami formalnymi i symulacyjnymi K_U11
EU6 Identyfikuje i rozstrzyga dylematy związane z realizacją określonego przez siebie zadnia K_K04
Symbol efektu uczenia się Sposób weryfikacji efektu uczenia się Forma zajęć na której zachodzi weryfikacja
EU1 egzamin pisemny W
EU2 kolokwium Ć
EU3 kolokwium, ocena cząstkowych zadań problemowych Ć, Ps
EU4 kolokwium, ocena cząstkowych zadań problemowych Ć, Ps
EU5 kolokwium, ocena cząstkowych zadań problemowych Ć, Ps
EU6 ocena cząstkowych zadań problemowych Ps
Bilans nakładu pracy studenta (w godzinach) Liczba godz.
Wyliczenie
1 - Udział w wykładach 30
2 - Udział w: ćwiczeniach audytoryjnych + pracowni specjalistycznej 60
3 - Przygotowanie do ćwiczeń audytoryjnych/pracowni specjalistycznej 20
4 - Udział w konsultacjach 5
5 - Realizacja zadań problemowych pracowni specjalist. 30
6 - Przygotowanie do egzaminu 15
7 - Obecność na egzaminie 4
8 - Przygotowanie do zaliczenia ćwiczeń + obecność na kolokwiach 11
RAZEM: 175
Wskaźniki ilościowe GODZINY ECTS
Nakład pracy studenta związany z zajęciami wymagającymi bezpośredniego udziału nauczyciela 99
(4)+(2)+(1)+(7)
4.0
Nakład pracy studenta związany z zajęciami o charakterze praktycznym 121
(8)+(2)+(5)+(3)
4.8
Literatura podstawowa

1. T. H. Cormen, C. E. Leiserson, R. L. Rivest, Wprowadzenie do algorytmów, WNT, Warszawa, 2004
2. R. Neapolitan, K. Namipour, Podstawy algorytmów z przykładami w C++, Helion, Warszawa, 2006.
3. A. V. Aho, J. E. Hopcroft, J. D. Ullman, Projektowanie i analiza algorytmów komputerowych, PWN, Warszawa, 2007
4. Algorytmy i struktury danych : ćwiczenia. Cz.1, Analiza i techniki projektowania algorytmów, Białystok : Oficyna Wydawnicza Politechniki Białostockiej, 2020.

Literatura uzupełniająca

1. L. Banachowski, K. Diks, W. Rytter. Algorytmy i struktury danych, WNT, Warszawa 2006.
2. A. Drozdek, D. L. Simon. Struktury danych w jezyku C, WNT, Warszawa 2003.
3. N. Wirth. Algorytmy + struktury danych = programy, WNT, Warszawa 2004.
4. J. Paul Mueller, L. Massaron, Algorytmy dla bystrzaków, Gliwice : Helion, 2020.

Jednostka realizująca Katedra Informatyki Teoretycznej Data opracowania programu
Program opracował(a) dr Joanna Karbowska-Chilińska,dr inż. Krzysztof Ostrowski 2021.04.28