Algorytmy i Złożoność
I4 - środa, 09.02.2011, 9:30
Wszyscy - 23.02.2011, 9:30
Wykłady: 30
Ćwiczenia: 15
Laboratoria: 15
Problem, algorytm, złożoność obliczeniowa, czasowa i pamięciowa, problem decyzyjny, problem optymalizacyjny;
Projektowanie efektywnych algorytmów;
Sortowanie;
Wyszukiwanie, selekcja;
Mnożenie macierzy i operacje pokrewne;
Algorytmy w grafach;
Arytmetyka na liczbach całkowitych;
Algorytmy dopasowania wzorców;
Hierarchia złożoności problemów;
Nierozstrzygalność;
Aho Hopcroft Ullman - "Projektowanie i analiza algorytmów", wyd. Helion, Gliwice 2003
Balinska - "Projektowanie algorytmów i struktury danych", wyd. PP, Poznań 2003
Banachowski diks rytter algorytmy I strukturyy danych, wnt, wawa 2006
Bilski chmiel stoklosa zbior zaadan zze złozonosci obliczeniowej algorytmow, wyd pp, pzn 1992
Knuth sztuka programowania, wnt, wawa, 2002
nauka o przetwarzaniu, gromadzeniu i przesyłaniu informacji za pomocą środków technicznych (komputerów)
dowolne wiadomości przetwarzane przez komputer, zapisane w pewnym alfabecie
skończony zbiór znaków
skończony ciąg znaków w pewnym alfabecie
A* - Zbiór wszystkich słów w alfabecie A
A = {0, 1}
A* = {e1, 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, ...}
Podzbiór L zbioru A
Język (formalny)
L c A*
(L zwiera się w A*); to miał być znaczek c z podkreśleniem (symbol inkluzji)
słowo określone za pomocą znaków z alfabetu binarnego
{0, 1} - zbiór wszystkich słów binarnych
Jeśli słowa binarne maja ustalona długość n to mówimy o słowie /znaku/ n-bitowym
reguła przekształcania zbioru znaków n inny zbiór znaków (funkcja matematyczna)
zbiór obrazów otrzymany za pomocą tego przekształcenia
procedura stosowana (sposób postępowania prowadzący) do rozwiązania problemu
pytanie ogólne, na które należy udzielić odpowiedzi, zależne od ilości parametrów
Problem jest zadany, gdy przedstawimy:
ogólny opis jego parametrów,
zdanie stwierdzające, czym powinna charakteryzować się odpowiedź, czyli rozwiązanie
Przypadek szczególny problemu uzyskuje się wówczas, gdy ustali się wartości wszystkich parametrów problemu
W celu zebrania zamówień na towar komiwojażer musi odwiedzić r miast
Odległości między miastami są znane
W jakiej kolejności powinien odwiedzać miasta, aby w każdym z nich być dokładnie jeden raz i wrócić do miasta, z którego rozpoczął podróż, przebywszy najmniejszą liczbę kilometrów?
M = {m1, m2, ..., mr} - skończony zbiór miast
D= {d12, d13, ..., d1r, d23, d24, ..., d2r, ..., d(r-1)r} - zbiór liczb określających odległości między miastami, przy czym dij oznacza odległość pomiędzy mi oraz mj
uporządkowana r-tka miast (mf(1), mf(2), ..., mf(r)), taka, że suma odległości
$$\sum_{i = 1}^{r - 1}{d_{f\left( i \right)*\ f(i + 1)} + \ d_{f\left( r \right)*\ f(1)}}$$
jest najmniejsza, przy czym f jest funkcją porządkującą miasta
Przypadek szczególny:
M = {m1, m2, m3, m4},
D = {594, 303, 343, 389, 320, 303}
Rozwiązanie: (m3, m2, m4, m1),
Przebyta odległość: 1355 km
Czy w grafie istnieje ścieżka przechodząca przez wszystkie krawędzie jeszcze jeden raz?
zagadka mostów na Pregole
TU BYŁ OBRAZEK
Przez wszystkie krawędzie grafu można przejść w sposób ciągły, przechodząc przy tym przez każdą krawędź dokładnie jeden raz <=> graf jest spójny i nie ma wierzchołków o nieparzystym stopniu, albo ma dokładnie dwa wierzchołki o stopniu nieparzystym
Przez wszystkie krawędzie można przejść w sposób ciągły wracając do wierzchołka wyjściowego, przechodząc przy tym przez każdą krawędź dokładnie jeden raz <=> graf jest spójny i nie ma wierzchołków o stopniu nieparzystym
Liczba krawędzi wierzchołka
Każdy problem optymalizacyjny można zredukować do problemu decyzyjnego
pytanie ogólne, na które należy dać odpowiedź "tak" lub "nie"
Dπ - zbiór wszystkich przypadków
Yπ - zbiór przypadków, dla których odpowiedź brzmi "tak"
skończony ciąg dobrze zdefiniowanych operacji, który:
przekształca wejściowy ciąg danych w ciąg wyjściowy,
zatrzymuje się w skończonym czasie
Niealgorytmiczne (nierozstrzygalne) - takie, dla których rozwiązujący je algorytm nie istnieje (wymagany jest dowód); nie może być rozwiązany w skończonym czasie;
Algorytmiczne.
Czy istnieje program komputerowy3 orzekający, że każdy inny program zatrzyma się
Problemy dla których można napisać program poprawny dla każdej danej wejściowej, pod warunkiem, że:
pozwolimy komputerowi pracować dostatecznie długo,
będzie wyposażony w tak dużo pamięci, jak potrzebuje.
Zakładamy, że z każdym problemem jest związane określone kodowanie:
kod: {I: I ∈Dπ} →A*
Rozmiar wejścia (długość) przypadku I problemu π:
n = |kod(I)|
Dla przypadku komiwojażera:
A= {m, (, ), /, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
kod(I) = m(1)/m(2)/m(3)/m(4)//594/303/343/389/320/303
n = |kod(I)| = 44
Inne rozmiary problemów:
liczba wierzchołków grafu,
liczba krawędzi grafu,
stopień macierzy kwadratowej,
itd.
problemy łatwe obliczeniowe,
problemy trudne obliczeniowo
Problem generowania wszystkich ciągów binarnych o długości n
n = 3
n = 128
dec4 | bin5 |
---|---|
0 | 000 |
1 | 001 |
2 | 010 |
3 | 011 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
Liczba wszystkich ciągów o długości 128:
2128
Jeśli do wytworzenia jednego ciągu potrzeba 1 µs6, to wygenerowanie wszystkich ciągów:
2128 * 10-6s ≈ 1.078 * 1025 lat
!! Wiek Ziemi: 3.6 * 109 lat
Dla n = 128 zadanie jest trudne
<< TUTAJ BYŁO PEŁNO CYFEREK I NIE PRZEPISAŁEM
Problem łatwy: mnożenie liczb
np. 387x523=202401
Problem trudny: rozkład liczby złożonej
np. Liczba 155-cyfrowa (512-bitowa; maksymalnie może to być 768 bitów)