Wykład: Krzysztof
Loryś
|
Ćwiczenia: Przemka Kanarek, Krzysztof Loryś, Paweł
Rzechonek, ,
Grzegorz Stachowiak, Paweł Zalewski,
Repetytorium: Grażyna
Zwoźniak
Pracownia: Marcin
Bieńkowski
|
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. Algorytmy sortowania select i insert, maszyna RAM jako model obliczeń; notacja asymptotyczna. (Notatka nr 1.) ·
Wykład 2 (21.02): Algorytmy zachłanne. Problem wydawania reszty, algorytmy znajdowania minimalnego drzewa
rozpinającego: algorytm Prima, algorytm Kruskala, algorytm Sollina. szeregowanie zadań, szeregowanie zadań z deadline’ami. (Notatka nr 2.) ·
Wykład 3 (23.02): 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. (Notatka nr 3.) ·
Wykład 4 (28.02): Jednoczesne znajdowane maksimum i minimum. Konstrukcja sieci
permutacyjnych (sieci Beneša-Waksmana).
Znajdowanie pary najbliżej położonych punktów. (Notatka nr 4.) ·
Wykład 5 (2.03): Programowanie dynamiczne. Obliczanie
współczynnika dwumianowego. „Stokrotki”:-). Najdłuższy wspólny podciąg. (Notatka nr 5.) ·
Wykład 6 (7.03): Optymalna
kolejność mnożenia macierzy. Przynależność słowa do języka
bezkontekstowego. Drzewa rozpinające drabin. (Notatka nr 6.) ·
Wykład
7 (9.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
8 (14.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. ·
Wykład
9 (16.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
10 (21.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. ·
Wykład
11 (23.03): Selekcja: algorytm
oparty na próbkowaniu. Kopiec.
Definicja. Implementacja tablicowa. Realizacja
operacji kopcowych. Zastosowania: heapsort, kolejka priorytetowa. Kopiec minmax – struktura implementująca podwójną kolejkę. ·
Wykład
12 (28.03): Kopiec
dwumianowy (wersja eager). Zastosowanie:
złączalne kolejki priorytetowe. Koszt zamortyzowany. Metoda
księgowania. Przykład: licznik w tablicy. ·
Wykład
13 (30.03): Kopiec dwumianowy (wersja lazy). Analiza
średniego kosztu na przykładzie insertsort (zastosowanie liniowości wartości
oczekiwanej) ·
Wykład
14 (4.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
15 (6.04): Drzewa zbalansowane.. Drzewa
czerwono-czarne (definicja, rotacje,
implementacja operacji słownikowych, związek z 2-3 drzewami) ·
Wykład
16 i 17 (11.04 i 13.04) Problem Union-Find. ·
Wykład
18 (20.04): 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
19 (25.04): Sortowane zewnętrzne. ·
Wykład
20 i 21 (27.04 i 4.05):
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
22 (9.05): Słowniki statyczne. Struktura oparta na dwupoziomowym hashowaniu. ·
Wykład
23 (16.05): Kopce Fibonacciego. Zastosowanie: Algorytm Dijkstry. Struktura kopca. Kaskadowe odcinanie
poddrzew. Analiza zamortyzowana ciągu operacji kopcowych. ·
Wykład
24 (18.05):Struktury
samoorganizujące się. Idea. Heurystyki dla list
samoorganizujących się. Drzewa rozchylane (splay trees). Operacja splay.
Koszt zamortyzowany. ·
Wykład
25 (23.05): Mnożenie
macierzy. Metoda Strassena. Mnożenie macierzy logicznych. Metoda czterech Rosjan. ·
Wykład
26 (25.05): FFT. Idea. Własności n-tych
pierwiastków z jedności. Zastosowanie do mnożenia macierzy. ·
Wykład
27 i 28 (30.05/1.06): Wyszukiwanie wzorców. Algorytm naiwny. Wyszukiwanie wzorców automatem
skończonym. Algorytm Karpa-Rabina. Algorytm KMP
(Knutha-Morrisa-Pratta). Algorytm
Boyera-Moore’a. Algorytm Shift-And. Algorytm
Bakera. Algorytm Karpa-Millera-Rosenberga. |
Listy zadań
·
Lista nr 1
·
Lista nr 2
·
Lista nr 3
·
Lista nr 4
·
Lista nr 5
·
Lista nr 6
·
Lista nr 7
·
Lista nr 8
·
Lista nr 9 (w trakcie konstrukcji)
|
|