- Nazwa przedmiotu:
- Algorytmy i struktury danych
- Koordynator przedmiotu:
- Rajmund Kożuszek
- Status przedmiotu:
- Obowiązkowy
- Poziom kształcenia:
- Studia I stopnia
- Program:
- Informatyka
- Grupa przedmiotów:
- Przedmioty techniczne
- Kod przedmiotu:
- AISDI
- Semestr nominalny:
- 2 / rok ak. 2021/2022
- Liczba punktów ECTS:
- 6
- Liczba godzin pracy studenta związanych z osiągnięciem efektów uczenia się:
- 1. liczba godzin kontaktowych – 94 godz., w tym
obecność na wykładach: 60 godz.,
obecność na zajęciach laboratoryjnych: 30 godz.,
udział w konsultacjach związanych z realizacją przedmiotu: 4 godz.
2. praca własna studenta – 76 godz., w tym
analiza literatury i materiałów wykładowych związana z przygotowaniem do kolejnych wykładów, wykonanie wskazanych zadań przykładowych: 20 godz.
wykonanie ćwiczeń przygotowawczych do laboratorium: 30 godz.
wykonanie zadania projektowego: 16 godz.
przygotowanie do egzaminu: 10 godz.
Łączny nakład pracy studenta wynosi 170 godz., co odpowiada 6 pkt. ECTS.
- Liczba punktów ECTS na zajęciach wymagających bezpośredniego udziału nauczycieli akademickich:
- 3.5 pkt. ECTS, co odpowiada 94 godz. kontaktowym.
- Język prowadzenia zajęć:
- polski
- Liczba punktów ECTS, którą student uzyskuje w ramach zajęć o charakterze praktycznym:
- 3 pkt. ECTS, co odpowiada 60 + 16 = 76 godz. realizacji ćwiczeń
- Formy zajęć i ich wymiar w semestrze:
-
- Wykład60h
- Ćwiczenia0h
- Laboratorium30h
- Projekt0h
- Lekcje komputerowe0h
- Wymagania wstępne:
- Matematyka konkretna 1 (MAKO1), Podstawy programowania i informatyki (PIPR)
- Limit liczby studentów:
- 150
- Cel przedmiotu:
- Celem przedmiotu jest przedstawienie najważniejszych struktur danych i algorytmów oraz pokazanie sposobów ich implementacji we współczesnych językach programowania. Wyjaśnione zostaną zagadnienia dotyczące oceny złożoności czasowej i pamięciowej algorytmów. Treść przedmiotu pozwoli studentom na dobór właściwej struktury danych i algorytmu do rozwiązywanego problemu programistycznego, a następnie stworzenie ich poprawnej implementacji. W ramach przedmiotu omówione zostaną również zagadnienia dotyczące definiowania języków formalnych. Przedstawione zostaną podstawowe klasy gramatyk formalnych oraz odpowiadające im rodzaje automatów. Wybrane wykłady będą prowadzone w formie dyskusji.
- Treści kształcenia:
- WYKŁADY:
1. Wprowadzenie (4 godz.)
Informacje o przedmiocie. Regulamin przedmiotu. Liniowe struktury danych: tablica, lista jedno i dwukierunkowa (powtórzenie). Złożoność obliczeniowa - wprowadzenie.
2. Algorytmy sortowania (8 godz.)
Sortowanie przez wybieranie i przez wstawianie (powtórzenie). Sortowanie Shella, sortowanie szybkie, sortowanie przez scalanie, sortowanie przez kopcowanie. Dolne ograniczenie dla problemu sortowania. Sortowanie kubełkowe.
3. Wyszukiwanie i funkcja mieszająca (4 godz.)
Wyszukiwanie liniowe, binarne, interpolacyjne, z podziałem Fibonacciego. Tworzenie funkcji skrótu, tablica mieszająca, filtr Blooma, algorytm MinHash.
4. Drzewa (6 godz.)
Drzewa BST, drzewa AVL, B-drzewa, drzewa splay, drzewa czerwono-czarne.
5. Algorytmy tekstowe (4 godz.)
Wyszukiwanie wzorca, algorytm Rabina-Karpa, algorytm Knutha-Morrisa-Pratta, drzewa suffiksowe, indeks odwrócony.
6. Algorytmy równoległe (4 godz.)
Podstawowe problemy i metody zrównoleglania algorytmów, równoległe strumienie, równoległe “Dziel i rządź”, metoda map-reduce.
7. Grafy i algorytmy grafowe (14 godz.)
Rodzaje grafów, reprezentacja grafów, przeszukiwanie wszerz i w głąb, sortowanie topologiczne, składowe spójne, najkrótsze ścieżki (alg. A*, Dijkstry, Bellmana-Forda, Floyda-Warshalla), minimalne drzewa rozpinające (alg. Kruskala, Prima), redukcja i domknięcie przechodnie, sieci przepływowe (alg. Forda-Fulkersona, Edmondsa-Karpa), skojarzenia (alg. Hopcrofta-Karpa, Edmondsa), cykl Eulera i cykl Hamiltona, klika, pokrycie wierzchołkowe, kolorowanie, izomorfizm.
8. Lingwistyka (6 godz.)
Słowo, język, operacje na słowach i językach, składnia, semantyka, gramatyka, automat, klasyfikacja Chomskiego, języki regularne i automaty skończone: gramatyki regularne, analiza i synteza automatów, grafy przejść, determinizm i niedeterminizm, wyrażenia regularne, języki bezkontekstowe i automaty ze stosem.
9. Złożoność obliczeniowa (6 godz.)
Problem obliczeniowy, model obliczeniowy, złożoność obliczeniowa (rodzaje złożoności), asymptotyka, notacja dużego O, Omegi, Thety oraz małego o, omegi, hierarchia klas złożoności (wynikająca z asymptotyki), inne klasy złożoności, P, NP, NP-Hard, NP-Complete (problem P=NP), coNP, PP, BPP, RP, coRP, ZPP, NC, BQP, przykład: problem SAT, maszyna Turinga, twierdzenie Cooka-Levina, hipoteza Churcha-Turinga, komputer kwantowy.
10. Przegląd metod konstruowania algorytmów (4 godz.)
Algorytmy zachłanne, brutalne, aproksymacyjne, metoda dziel i rządź, programowanie dynamiczne, problemy spełniania ograniczeń.
LABORATORIA:
1. Organizacja laboratoriów. Zapoznanie się z narzędziami. Pisanie testów jednostkowych. Usuwanie błędów krytycznych aplikacji. Wyszukiwanie wycieków pamięci. Profilowanie aplikacji.
2. Implementacja słownika opartego o drzewo binarne. Implementacja słownika opartego o funkcję mieszającą. Porównanie efektywności czasowej obu rozwiązań.
3. Odbiór zadania z pkt. 2.
4. Zadanie grafowe. Implementacja zadanego algorytmu grafowego.
5. Odbiór zadania z pkt. 4. Omówienie zadania projektowego: implementacja aplikacji wymagającej od studentów dobrania i/lub opracowania kilku odpowiednich struktur danych i algorytmów spośród prezentowanych na wykładzie.
6. Praca nad zadaniem projektowym. Ocena przyjętych założeń. Konsultacje.
7. Odebranie zadania projektowego.
- Metody oceny:
- Realizacja przedmiotu obejmuje następujące formy zajęć:
wykład prowadzony w wymiarze 4 godz. tygodniowo; w wybranych zagadnieniach przewidziana jest aktywizacja studentów na wykładzie (wybrane wykłady prowadzone w formie dyskusji),
zajęcia laboratoryjne w wymiarze 4 godz. co dwa tygodnie; w ramach tych zajęć student, korzystając z oprogramowania i sprzętu komputerowego, będąc pod opieką prowadzącego zajęcia, będzie realizował wskazane zadania dotyczące implementacji algorytmów. Wybór tematów projektów i rozwiązań przeprowadzany będzie przy użyciu metody burzy mózgów.
Sprawdzanie założonych efektów kształcenia realizowane jest przez:
ocenę wiedzy i umiejętności związanych z realizacją zadań laboratoryjnych – ocena z wybranych ćwiczeń laboratoryjnych;
ocenę wiedzy wykazanej na egzaminie.
- Egzamin:
- tak
- Literatura:
- • Cormen T, Leiserson Ch, Rivest R: Wprowadzenie do algorytmów, Warszawa, 2018
• Robert Sedgewick, Kevin Wayne (2012) - Algorithms
• Skiena S, The Algorithm Design Manual, 2nd Edition, Springer, 2010
• Dasgupta S, Papadimitriou C, Vazirani U, Algorytmy, PWN, Warszawa 2010
• Bentley J, Perełki programowania. Wydanie II, 2012
- Witryna www przedmiotu:
- https://usosweb.usos.pw.edu.pl/kontroler.php?_action=katalog2/przedmioty/pokazPrzedmiot&prz_kod=103D-INxxx-ISP-AISDI
- Uwagi:
- (-)
Efekty uczenia się
Profil ogólnoakademicki - wiedza
- Charakterystyka W01
- ma szczegółową wiedzę w zakresie drzewiastych i grafowych struktur danych
Weryfikacja: laboratorium, egzamin
Powiązane charakterystyki kierunkowe:
W05
Powiązane charakterystyki obszarowe:
I.P6S_WG.o, P6U_W
- Charakterystyka W02
- ma szczegółową wiedzę w zakresie algorytmów sortowania i wyszukiwania informacji
Weryfikacja: laboratorium, egzamin
Powiązane charakterystyki kierunkowe:
W05
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o
- Charakterystyka W03
- ma wiedzę dotyczącą konstruowania algorytmów, zna zagadnienia dotyczące złożoności obliczeniowej
Weryfikacja: laboratorium, egzamin
Powiązane charakterystyki kierunkowe:
W05
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o
- Charakterystyka W04
- ma wiedzę obejmującą lingwistykę matematyczną oraz automaty
Weryfikacja: laboratorium, egzamin
Powiązane charakterystyki kierunkowe:
W05
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o
Profil ogólnoakademicki - umiejętności
- Charakterystyka U01
- potrafi przygotować środowisko pracy programisty
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
U01
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U02
- potrafi napisać kod programu wykorzystujący proste oraz złożone struktury danych i algorytmy
Weryfikacja: egzamin, laboratorium
Powiązane charakterystyki kierunkowe:
U07
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U03
- potrafi samodzielnie rozwiązać proste zadania programistyczne dobierając do ich rozwiązania odpowiednie struktury danych oraz algorytmy
Weryfikacja: egzamin, laboratorium
Powiązane charakterystyki kierunkowe:
U02, U07
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U04
- potrafi przetestować i poprawnie ocenić złożoność obliczeniową kodu programu
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
U03
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U05
- potrafi przygotować prostą dokumentację przedstawiającą algorytm rozwiązania zadanego problemu
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
U09
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UK
- Charakterystyka U06
- potrafi wyszukać niezbędne informacje w zasobach literaturowych
Weryfikacja: egzamin, laboratorium
Powiązane charakterystyki kierunkowe:
U01
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U07
- potrafi pracować indywidualnie i w zespole
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
U08
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UO
Profil ogólnoakademicki - kompetencje społeczne
- Charakterystyka K01
- krytycznie ocenia posiadaną wiedzę i przekazywane treści
Weryfikacja: egzamin, laboratorium
Powiązane charakterystyki kierunkowe:
K01
Powiązane charakterystyki obszarowe:
I.P6S_KK, P6U_K
- Charakterystyka K02
- rozumie znaczenie wiedzy w rozwiązywaniu problemów poznawczych i praktycznych oraz potrzebę zasięgania opinii ekspertów w przypadku trudności w samodzielnym rozwiązywaniu problemu
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
K05
Powiązane charakterystyki obszarowe:
P6U_K, I.P6S_KO