d - kik

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