Algorytmy i struktury danych
Transkrypt
Algorytmy i struktury danych
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 6 Poziom studiów I stopnia 7 9 Rok studiów, semestr 10 Liczba godzin w semestrze II rok III semestr– zimowy studia stacjonarne Wyk. 30 Liczba 6 Ćw. punktów Lab. 30 Sem. 5 Typ modułu obowiązkowy ECTS 8 Poziom przedmiotu średnio-zaawansowany 11 Liczba godzin w tygodniu Proj. Wyk. 2 Ćw. Lab. Sem. Proj. 2 12 Język wykładowy: polski 13 Wykładowca: Marcin Klimek, dr inż., [email protected] 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 obliczeniowych 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 odniesienie do celów przedmiotu nr student, który zaliczył przedmiot, potrafi: EK01 implementować wydajne algorytmy, stosować odpowiednie techniki algorytmiczne dla praktycznych problemów obliczeniowych oceniać złożoność obliczeniową zastosowanych procedur obliczeniowych 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 EK02 EK03 EK04 EK05 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. liczba godzin S liczba godzin NS odniesienie do efektów kształcenia dla przedmiotu 2 EK04 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. Drzewa. BST, AVL, B-drzewa. Kopiec. Podstawowe operacje na drzewach. suma godzin forma zajęć – laboratoria L1 L2 L3 L4 L5 L6 L7 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 2 EK03 4 EK03 30 liczba godzin S liczba 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 30 18 Narzędzia/metody dydaktyczne 1. 2. 3. 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. Laboratoria w części odbywają się przy tablicy: studenci rozwiązują zagadnienia teoretyczne tj. sortowanie liczb, obliczanie złożoności obliczeniowej. 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 Godziny kontaktowe z nauczycielem Przygotowanie się do laboratorium Przygotowanie się do egzaminu SUMA SUMARYCZNA LICZBA PUNKTÓW ECTS DLA PRZEDMIOTU średnia liczba godzin na zrealizowanie aktywności S NS 75 40 35 150 6 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 EK01 EK02 EK03 EK04 na ocenę 4 (db) student nie student potrafi student umie potrafi implementować opracowywać konstruować proste procedury nawet prostych algorytmy obliczeniowe algorytmów dla trudnych problemów, ale procedury te nie zawsze są odpowiednio wydajne student nie zna student zna student umie podstawowych zasady obliczać zasad dotyczących obliczania złożoność obliczania złożoności ale obliczeniową złożoności nie potrafi jej dla prostych obliczeniowej i wyliczać nawet algorytmów pamięciowej dla prostych składających procedur się z pętli obliczeniowych i instrukcji sterujących student nie student potrafi student umie potrafi korzystać używać proste korzystać nawet z prostych struktury z różnych, struktur danych danych tj. także przy tablice, listy, ale złożonych implementacji ich struktur programów wykorzystanie danych, ale ich komputerowych nie zawsze jest wykorzystanie odpowiednie bywa nieoptymalne student nie zna student zna student umie zasad zapisu zasady zapisu zapisywać algorytmu w procedur w proste postaci postaci algorytmy w pseudokodu i pseudokodu i postaci schematów schematów pseudokodu i blokowych blokowych, ale schematów ma problemy blokowych z prezentacją w tej formie nawet prostych algorytmów na ocenę 2 (ndst) na ocenę 3 (dst) na ocenę 5 (bdb) student potrafi implementować wydajne algorytmy i stosować odpowiednie techniki algorytmiczne dla różnych praktycznych zagadnień obliczeniowych student potrafi oceniać złożoność obliczeniową różnych, nawet skomplikowanych procedur obliczeniowych student potrafi wybierać wydajne struktury danych przy implementacji programów komputerowych student potrafi zapisywać nawet skomplikowane algorytmy w postaci pseudokodu i schematów blokowych EK05 student nie potrafi analizować „trudności” problemów optymalizacyjnych student umie uzasadnić fakt, że niektóre zagadnienia nie mogą być rozwiązane dokładnie w akceptowalnym czasie III. student zna wybrane zagadnienia, w których uzasadnione jest stosowanie metod heurystycznych student potrafi identyfikować trudne problemy obliczeniowe, w których uzasadnione jest wykorzystanie rozwiązań przybliżonych Inne przydatne informacje 23 Inne przydatne informacje o przedmiocie 1. 2. Materiały z wykładów i laboratoriów udostępnione są dla studentów na stronie jurand.ii.pswbp.pl/~mk 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. Efekt kształcenia EK01 EK02 EK03 EK04 EK05 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 K_W06, K_W07 K_W13, 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 C4 W1, L6, L7 2, 3 P1 C5 W2,W4,W6,L5 3, 4 F2, P1 Strona | 7