Algorytmy i struktury danych - kik

advertisement
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.
Download