- 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