KARTA MODUŁU KSZTAŁCENIA I. Informacje ogólne 1 Nazwa modułu kształcenia Algorytmy i struktury danych 2 Nazwa jednostki prowadzącej moduł Instytut Informatyki, Zakład Informatyki Stosowanej 3 Kod modułu (wypełnia koordynator ECTS) 4 Grupa treści kształcenia kierunkowego 5 Typ modułu obowiązkowy 6 Poziom studiów 7 Liczba punktów ECTS 8 Poziom przedmiotu I stopnia 6 średnio-zaawansowany 9 Rok studiów, semestr II rok III semestr zimowy 10 Liczba godzin w semestrze 11 Liczba godzin w tygodniu studia stacjonarne 30 30 2 2 12 Język wykładowy: polski 13 Wykładowca: Marcin Klimek, dr inż., marcin_kli@interia.pl Wyk. Ćw. Lab. Sem. Proj. Wyk. Ćw. Lab. Sem. Proj. II. Informacje szczegółowe 14 Wymagania wstępne 1. Znajomość elementów matematyki dyskretnej tj. teoria grafów itp. 2. Wiedza z podstaw analizy matematycznej. 3. Umiejętność programowania w zakresie podstawowym. 15 Cele przedmiotu C1 Zapoznanie z podstawowymi strukturami danych i możliwościami ich wykorzystania w programach komputerowych. C2 Zdobycie wiedzy dotyczącej technik algorytmicznych i możliwości ich zastosowania w różnych problemach optymalizacyjnych. C3 Zaznajomienie z podstawowymi algorytmami dla ważnych zagadnień informatycznych tj. sortowanie, wyszukiwanie danych itp. C4 Zdobycie umiejętności zapisu procedur w postaci pseudokodu, schematów blokowych. C5 Zrozumienie zasad oceny przydatności algorytmu w konkretnym zastosowaniu m.in. ze względu na złożoność obliczeniową i pamięciową.
16 Efekty kształcenia w zakresie wiedzy, umiejętności i kompetencji społecznych nr student, który zaliczył przedmiot, potrafi: odniesienie do celów przedmiotu EK01 EK02 EK03 EK04 EK05 implementować wydajne algorytmy, stosować odpowiednie techniki algorytmiczne dla praktycznych problemów oceniać złożoność obliczeniową zastosowanych procedur wybierać wydajne struktury danych przy konstruowaniu programów komputerowych zapisywać rozwiązania, algorytmy w postaci pseudokodu i schematów blokowych identyfikować trudne zagadnienia obliczeniowe, w których uzasadnione jest wykorzystanie rozwiązań przybliżonych C2,C3 C5 C1 C4 C5 17 Treści programowe forma zajęć wykłady W1 W2 W3 W4 W5 W6 W7 W8 Wprowadzenie do algorytmiki. Definicje algorytmu. Cechy algorytmu. Sposoby zapisu algorytmów. Liczby pseudolosowe. Złożoność obliczeniowa. Problemy NP-trudne i NP-zupełne. Metody tworzenia algorytmów: dziel i zwyciężaj, metoda zachłanna, programowanie dynamiczne, rekurencja, heurystyki itd. Przykładowe problemy optymalizacyjne i wybrane procedury ich rozwiązywania (problem plecakowy, wydawania reszty, komiwojażera, wieża Hanoi itp.). Algorytmy sortowania (szybkie, przez wstawianie, wybieranie, bąbelkowe, pozycyjne, kopcowe) Analiza złożoności wybranych algorytmów (np. sortowania). Typy danych: tablice, stosy, kolejki, listy jedno- i dwukierunkowe. Podstawowe operacje na Struktury danych w C#. Efektywne wyszukiwanie (binarne), haszowanie. Słowniki. godzin S godzin NS 2 EK04 odniesienie do efektów kształcenia dla przedmiotu 2 EK02, EK05 4 EK01 4 EK01,EK05 4 EK01 2 EK02,EK05 4 EK03 2 EK03
W9 W10 Grafy. Cykl Eulera, Hamiltona. Algorytm Dijkstry. 2 EK03 Drzewa. BST, AVL, B-drzewa. Kopiec. 4 EK03 Podstawowe operacje na drzewach. suma godzin 30 L1 L2 L3 L4 L5 L6 L7 forma zajęć laboratoria Implementacja w C# prostych algorytmów np. znajdowanie liczb pierwszych, szukanie minimum funkcji, operacje na macierzach itp. Kodowanie w C# podstawowych operacji na listach, tablicach tj. wyszukiwanie, dodawanie, usuwanie elementów. Konstruowanie algorytmów rekurencyjnych i iteracyjnych (wyszukiwanie binarne, obliczanie silni, ciąg Fibonacciego, wieża Hanoi). Budowa w C# algorytmów zachłannych i siłowych dla przykładowych problemów tj. problem wydawania reszty, plecakowy, komiwojażera itp. Budowa klasycznych algorytmów sortowania : bąbelkowy, przez wstawianie, wybieranie, szybkie sortowanie. Analiza złożoności obliczeniowej. Budowa dynamicznych struktur danych: stosów, kolejek, list i podstawowych operacji dla tych struktur. Korzystanie z kolekcji w C#. Implementacja w C# algorytmów przeszukiwania drzew, grafów, algorytmu Dijkstry. suma godzin 30 godzin S godzin NS odniesienie do efektów kształcenia dla przedmiotu 4 EK01, EK03 4 EK03 4 EK01 2 EK03 6 EK02, EK05 6 EK03, EK04 4 EK03, EK04 18 Narzędzia/metody dydaktyczne 1. Podczas laboratoriów praca indywidualna studentów: pisanie programów komputerowych, rozwiązywanie problemów algorytmicznych, analiza kodu programów komputerowych pod kątem wydajności, optymalności. 2. Laboratoria w części odbywają się przy tablicy: studenci rozwiązują zagadnienia teoretyczne tj. sortowanie liczb, obliczanie złożoności obliczeniowej. 3. Wykład prowadzony z wykorzystaniem projektora multimedialnego. Wykłady przygotowane w formie prezentacji PowerPoint.
4. Podczas wykładów prezentowane są także wybrane programy komputerowe w C# tj. generowanie liczb pseudolosowych (Lotto), wyszukiwanie binarne, przeglądanie drzew, sortowanie szybkie, przez wstawianie, implementacje stosu, kolejki, listy dwukierunkowej, przykłady obsługi kolekcji Stack, Queue, Dictionary, SortedList, algorytm Dijkstry, generowanie wszystkich permutacji n liczb itp. 19 Sposoby oceny (F formująca, P podsumowująca) F1 F2 F3 F4 F5 P1 Dwa kolokwia przy komputerze: implementacja programów stosujących różne struktury danych i techniki algorytmiczne. Kolokwium pisemne z złożoności obliczeniowej algorytmów. Ocena realizacji projektu zaliczeniowego do zrealizowania w domu (implementacja wybranego algorytmu rozwiązującego problem optymalizacyjny). Kolokwium pisemne z algorytmów sortowania Ocena ciągła pracy indywidualnej (realizacji programów komputerowych) podczas laboratoriów. Egzamin w formie pisemnej sprawdzający wiedzę z wykładów i laboratoriów 20 Obciążenie pracą studenta forma aktywności średnia godzin na zrealizowanie aktywności S NS Godziny kontaktowe z nauczycielem 75 Przygotowanie się do laboratorium 40 Przygotowanie się do egzaminu 35 SUMA 150 SUMARYCZNA LICZBA PUNKTÓW 6 ECTS DLA PRZEDMIOTU 21 Literatura podstawowa i uzupełniająca Literatura podstawowa: 1. Wirth N., Algorytmy + struktury danych = programy. WNT 2004 2. Aho A.V., Hopcroft J.E., Ullman J.D., Algorytmy i struktury danych. Helion 2003. 3. Wróblewski P., Algorytmy, struktury danych i techniki programowania. Helion 2003. 4. Lafore R., Java. Algorytmy i struktury danych. Helion 2004. Literatura uzupełniająca: 1. Banachowski L., Diks K., Rytter W., Algorytmy i struktury danych. WNT 1996. 2. Cormen T. H., Leiserson C. E., Rivest R. L., Stein C., Wprowadzenie do algorytmów. WNT Warszawa 2004. 3. Stephens R., Algorytmy i Struktury Danych. Helion Gliwice 2000. 4. Sedgewick R., Algorytmy w C++. Grafy. Wydawnictwo RM Sp. z o.o., Warszawa 2003. 22 Kryteria oceny *
nr efektu na ocenę 2 (ndst) na ocenę 3 (dst) EK01 EK02 EK03 EK04 student nie potrafi konstruować nawet prostych algorytmów student nie zna podstawowych zasad dotyczących obliczania złożoności obliczeniowej i pamięciowej student nie potrafi korzystać nawet z prostych struktur danych przy implementacji programów komputerowych student nie zna zasad zapisu algorytmu w postaci pseudokodu i schematów blokowych implementować proste algorytmy student zna zasady obliczania złożoności ale nie potrafi jej wyliczać nawet dla prostych procedur używać proste struktury danych tj. tablice, listy, ale ich wykorzystanie nie zawsze jest odpowiednie student zna zasady zapisu procedur w postaci pseudokodu i schematów blokowych, ale ma problemy z prezentacją w tej formie nawet prostych algorytmów na ocenę 4 (db) opracowywać procedury obliczeniowe dla trudnych problemów, ale procedury te nie zawsze są odpowiednio wydajne obliczać złożoność obliczeniową dla prostych algorytmów składających się z pętli i instrukcji sterujących korzystać z różnych, także złożonych struktur danych, ale ich wykorzystanie bywa nieoptymalne zapisywać proste algorytmy w postaci pseudokodu i schematów blokowych na ocenę 5 (bdb) implementować wydajne algorytmy i stosować odpowiednie techniki algorytmiczne dla różnych praktycznych zagadnień oceniać złożoność obliczeniową różnych, nawet skomplikowanych procedur wybierać wydajne struktury danych przy implementacji programów komputerowych zapisywać nawet skomplikowane algorytmy w postaci pseudokodu i schematów blokowych
EK05 student nie potrafi analizować trudności problemów optymalizacyjnych III. uzasadnić fakt, że niektóre zagadnienia nie mogą być rozwiązane dokładnie w akceptowalnym czasie student zna wybrane zagadnienia, w których uzasadnione jest stosowanie metod heurystycznych Inne przydatne informacje identyfikować trudne problemy obliczeniowe, w których uzasadnione jest wykorzystanie rozwiązań przybliżonych 23 Inne przydatne informacje o przedmiocie 1. Materiały z wykładów i laboratoriów udostępnione są dla studentów na stronie jurand.ii.pswbp.pl/~mk 2. Laboratoria odbywają się w salach komputerowych 285 lub 286 z oprogramowaniem niezbędnym do realizacji przedmiotu tj. Microsoft Visual Studio 2010. *do decyzji koordynatora
Tabela podsumowująca. EK01 EK02 EK03 Efekt kształcenia Odniesienie danego efektu do efektów zdefiniowanych dla całego programu ( kierunkowych ) K_W06, K_W07, K_W13, K_U08, K_U13, K_U14 K_W13, K_U08, K_U13, K_U14 K_W06, K_W07, K_W13, K_U08, K_U13, K_U14 Cele przedmiotu Treści programowe Narzędzia/metody dydaktyczne Sposób oceny C2, C3 W3,W4,W5,L1,L3 1, 3, 4 F1, F3, F4, F5, P1 C5 W2,W6,L5 1, 2, 3 F2, P1 C1 W7,W8,W9,W10,L1,L2,L4,L6,L7 1, 3, 4 F1, F3, F5, P1 EK04 K_W06, K_W07 C4 W1, L6, L7 2, 3 P1 EK05 K_W13, K_U13, C5 W2,W4,W6,L5 3, 4 F2, P1 K_U14 Strona 7