Algorytmy i struktury danych. Metody numeryczne ECTS (Częśc 1. Algorytmy i struktury danych.) Nazwa w języku angielskim: Algorithms and data structures. dzienne magisterskie Numerical methods. (Part 1. Algorithms and data structures.) Kod przedmiotu Imię i Nazwisko organizującego dr inż. Oleg Maslennikow w c Kurs egzaminacyjny kontynuowany 2 1 15 tygodni zajęć LICZBA GODZIN Kursy poprzedzające Słowa kluczowe Egzamin 4 tygodnie sesji egzaminacyjny ch analiza matematyczna, podstawy programowania algorytmy, programy, struktury danych, sortowanie i przeszukiwanie danych, programowanie strukturalne, optymalizacja algorytmów i programów PROGRAM SZCZEGÓŁOWY CELE KURSU. Opis kursu – cele i procedury ich osiągania: Uzyskanie wiedzy na temat podstawowych struktur danych metod opracowania algorytmów i programów; sposobów optymalizacji algorytmów programów; algorytmów klasycznych; oceny efektywności opracowanych algorytmów programów; podstawowych algorytmów arytmetyki binarnej. Uzyskanie umiejętności pewnego doświadczenia w opracowaniu efektywnych algorytmów i programów. i i i i Cel poznawczy: Uzyskanie wiedzy w zakresie: etapów opracowania algorytmów i programów; sposobów opracowania modeli matematyczno-logicznych postawionych problemów; podstawowych struktur danych i metod opracowania algorytmów i programów; rekurencyjnych algorytmów i struktur danych; sposobów optymalizacji algorytmów i programów; algorytmów klasycznych; podstawowych algorytmów arytmetyki binarnej; oceny efektywności opracowanych algorytmów i programów. Cel kształcący: Kształtowanie u studentów umiejętności samodzielnej pracy projektowo-badawczej w stopniu pozwalającym na przeprowadzenie analizy postawionego problemu i wybór (lub opracowanie) efektywnych sposobów jego rozwiązania. Cel praktyczny: Uzyskanie umiejętności komputerowych. opracowania efektywnych algorytmów i programów Umiejętności wynikowe kursu i ich ewaluacja: Umiejętność trafnego skonstruowania modelu matematyczno-logicznego zadanego problemu, pozwalającego doprowadzić proces jego rozwiązania do rozwiązania problemów znanych, bądź do prostych i efektywnych własnych rozwiązań algorytmicznych i/lub programowych. Wymagania podstawowe (stopnie dostateczne) Wymagania rozszerzone (stopnie dobre) Potrafi opracować procedury programowe realizujące algorytmy klasyczne (np. sortowania i przeszukiwania danych, itd.). Potrafi opracować model matematycznologiczny postawionego problemu i zbadać efektywność algorytmu i/lub programu rozwiązującego ten problem. Potrafi wykonać podstawowe działania na liczbach binarnych (w oparciu o algorytmy arytmetyki binarnej). Wykazuje praktyczną umiejętność trafnego skonstruowania modelu matematycznologicznego zadanego problemu, pozwalającego doprowadzić proces jego rozwiązania do rozwiązania problemów znanych, bądź do prostych i efektywnych własnych rozwiązań algorytmicznych i/lub programowych. Potrafi opracować procedury programowe realizujące algorytmy klasyczne (np. sortowania i przeszukiwania danych, itd.). Potrafi wykonać podstawowe działania na liczbach binarnych (w oparciu o algorytmy arytmetyki binarnej). Wykład 1. (4 godz.) PODSTAWOWE ETAPY OPRACOWANIA ALGORYTMÓW I PROGRAMÓW Definicje i formy przedstawienia algorytmów. Przykłady najprostszych algorytmów klasycznych (odnalezienie monety fałszywej; pojemniki z płynem; algorytm Euklidesa). Schematy blokowe (SB) jako graficzna forma przedstawienia algorytmów. Przykład konstruowania SB prostego algorytmu. Demonstracja programu SBWin32Pro do konstruowania i symulacji SB algorytmów. Etapy konstruowania algorytmów i programów. Opracowanie modelu matematyczno-logicznego postawionego problemu. Przykład: gra w karty na pieniądze. Wykorzystane struktury danych. Analiza sprawności algorytmów. Przykłady: zadania z monetami i pojemnikami. Przykład rozbudowany: problem komiwojażera – opracowanie algorytmu wyczerpującego. Omówienie wykorzystanych struktur danych. Zagadnienia: Wykład 2. (4 godz.) METODY OPRACOWANIA ALGORYTMÓW Zagadnienia: Algorytmy wyczerpujące: zalety i wady. Algorytmy heurystyczne. Udowodnienie poprawności opracowanych algorytmów. Metody opracowania algorytmów grupy „dziel i rządź”. Metoda celów lokalnych (ang. local purposes). Przykład: w/w zadanie z monetami. Metoda wschodzenia i cofania się (ang. hill climbing). Przykłady: problem komiwojażera; posunięcie skoczka po szachownicy. Metoda opracowania od końca (ang. working backward). Przykład: Jeep na pustyni. Analiza złożoności obliczeniowej omówionych algorytmów. Wykład 3. (4 godz.) PODSTAWOWE ALGORYTMY PRZESZUKIWANIA I SORTOWANIA DANYCH algorytmy sortowania i przeszukiwania danych liczbowych: bąbelkowe; przez wybieranie; przez wstawianie; przeszukiwanie liniowe; przeszukiwanie binarne. Przeszukiwanie tekstów. Metody „brute force”, Boyera-Moore’a, „K-M-P”. Analiza złożoności obliczeniowej omówionych algorytmów. Konstruowanie schematów blokowych kilku z wymienionych algorytmów. Zagadnienia: Klasyczne Wykład 4. (4 godz.) PROGRAMOWANIE STRUKTURALNE. OPTYMALIZACJA ALGORYTMÓW I PROGRAMÓW Zasada uściślania krokowego (Dijkstry). Podstawowe struktury blokowe i je wykorzystanie w optymalizacji schematów blokowych algorytmów. Przykłady: zamiana kilku fragmentów schematów blokowych na odpowiednie fragmenty programowe. Sposoby optymalizacji programów, w tym sposoby uwzględniające ich doprowadzenie do postaci zgodnej z zasadami programowania strukturalnego. Wykorzystanie w/w sposobów do optymalizacji kilku algorytmów sortowania i przeszukiwania danych oraz algorytmów kompresji bezstratnej (np. metoda RLE, metoda unikatowej wartości). Zagadnienia: Wykład 5. (5 godz.) REKURENCJA. REKURENCYJNE PODPROGRAMY I STRUKTURY DANYCH Mechanizm wywołania podprogramu i powrotu z podprogramu. Nowe struktury danych: kolejki FIFO i LIFO (stos). Pojęcie rekurencji. Obliczenie wartości funkcji w sposób rekurencyjny. Opracowanie prostych algorytmów i programów rekurencyjnych. Przykłady: ciąg Fibonacciego, Wieże Hanoi. Nowe struktury danych – drzewa. Drzewa binarne. Przykłady zastosowania drzew binarnych: kodowanie Huffmana; sortowanie drzewiaste. Konstruowanie drzewa binarnego i jego obejście. Sortowanie szybkie Hoare’a (QuickSort). Algorytmy rekurencyjne a iteracyjne. Niebezpieczeństwa rekurencji. Zagadnienia: Wykład 6. (2 godz.) SYSTEM BINARNY. PODSTAWOWE KODY BINARNE Zagadnienia: Jednostki informacji. Przeliczanie jednostek. Pozycyjne systemy liczbowe z podstawą N{10,2,16,8}. Algorytmy zakodowania i dekodowania liczb w w/w systemach (całkowitych i rzeczywistych). Podstawowe kody binarne: dwójkowy KD, uzupełnieniowy do dwóch UD, dwójkowo - dziesiętny BCD, z nadmiarem BCD+3, Gray’a. Demonstracja programu Galaxy do opracowania i symulacji algorytmów binarnych (możliwości, obsługa programu, język asembler). Wykład 7. (6 godz.) PODSTAWOWE ALGORYTMY ARYTMETYKI BINARNEJ Zagadnienia: Podstawowe operacje arytmetyczne na liczbach przedstawionych w kodach binarnych (dodawanie algebraiczne, mnożenie, dzielenie, pierwiastkowanie). Metody przyspieszania wykonania operacji arytmetycznych na liczbach dwójkowych. Reprezentacje zmiennoprzecinkowe liczb dwójkowych. Operacje arytmetyczne na liczbach zmiennoprzecinkowych. Dokładność obliczeń i zaokrąglenie wyników. Wykład 8. (1 godz.) CZYNNOŚCI KONTROLNE I ORGANIZACYJNE ZWIĄZANE Z Repetytorium DOPUSZCZENIEM DO ZASADNICZEJ SESJI EGZAMINACYJNEJ PLANY WYNIKOWE ĆWICZEŃ Ćwiczenie 1 (2godz.) OPRACOWANIE SCHEMATÓW BLOKOWYCH ALGORYTMÓW Opis ćwiczenia – cele i procedury ich osiągania: Praktyczne zapoznanie się z programem SBWin32 pro. Konstruowanie, w oparciu o program SBWin32pro, schematy blokowe prostych algorytmów (zadania indywidualne na ocenę). Umiejętności wynikowe i ich ewaluacja: Potrafi opracować i przetestować schematy blokowe prostych algorytmów. Wymagania podstawowe (stopnie dostateczne) Wymagania rozszerzone (stopnie dobre) Potrafi opracować i przetestować schematy blokowe prostych algorytmów (np. algorytm Euklidesa, obliczenie elementów ciągu Fibonacciego; odnalezienie, w tablicy jednowymiarowej, maksymalnej liczby i jej pozycji; itd.) Potrafi opracować i przetestować schematy blokowe prostych algorytmów (np. algorytm Euklidesa, obliczenie elementów ciągu Fibonacciego; sortowanie bąbelkowe; odnalezienie, w tablicy jednowymiarowej, maksymalnej liczby i jej pozycji; itd.) Ćwiczenie 2 (3 godz.) OPRACOWANIE I OPTYMALIZACJA SCHEMATÓW BLOKOWYCH WYBRANYCH ALGORYTMÓW SORTOWANIA, PRZESZUKIWANIA I KOMPRESJI DANYCH Opis ćwiczenia – cele i procedury ich osiągania: Praktyczne zapoznanie się ze sposobami optymalizacji algorytmów. Umiejętności wynikowe i ich ewaluacja: Konstruuje poprawnie schematy blokowe klasycznych algorytmów sortowania, przeszukiwania i kompresji bezstratnej danych. Wymagania podstawowe (stopnie dostateczne): Potrafi Wymagania rozszerzone (stopnie dobre:) Potrafi opracować i opracować schematy blokowe algorytmów: zoptymalizować schematy blokowe algorytmów: sortowania bąbelkowego; sortowania przez wybieranie; przeszukiwania binarnego; przeszukiwania tekstów metodą brute-force; dekodera RLE. Potrafi przetestować opracowany schemat blokowy i przeanalizować jego efektywność. sortowania przez wstawianie; przeszukiwania binarnego; przeszukiwania tekstów metodą bruteforce i Bouera-Moore’a; kodera i dekodera RLE. Potrafi przetestować opracowany schemat blokowy i przeanalizować jego efektywność. Ćwiczenie 3 (3godz.) OPTYMALIZACJA PROGRAMÓW Opis ćwiczenia – cele i procedury ich osiągania: Praktyczne zapoznanie się ze sposobami optymalizacji programów, w tym sposobami uwzględniającymi doprowadzenie programu do postaci zgodnej z zasadami programowania strukturalnego. Zadanie indywidualne na ocenę: zamiana fragmentu schematu blokowego na odpowiedni fragment programu. Wykorzystanie w/w sposobów do opracowania i optymalizacji algorytmów sortowania i przeszukiwania danych oraz algorytmów kompresji bezstratnej. Umiejętności wynikowe i ich ewaluacja: Potrafi opracować i przetestować program odpowiadający kryteriom programowania strukturalnego. Wymagania podstawowe (stopnie dostateczne): Potrafi zamienić Wymagania rozszerzone (stopnie dobre): Potrafi zamienić zadany fragment schematu blokowego na zadany fragment schematu blokowego na odpowiedni fragment programu. Potrafi odpowiedni fragment programu. Potrafi i zoptymalizować programy opracować programy (odpowiadające opracować kryteriom programowania strukturalnego) realizujące algorytmy: sortowania bąbelkowego; realizujące algorytmy: sortowania bąbelkowego; sortowania przez wybieranie; przeszukiwania binarnego; przeszukiwania tekstów metodą bruteforce; dekodera RLE. Potrafi przetestować opracowane programy i przeanalizować ich efektywność. Ćwiczenie 4 (2godz.) Opis ćwiczenia – cele i procedury ich osiągania: sortowania przez wybieranie; przeszukiwania binarnego; przeszukiwania tekstów metodą bruteforce i i Bouera-Moore’a; kodera i dekodera RLE. Potrafi przetestować opracowane programy i przeanalizować ich efektywność. REKURENCYJNE ALGORYTMY I PODPROGRAMY Opracowanie algorytmów i podprogramów rekurencyjnych. Umiejętność opracowania i wykorzystania (w programach) podprogramów rekurencyjnych. Umiejętności wynikowe i ich ewaluacja: podstawowe (stopnie dostateczne) Potrafi wyprowadzić wyrażenie rekurencyjne dla obliczenia n-tego elementu zadanego ciągu. Potrafi opracować podprogram rekurencyjny realizujący w/w wyrażenie rekurencyjne. Potrafi przetestować opracowany podprogram i przeanalizować jego efektywność. Wymagania Potrafi wyprowadzić wyrażenie rekurencyjne dla obliczenia n-tego elementu zadanego ciągu. Potrafi opracować podprogram rekurencyjny realizujący w/w wyrażenie rekurencyjne. W oparciu o podprogramy rekurencyjne, potrafi opracować program operujący na drzewie binarnym (dodanie i usunięcie węzła, poszukiwanie wzorca). Potrafi przetestować opracowane programy i przeanalizować ich efektywność. Wymagania rozszerzone (stopnie dobre) Ćwiczenie 5 (4godz.) PODSTAWY ARYTMETYKI BINARNEJ Praktyczne zapoznanie się z algorytmami zakodowania i dekodowania liczb w kodach dwójkowym, szesnastkowym, uzupełnieniowym do dwóch, BCD, BCD+3, Gray’a. Praktyczne zapoznanie się z algorytmami dodawania, mnożenia, dzielenia i pierwiastkowania liczb w kodach dwójkowym i uzupełnieniowym do dwóch. Zapoznanie się praktyczne z programem Galaxy. Opis ćwiczenia – cele i procedury ich osiągania: Umiejętności wynikowe i ich ewaluacja:. umiejętność wykonania podstawowych operacji arytmetycznych na liczbach przedstawionych w w/w kodach. Potrafi otrzymać Wymagania rozszerzone (stopnie dobre): Potrafi otrzymać prawidłowy kod zadanej liczby w dowolnym z prawidłowy kod zadanej liczby w dowolnym z wymienionych systemów. Wykonuje prawidłowo wymienionych systemów. Wykonuje prawidłowo Wymagania podstawowe (stopnie dostateczne): podstawowe operacje arytmetyczne na liczbach przedstawionych w w/w kodach. Potrafi opracować i przetestować schematy blokowe operacji dodawania i mnożenia liczb binarnych w środowisku SBWin32pro. Ćwiczenie 7 (1godz.) podstawowe operacje arytmetyczne na liczbach przedstawionych w w/w kodach. Potrafi opracować i przetestować schematy blokowe operacji dodawania, mnożenia, dzielenia i pierwiastkowania liczb binarnych w środowisku SBWin32pro. Potrafi opracować i przetestować programy asemblerowe realizujące w/w operacje na liczbach binarnych w środowisku Galaxy. CZYNNOŚCI KONTROLNE I ORGANIZACYJNE ZWIĄZANE Z DOPUSZCZENIEM DO ZASADNICZEJ SESJI EGZAMINACYJNEJ OPIS RYGORÓW POŚREDNICH Kolokwium I. Opis kolokwium : Zadania indywidualne na ocenę. Lista przykładowych zadań: 1) Opracować algorytm i odpowiedni fragment programu formujący trasę komiwojażera (wektor TRASA[n+1]) na podstawie macierzy kosztów A(n,n) zgodnie z metodą wschodzenia i cofania się. 2) Opracować algorytm i odpowiedni fragment programu sprawdzający poprawność wygenerowanej trasy komiwojażera (przedstawionej w postaci wektora TRASA[n+1]) i obliczający jej koszt na podstawie macierzy kosztów A(n,n). 3) Opracować fragment programu realizującego metodę sortowania przez wybieranie jednowymiarowej tablicy X[n] liczb całkowitych. Wymogi dodatkowe: poszukiwanie równocześnie elementów MIN i MAX; kierunek przeszukiwania - od końca tablicy, X[i-1] X[i].4) Opracować fragment programu odnajdującego liczbę wystąpień poszczególnych znaków w komunikacie przedstawionym w postaci tablicy jednowymiarowej X[n]. 5) Opracować kod Huffmana dla alfabetu, w którym prawdopodobieństwo wystąpienia poszczególnych znaków przedstawiono następującym szeregiem: 1 1 1 1 1 4 5 6 7 8 Sposób oceniania: Ocena zależy od prawidłowości wykonania zadania rachunkowego; od prawidłowości i efektywności opracowanego algorytmu lub fragmentu programu. podstawowe (stopnie dostateczne) Zadanie Wymagania rozszerzone (stopnie dobre) Zadanie rachunkowe rachunkowe wykonano z drobnymi usterkami. wykonano bez usterek. Opracowano prawidłowy i Opracowano prawidłowy algorytm i program. efektywny algorytm. Opracowano fragment programu zgodny z zasadą programowania strukturalnego. Wymagania WARUNKI DOPUSZCZENIA DO SESJI EGZAMINACYJNEJ Opis ogólny warunków dopuszczenia : Zaliczone ćwiczenia i kolokwium podstawowe (stopnie dostateczne) Ćwiczenia i Wymagania rozszerzone (stopnie dobre) Ćwiczenia i kolokwium kolokwium zaliczono na stopień „dostateczny” zaliczono na stopnie „dobry” lub „bardzo dobry” Wymagania OPIS RYGORU ZASADNICZEGO. (EGZAMIN) Opis ogólny rygoru zasadniczego: Sprawdzenie wiedzy studenta na podstawie 3 pytań teoretycznych dotyczących zagadnień omawianych na wykładzie. Każde pytanie oceniane jest osobno. Wymagania podstawowe (stopnie dostateczne) Ocena średnia z Wymagania rozszerzone (stopnie dobre) Ocena średnia z odpowiedzi na pytania wynosi (w zaokrągleniu) 3 odpowiedzi na pytania wynosi (w zaokrągleniu) lub 3.5. 4, 4.5 lub 5. WYKAZ ŹRÓDEŁ (PODRĘCZNIKÓW I SKRYPTÓW) 1. P. Wróblewski. Algorytmy, struktury danych i techniki programowania. Helion, 1997. 2. N. Wirth. Algorytmy + struktury danych = programy. WNT, 2000, s.384. 3. D. Harel. Rzecz o istocie informatyki. Algorytmika. WNT, 2001r 4. J. Bentley. Perełki oprogramowania. WNT, 2001. 5. D.E. Knuth. Sztuka programowania. Tomy 1,2,3, WNT, 2001. 6. L. Banachowski, K. Diks, W. Rytter. „Algorytmy i struktury danych”. WNT 1996. 7. S. Gudman, S. Hedetniemi. Introduction to the design and analysis of algorithms. McGraw-Hill Book Company, New York, 1977. 8. C. Meinel, T. Theobald. Algorithms and data structures in VLSI design. SpringerVerlag, 1998. 9. E. Dijkstra, W. Feijen. A method of programming. Addison-Wesley, 1989. 10. Maslennikow O., Kanewski J., Gretkowski D., Sołtan P. Logika i arytmetyka komputerów. Ćwiczenia laboratoryjne. Wydawnictwo Uczelniane Politechniki Koszalińskiej, Koszalin, 2000. 11. I. Flores. Arytmetyka maszyn cyfrowych. WNT, Warszawa.