Wykład: Krzysztof Loryś
|
Ćwiczenia: Przemka Kanarek, Paweł Rzechonek, Tibor Różański,
Paweł Zalewski, Grażyna Zwoźniak
Repetytorium: Paweł ZalewskiPracownia: Piotr Wnuk-Lipiński
|
Ćwiczenia
· Zasady
oceniania
· Aktualny ranking
(administrowany przez P.Wnuk-Lipińskiego)
|
Zadania domowe
|
Spis treści wykładu
·
Wykład 1
(16.02): Podstawowe pojęcia: problemy,
algorytmy, programy, złożoność. Algorytmy: mnożenie
„po rosyjsku”, szybkie potęgowanie, szybkie obliczanie liczb Fibonacciego. ·
Wykład 2
(22.02): Algorytmy sortowania select i
insert, maszyna RAM jako model obliczeń; notacja
asymptotyczna. (Notatka nr 1.)
Algorytmy
zachłanne. Problem wydawania reszty,
algorytmy znajdowania minimalnego drzewa rozpinającego: algorytm Prima,
algorytm Kruskala, algorytm Sollina. ·
Wykład 3
(23.02): Algorytmy
zachłanne cd.: szeregowanie zadań, szeregowanie zadań z deadline’ami. (Notatka nr 2.) · Wykłady 4 i 5 (1-2.03): Metoda Dziel i Zwyciężaj. Algorytmy sortowania: mergesort i quicksort. Algorytm mnożenia długich liczb: podział na 2 części; uogólnienie na większą liczbę części. Jednoczesne znajdowane maksimum i minimum. (Notatka nr 3.) Konstrukcja sieci permutacyjnych (sieci Beneša-Waksmana). Znajdowanie pary najbliżej położonych punktów. (Notatka nr 4.) ·
Wykład 6 i
7 (8-9.03): Programowanie dynamiczne. Obliczanie współczynnika
dwumianowego. „Stokrotki”:-). Najdłuższy wspólny podciąg. (Notatka nr 5.)
Optymalna kolejność mnożenia macierzy. Przynależność słowa do języka
bezkontekstowego. Drzewa rozpinające drabin. (Notatka nr 6.) ·
Wykład 8 (15.03): Dolne granice. Drzewa decyzyjne: dolna granica na liczbę
porównań algorytmów sortujących (złożoność najgorszego i średniego przypadku).
Gra adwersarza z algorytmem: dolna granica w modelu drzew decyzyjnych dla
problemu jednoczesnego znajdowania minimum i maksimum. ·
Wykład 9 (16.03): Dolne granice (cd).
Redukcje w dowodzeniu dolnych granic: dolna granica dla problemu znajdowania otoczki
wypukłej. Liniowe drzewa decyzyjne: dolna granica dla problemu „Element
Uniqueness”. Redukcje przestrzeni rozwiązań. Definicja algebraicznych drzew
decyzyjnych. Analiza średniego przypadku: insertsort. ·
Wykład 10 (22.03): Quicksort: metody
wyboru pivota (deterministyczna, losowa, mediana z małej próbki); analiza
oczekiwanego czasu działania przy losowym pivocie; usprawnienia Quicksorta
(trójpodział, eliminacja rekursji, „quicksort w miejscu”. ·
Wykład 11 (23.03): Sortowanie: sortowanie prze zliczanie, sortowanie kubełkowe,
sortowanie leksykograficzne ciągów jednakowej długości, sortowanie
leksykograficzne ciągów dowolnej długości. ·
Wykład 12 (30.03): Przykład
zastosowania sortowania leksykograficznego: izomorfizm drzew.
Selekcja. Przypadki szczególne: znajdowanie maksimum, znajdowanie drugiego co
do wielkości elementu. Algorytm Hoare’a. Algorytm magicznych piątek. Algorytm
oparty na próbkowaniu. (Notatka nr 10.) ·
Wykład 13 (5.04): Kopiec. Definicja.
Implementacja tablicowa. Realizacja operacji kopcowych. Zastosowania:
heapsort, kolejka priorytetowa. Kopiec minmax – struktura
implementująca podwójną kolejkę. (Notatka nr 11.) ·
Wykład 14 (6.04): Kopiec dwumianowy (wersja eager). Zastosowanie: złączalne kolejki
priorytetowe. ·
Wykład 15 (12.04): Koszt zamortyzowany. Metoda kosztu sumarycznego. Metoda księgowania.
Przykład:
licznik w tablicy. Kopiec dwumianowy (wersja lazy). ·
Wykład 16 (13.04): Drzewa
zbalansowane. Drzewa AVL (definicja, ograniczenie na wysokość drzew, rotacje,
implementacja operacji słownikowych).
B-drzewa (definicja, liczba operacji i/o jako miara złożoności,
realizacja operacji słownikowych). ·
Wykład 17 (19.04): Drzewa
zbalansowane. Drzewa 1-2-3. Drzewa czerwono-czarne (definicja, rotacje,
implementacja operacji słownikowych) ·
Wykład 18 i 19
(20/26.04): Hashowanie. Podstawy teoretyczne (schemat
urnowy). Przykłady funkcji hashujących. Kolizje. Pamiętanie elementów
kolidujących (nawlekanie, adresowanie otwarte). Usuwanie kolizji (metoda
liniowa, metoda kwadratowa, podwójne hashowanie). Oczekiwana liczba prób przy
poszukiwaniu elementu. Uniwersalne rodziny funkcji hashujących. ·
Wykład 20 (27.04): Słowniki statyczne. Optymalne drzewa BST. Struktura oparta na
dwupoziomowym hashowaniu. ·
Wykład 21 (4.05): Kopce Fibonacciego. Zastosowanie: Algorytm Dijkstry. Struktura kopca. Kaskadowe odcinanie
poddrzew. Analiza zamortyzowana ciągu operacji kopcowych. ·
Wykład
22 (10.05):
Union-Find. Metoda naiwna (tablica charakterystyczna zbioru) i
jej modyfikacje (listy elementów, zbalansowane wykonywanie union). Struktura
drzewiasta (zbalansowane wykonywanie union+skracanie ścieżek; analiza
zamortyzowana) ·
Wykład 23 (11.05): Struktury samoorganizujące
się. Idea.
Heurystyki dla list samoorganizujących się. Drzewa rozchylane (splay trees).
Operacja splay. Koszt zamortyzowany. ·
Wykład 24 (17.05): Mnożenie macierzy. Metoda
Strassena. Mnożenie macierzy logicznych. Metoda czterech Rosjan. ·
Wykład 25 (18.05): FFT. Idea. Własności n-tych pierwiastków z jedności.
Zastosowanie do mnożenia macierzy. ·
Wykład 26 i 27 (24/25.05): Wyszukiwanie wzorców. Algorytm
naiwny. Wyszukiwanie wzorców automatem skończonym. Algorytm Karpa-Rabina. Algorytm KMP (Knutha-Morrisa-Pratta). Algorytm Boyera-Moore’a. ·
Wykład 28 (31.05): Obliczenia równoległe. Model obliczeń – PRAM. Typy PRAM (EREW, CREW, CRCW: Common, Arbitrary,
Priority, Robust). Znajdowanie
maksimum w tablicy (algorytmy typu EREW i Common). Obliczenia prefiksowe.
Klasa NC. Algorytmy NC dla problemów dodawania i mnożenia liczb. ·
Wykład 29 (7.06): Sieci komparatorów. Kryteria efektywności. Zasada 0-1-kowa. Sortująca
sieć bitoniczna Batchera. ·
Wykład 30 (8.06): Algorytmy aproksymacyjne. Współczynnik aproksymacji.
Problem znajdowania pokrycia wierzchołkowego grafu. Problem pokrywania zbioru
(algorytm kombinatoryczny, redukcja do programowania całkowitoliczbowego). |
Listy
zadań
·
Lista nr 1
·
Lista nr 2
·
Lista nr 3
·
Lista nr 4
·
Lista nr 5
·
Lista nr 6
·
Zadania z
kolokwium połówkowego
·
Lista nr 7
·
Lista nr 8
·
Lista nr 9
|
|
|