Algorytmika Program szczegółowy wykładów Definicje algorytmów i programów (przykład z monetami i/lub pojemnikami – rożne wersji algorytmów). 2. Pojęcie i podstawowe etapy opracowania algorytmów i programów: - analiza problemu; - opracowanie matematyczno-logicznego modelu postawionego problemu; (przykład: gra w karty) - opracowanie algorytmu rozwiązania problemu; - udowodnienie poprawności otrzymanego algorytmu; - analiza sprawności algorytmu (przykład z monetami i/lub pojemnikami – rożne wersji algorytmów); - realizacja algorytmu w postaci programu; - testowanie programu; - opracowanie dokumentacji. przykład problem komiwojażera – algorytm wyczerpujący 3. Podstawowe metody opracowania algorytmów: - szczegółowych celów (przykład: monety), wschodzenia i cofania się (przykład: problem komiwojażera – algorytm heurystyczny), opracowania od końca (przykład – generowanie kombinacji 1234, Jeep na pustyni); - gałęzi i krawędzi (branch and bound); 4. Rekurencja, podprogramy rekurencyjne (przykłady: n!, ciąg Fibbonacci’ego, wieże Hanoi). Niebezpieczeństwa rekurencji. 5. Programowanie strukturalne (z góry w dół) (przykłady zamiany fragmentów schematów blokowych odpowiednimi fragmentami programu). 6. Podstawowe struktury danych: - tablice, listy; kolejki, stos; - grafy i drzewa binarne (BDD -binary decision diagram). 7. Algorytmy klasyczne: - sortowania (bąbelkowe, przez wstawianie; przez wybieranie, równoległe); - przeszukiwania (liniowe, binarne, kluczowe, K-M-P, Bouera i Moore’a); - rekurencyjne (sortowanie szybkie Hoare’a; wieże Hanoi i in.); - kodowania i kompresji danych (Huffmana, kodowania długości serii RLE, unikatowej wartości, unikatowych bitów i in.). 8. Konstruowanie grafów algorytmów. 9. Przykłady innych klasycznych algorytmów: posunięcie skoczka po szachownice, Jeep w pustyni, pakowanie plecaka, problem komiwojażera (traveling salesman problem), zamek dla rowera, złote monety, pojemniki z płynem, gra w karty i in. 1. Literatura. 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. S. Gudman, S. Hedetniemi. Introduction to the design and analysis of algorithms. McGraw-Hill Book Company, New York, 1977. 6. C. Meinel, T. Theobald. Algorithms and data structures in VLSI design. Springer-Verlag, 1998. 7. E. Dijkstra, W. Feijen. A method of programming. Addison-Wesley, 1989. 1 8. D.E. Knuth. The art of computer programming. Vol.1 (Fundamental algorithms, 1973), Vol.2 (Seminumerical Algorithms, 1969), Vol.3 (Sorting and searching, 1975) , Addison-Wesley. Zadania przykładowe z przedmiotu „Algorytmika” Zadanie 1. Opracować algorytm (i odpowiedni program) wykonujący operację mnożenia trójkątnej macierzy pasmowej przez wektor i odwołujący się tylko do jej niezerowych elementów. Struktura macierzy może być wybrana z poniższych rysunków: 2. 4. A(N,N) * b(N) = c(N) A(N,N) * b(N) (L-szerokość pasma) * * * * * * x * * * * * * * * * * * * * * * = c(N) (L-szerokość pasma) = * * * * * * L * * * * * * x * * * * * * * * * * * * * * * = * * * * * * L Porównać złożoność obliczeniową opracowanego algorytmu ze złożonością zwykłego algorytmu mnożenia macierzy przez wektor. Zadanie 2. Porównać złożoność obliczeniową algorytmów sortowania bąbelkowego i sortowania przez wybieranie. Zadanie 3. Opracować i porównać fragmenty programów realizujące jedną iterację metody iteracji prostej i jedną iterację metody Gaussa-Seidela. Zadanie 4. Opracować w Pascalu lub C++ podprogram rekurencyjny obliczający wartość elementu numer n funkcji y=F(x) zadanej w postaci szeregu: x x2 x3 x4 x 0. y 1 e 1! 2! 3! 4! n=1, n=3, n=5, ...(gdzie n jest parametrem podprogramu) Zadanie 5. Korzystając z instrukcji While i/lub Do...while (w Pascalu odpowiednio While...do... i Repeat...until), zamienić fragment przedstawionego poniżej schematu blokowego odpowiednim fragmentem programu w C++ lub w Pascalu. 2 21. 23. S1 W1 W1 W2 S2 W2 S2 S1 S3 W3 W3 S3 Zadanie 6. Opracować w Pascalu lub C++ fragment programu realizujący właściwą metodę sortowania jednowymiarowej tablicy X(N) liczb całkowitych: Nr wariantu 4 Metoda sortowania Warunek sortowania Uwagi dodatkowe Sortowanie bąbelkowe X[i-1] X[i] 7 Sortowanie przez wybieranie X[i-1] X[i] Kierunek sortowania: Od końca tablicy Wybór elementu: Minimalnego Zadanie 7. Opracować kod Huffmana dla alfabetu prawdopodobieństwo wystąpienia poszczególnych znaków którego przedstawiono następującym szeregiem (wybierz odpowiedni wariant zadania): 2. 1 4 1 5 1 6 1 7 1 8 3