- Nazwa przedmiotu:
- Algorytmy i struktury danych
- Koordynator przedmiotu:
- prof. nzw. dr hab. inż. Barbara Putz
- Status przedmiotu:
- Obowiązkowy
- Poziom kształcenia:
- Studia I stopnia
- Program:
- Elektronika i Telekomunikacja
- Grupa przedmiotów:
- Przedmioty informatyki - obowiązkowe
- Kod przedmiotu:
- AISDZ
- Semestr nominalny:
- 2 / rok ak. 2020/2021
- Liczba punktów ECTS:
- 5
- Liczba godzin pracy studenta związanych z osiągnięciem efektów uczenia się:
- Zajęcia kontaktowe z nauczycielem:
1. konsultacje mailowe z nauczycielem: 20 h
2. zajęcia stacjonarne na uczelni: 4 h
3. egzamin (w tym zaliczanie projektu): 2 h
Zajęcia bez kontaktu z nauczycielem:
1. praca z podręcznikiem: 90 h
2. praca wstępna i wykonanie 2 testów online: 10 h
3. opracowanie kilku etapów projektu: 40 h
Sumaryczna liczba godzin: 166
- Liczba punktów ECTS na zajęciach wymagających bezpośredniego udziału nauczycieli akademickich:
- 1
- Język prowadzenia zajęć:
- polski
- Liczba punktów ECTS, którą student uzyskuje w ramach zajęć o charakterze praktycznym:
- 3
- Formy zajęć i ich wymiar w semestrze:
-
- Wykład30h
- Ćwiczenia0h
- Laboratorium0h
- Projekt30h
- Lekcje komputerowe0h
- Wymagania wstępne:
- Znajomość podstaw programowania w języku C/C++, na poziomie obowiązkowego przedmiotu Programowanie.
- Limit liczby studentów:
- -
- Cel przedmiotu:
- Celem przedmiotu jest nauka zasad konstruowania algorytmów i doboru struktur danych, ze szczególnym uwzględnieniem dynamicznych listowych struktur danych.
- Treści kształcenia:
- Wprowadzenie: zagadnienia złożoności obliczeniowej algorytmów, notacja "duże O". Złożoność asymptotyczna, złożoność średnia i pesymistyczna.
Rekurencja. Realizacja wywołania rekurencyjnego, stos rekursji, warunek końca. Geometryczne przykłady ilustrujące zasadę rekurencji. Zagadnienia wydajności algorytmów rekurencyjnych.
Algorytmy sortowania: algorytmy proste (przez wybieranie, wstawianie, zamianę), sortowanie szybkie, sortowanie przez scalanie. Porównanie złożoności obliczeniowej.
Algorytmy przeszukiwania; przeszukiwanie danych: liniowe, binarne, z haszowaniem. Wyszukiwanie wzorca w tekście.
Listy jako przykład wykorzystania wskaźników i zmiennych dynamicznych. Zasady wykonywania operacji na listach: wstawianie i usuwanie elementów. Listy jednokierunkowe, dwukierunkowe i cykliczne.
Drzewa binarne i drzewa binarnego wyszukiwania: zasada definiowania, operacje wyszukiwania, wstawiania i usuwania elementów. Wykorzystanie drzew BST do sortowania danych.
Binarne drzewa prawie zrównoważone: drzewa AVL i drzewa czerwono-czarne. Operacje rotacji w procesie równoważenia drzew; zasady wstawiania i usuwania elementów.
Stosy i kolejki - implementowane w tablicach lub listach; kolejki priorytetowe jako implementacja sterty.
Grafy: reprezentacja macierzowa i listy sąsiedztwa. Najkrótsze ścieżki: metoda Floyda, algorytm Dijkstry. Minimalne drzewa rozpinające: algorytm Kruskala.
Algorytmy geometryczne (geometria obliczeniowa): poszukiwanie otoczki wypukłej, triangulacja Delaunaya. Struktura half-edge w reprezentacji brył.
Przegląd metod konstruowania algorytmów. Metody typu "dziel i zwyciężaj", programowanie dynamiczne, algorytmy zachłanne, algorytmy z powrotami, metody "zamiatania" płaszczyzny.
Kalkulator: przykład tworzenia rozbudowanego programu, od implementacji prostych działań poprzez operacje na macierzach aż do stworzenia rekurencyjnego parsera służącego do obsługi wyrażeń arytmetycznych z nawiasami i zmiennymi.
- Metody oceny:
- Zaliczenie przedmiotu odbywa się w języku C/C++ na podstawie sumy punktów uzyskanych z:
- dwu testów przeprowadzanych on-line (przez Internet); z każdego z nich można uzyskać maksymalnie 5 pkt. Testy odbywają się w ściśle określonych dniach, nie ma żadnej możliwości odrobienia ich w innym terminie.
- projektu realizowanego (jako aplikacja konsolowa) samodzielnie w ciągu semestru w kilku etapach, ograniczonych narzuconymi terminami - i zaliczanego podczas egzaminu.
- egzaminu pisemnego przeprowadzanego na uczelni.
UWAGA: wykonywanie testów on-line i projektu nie jest obowiązkowe, konieczny jest jedynie egzamin (cz. 1 i 2).
Egzamin trwa 120 minut i składa się z trzech części:
1. części testowej, trwającej 10 minut i zawierającej 15 pytań testowych (wybór jednej z 3 odpowiedzi).
2. części zadaniowej, trwającej 60 minut i wymagającej rozwiązania 2 zadań na papierze:
- zadanie polegające na napisaniu programu z zakresu list jednokierunkowych, czyli z zakresu lekcji 4.1-4.2, na poziomie zadań do lekcji 4;
- zadanie polegające na wykonaniu wraz z komentarzem rysunku ilustrującego działanie zadanego algorytmu (spośród kilkunastu podanych) na konkretnym przykładzie (z zakresu lekcji 1-8).
3. części projektowej, trwającej 50 minut i polegającej na zaliczaniu projektu przy komputerach (zaliczanie może wymagać umiejętności modyfikacji napisanego projektu).
- Egzamin:
- tak
- Literatura:
- 1. Dawid Harel - Rzecz o istocie informatyki. Algorytmika. WNT, 2001.
2. Niklaus Wirth - Algorytmy+struktury danych=programy. WNT, 2002.
3. Piotr Wróblewski - Algorytmy, struktury danych i techniki programowania. Helion, 2010
4. Adam Drozdek - C++. Algorytmy i struktury danych. Helion, 2004.
5. R. Neapolitan, Kumarss Naimipour - Podstawy algorytmów z przykładami w C++ Helion, 2004.
- Witryna www przedmiotu:
- https://inz.okno.pw.edu.pl/
- Uwagi:
- -
Efekty uczenia się
Profil ogólnoakademicki - wiedza
- Charakterystyka [K_W04]
- ma szczegółową wiedzę z zakresu technik konstruowania algorytmów, ze szczególnym uwględnieniem dynamicznych struktur danych
Weryfikacja: testy online, zaliczanie projektu, egzamin
Powiązane charakterystyki kierunkowe:
K_W04
Powiązane charakterystyki obszarowe:
I.P6S_WG
- Charakterystyka [K_W19]
- ma uporządkowaną wiedzę ogólną obejmująca kluczowe zagadnienia z zakresu analizy i doboru algorytmów oraz technik programowania
Weryfikacja: testy online, egzamin
Powiązane charakterystyki kierunkowe:
K_W19
Powiązane charakterystyki obszarowe:
I.P6S_WG
Profil ogólnoakademicki - umiejętności
- Charakterystyka [K_U15]
- potrafi formułować zagadnienia w postaci algorytmicznej i zapisywać algorytmy w językach programowania
Weryfikacja: zaliczanie zadań projektowych, egzamin
Powiązane charakterystyki kierunkowe:
K_U15
Powiązane charakterystyki obszarowe:
III.P6S_UW.4.o
- Charakterystyka [K_U20]
- umie tworzyć proste konstrukcje i złożone algorytmy w sposób logiczny, zgodnie z regułami logiki matematycznej
Weryfikacja: zadania projektowe (zaliczanie), egzamin
Powiązane charakterystyki kierunkowe:
K_U20
Powiązane charakterystyki obszarowe:
I.P6S_UW
Profil ogólnoakademicki - kompetencje społeczne
- Charakterystyka [K_K01]
- ma nawyk ustawicznego kształcenia się i wyszukiwania nowych informacji (w podręczniku, w sieci) w zakresie konstruowania algorytmów
Weryfikacja: konsultowanie i zaliczanie kilkustopniowego projektu
Powiązane charakterystyki kierunkowe:
K_K01
Powiązane charakterystyki obszarowe:
- Charakterystyka [K_K06]
- radzi sobie z rozwiązywaniem nowych, nietypowych zadań
Weryfikacja: realizacja i zaliczanie projektu, testy online, egzamin
Powiązane charakterystyki kierunkowe:
K_K06
Powiązane charakterystyki obszarowe:
I.P6S_KO