WYDZIAŁ FIZYKI UwB KOD USOS: Karta przedmiotu Student: 1. 2. 3. 4. 5. 6. Przedmiot moduł ECTS Algorytmy i struktury danych (C++) NI 5 Formy zajęć wykład WYMIAR 15 konwersatorium seminarium laboratorium razem semestr - 45 60 5 Potrafi przedstawiać algorytmy w postaci: listy kroków, schematów blokowych, schematów zwartych NS. Potrafi określić złożoność obliczeniową prostych programów. Potrafi korzystać z prostych narzędzi (np.: JavaBlock) wspomagających projektowanie algorytmów. Potrafi wykorzystywać rekurencję, rozumiejąc jej mocne i słabe strony. Potrafi programować i wykorzystywać klasy (w C++) implementujące interfejsy popularnych struktur danych takich jak: tablice, stosy, kolejki, listy, drzewa, grafy. Umie projektować i wykorzystywać różne algorytmy sortowania. Forma kształcenia i sposób weryfikacji efektów kształcenia Efekty kształcenia kierunek studiów: FIZYKA specjalność: FIZYKA 0900 Wykład Laboratorium Wykład teoretyczny: prezentacja multimedialna wizualizacja działania algorytmu przy pomocy apletów. Realizacja omawianego (teoretycznie) zagadnienia w JavaBlock – schematy, struktura obiektowa i demonstracja działania programów. Prezentowane schematy stanowią podstawę do realizacji, na zajęciach laboratoryjnych, odpowiadających im programów w C++. Studenci, posługując się zintegrowanym środowiskiem programistycznym, piszą programy w C++ odwołujące się do zagadnień omawianych na wykładzie. Pracując pod nadzorem prowadzącego korzystają z jego doradztwa. Realizacji trudniejszych zagadnień towarzyszy dyskusja przy tablicy. Dodatkowo na tablicy studenci: opisują wybrane algorytmy w postaci listy kroków, schematów blokowych, schematów zwartych NS, obliczają złożoność obliczeniową. Tworząc schematy blokowe posługują się również programem JavaBlock Po zakończeniu kształcenia z przedmiotu Algorytmy i struktury Zaliczenie laboratorium odbywa się na podstawie: obecności, aktywności, prac danych odbywa się egzamin pisemny, który weryfikuje uzyskaną domowych oraz zaliczenia przy komputerze obejmującego wybrane zagadnienia z wiedzę. Na ocenę końcową składają się wynik zaliczenia materiału laboratoryjnego. laboratorium i wynik egzaminu pisemnego. FS1 3ASD TREŚCI KSZTAŁCENIA Wykład Laboratorium Algorytm - sposoby zapisu: 1. Czym jest algorytm? 2. Algorytmy w postaci listy kroków. 3. Pseudokod. 4. Schematy blokowe. 5. Schematy zwarte NS (Nassi-Shneidermana) Ćwiczenia z wykorzystaniem tablicy polegające na zapisie prostych algorytmów w postaci: listy kroków, schematu blokowego, schematu zwartego NS. Struktury danych i algorytmy: 1. przegląd struktur danych. 2. Szybkie prototypowanie - JavaBlock. Ćwiczenia komputerowe z wykorzystaniem JavaBlock. 2 tydzień Tablice. Złożoność obliczeniowa: 1. Tablice w Javie. 2. Tablica uporządkowana w Javie. 3. Wyszukiwanie binarne. 4. Czasowa złożoność obliczeniowa – przypadki: pesymistyczny, optymalny i optymistyczny. 5. Pamięciowa złożoność obliczeniowa. Praktyczna realizacja zagadnień omawianych na wykładzie - programowanie w C++ . Wyznaczanie złożoności obliczeniowej prostych algorytmów. 3 tydzień Proste algorytmy sortowania: 1. Sortowanie bąbelkowe. 2. Sortowanie przez wybór. 3. Sortowanie przez wstawienie. 4. Flaga polska. 5. Flaga francuska. 6. Sortowanie obiektów. Praktyczna realizacja zagadnień omawianych na wykładzie - programowanie w C++ . 4 tydzień Stosy i kolejki: 1. Stos. 2. Klejka. 3. Kolejka cykliczna. 4. Kolejki priorytetowe. 5. Analiza wyrażeń arytmetycznych: sprawdzanie nawiasów, odwrotna notacja polska. Praktyczna realizacja zagadnień omawianych na wykładzie - programowanie w C++ . 5 tydzień Listy powiązane: 1. Połączenia. 2. Prosta lista powiązana. 3. Wyszukiwanie i usuwanie określonych elementów. 4. Listy dwustronne. 5. Wydajność list powiązanych. 6. Abstrakcyjne typy danych. 7. Listy uporządkowane. 8. Sortowanie przez wstawienie do listy uporządkowanej. 9. Listy dwukierunkowe. Praktyczna realizacja zagadnień omawianych na wykładzie - programowanie w C++ . 6 tydzień Rekurencja: 1. Mocne i słabe strony rekurencji. 2. Anagramy. 3. Rekurencyjne wyszukiwanie binarne. 4. Wieże Hanoi. 5. Sortowanie przez scalanie. 6. Eliminacja rekurencji. Praktyczna realizacja zagadnień omawianych na wykładzie - programowanie w C++ . 7 tydzień 1 tydzień Zaawansowane algorytmy sortowania: 1. Sortowanie Shella. 2. Podział danych. 3. Quicksort. Praktyczna realizacja zagadnień omawianych na wykładzie - programowanie w C++ . 8 tydzień Drzewa binarne: 1. Terminologia związana z drzewami. 2. Działanie binarnych drzew wyszukiwań. 3. Wyszukiwanie węzła. 4. Wstawianie węzła. 5. Trawersowanie drzewa. 6. Odnajdywanie wartości minimalnych i maksymalnych. 7. Usuwanie węzła. 8. Efektywność operacji na drzewach binarnych. 9. Przedstawianie drzew w formie tablicy. 10. Kod Huffmana. Praktyczna realizacja zagadnień omawianych na wykładzie - programowanie w C++ . 9 tydzień Sterty: 1. 2. 3. 4. Praktyczna realizacja zagadnień omawianych na wykładzie - programowanie w C++ . 10 tydzień Zrównoważone drzewa binarne: 1. Drzewa AVL. 2. Drzewa czerwono – czarne. Praktyczna realizacja zagadnień omawianych na wykładzie - programowanie w C++ . 11 tydzień Drzewa niebinarne: 1. Drzewa 2-3. 2. Drzewa 2-3-4. 3. Drzewa 2-3-4 a drzewa czerwono-czarne. Praktyczna realizacja zagadnień omawianych na wykładzie - programowanie w C++ . 12tydzień Tablice mieszające (hash table): 1. Algorytmy mieszające – wprowadzenie. 2. Adresowanie otwarte. 3. Łączenie niezależne. 4. Funkcje mieszające. 5. Wydajność. 6. Mieszanie i pamięć zewnętrzna. Praktyczna realizacja zagadnień omawianych na wykładzie - programowanie w C++ . 13 tydzień Grafy: 1. 2. 3. 4. 5. 6. Praktyczna realizacja zagadnień omawianych na wykładzie - programowanie w C++ . 14 tydzień Zaliczenie 15 tydzień Wprowadzenie. Przykład implementacji sterty. Sterta oparta na drzewie. Sortowanie stertowe. Wprowadzenie. Operacje wyszukiwania. Drzewo o najmniejszej liczbie połączeń. Grafy skierowane i sortowanie topologiczne. Połączenia w grafach skierowanych. Grafy ważone. Typy kontenerów biblioteki STL (C++). LITERATURA DODATKOWA ZALECANA LITERATURA LITERATURA Robert Lafore – Sams Teach Yourself Data Structures and Algorithms in 24 Hours, Sams, Indianapolis 1999. Stephen Prata – Szkoła Programowania. Język C++, Wdawnictwo Helion, Gliwice 2006. Paweł Kotowski – Algorytmy + Struktury Danych = Abstrakcyjne Typy Danych, Wydawnictwo BTC, Warszawa 2006. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein – Wprowadzenie do algorytmów, Wydawnictwo Naukowe PWN, Warszawa 2012. Ewa Krok, Zbigniew Stempnakowski – Podstawy algorytmów. Schematy blokowe, Wydawnictwo Difin, Warszawa 2008. Anna Kwiatkowska, Edyta Łukasik – Schematy zwarte NS przykłady i zadania, Wydawnictwo MIKOM, Warszawa 2004. AUTORZY KARTY PRZEDMIOTU Cezary J. Walczyk PODPIS