Egzamin poprawkowy 2009/10#
Zadanie 1#
Dane są, dodatnia liczba całkowita \(n\) oraz tablica liczb całkowitych \(a[1..n]\). Dla każdego podzbioru \(S\) zbioru indeksów \(\{1,2, \cdots, n\}\) wagą \(w(S)\) nazywamy sumę elementów tablicy \(a\) o indeksach z tego zbioru. Przyjmujemy, ze wagą zbioru pustego jest \(0\). Zbiór indeksów nazwiemy niezależnym, jeśli nie zawiera dwóch kolejnych indeksów.
Zaproponuj algorytm, który obliczy wagę najcięższego zbioru niezależnego \(S\).
Na tablicy \(a\) wykonujemy operacje:
\(NewVal(i,x) :: a[i] := x\); \(1 \leq i \leq n\), \(x\) - liczba całkowita,
\(MaxWeight ::\) podaje wagę najcięższego zbioru niezależnego \(S\).
Zaproponuj strukturę danych, która umożliwi efektywne wykonywanie operacji \(NewVal\) i \(MaxWeight\).
Zadanie 2#
Dana jest \(n\)-węzłowa kolejka dwumianowa \(Q\) oraz \(k\) nowych kluczy. Zaproponuj algorytm, który w czasie \(O(k + \log n)\) rozszerzy \(Q\) o nowe klucze.
Zadanie 3#
Zaproponuj algorytm, który dla danego tekstu \(T\) i dodatniej liczby całkowitej \(k\) wyznaczy liczbę niepustych podsłów pojawiający się w \(T\) co najmniej \(k\) razy.
Zadanie 4#
Niech \(n\) będzie dodatnią liczbą całkowitą. Drabiną rzędu \(n\) nazywamy graf o wierzchołkach \(1, 2, \cdots, 2n\) i krawędziach łączących wierzchołki \(2k - 1\) z \(2k\), dla \(k = 1, 2, \cdots, n\) oraz \(2k - 1\) z \(2k + 1\) i \(2k\) z \(2(k+1)\), dla \(k = 1, 2, \cdots, n - 1\). Ile różnych drzew DFS o korzeniu w wierzchołku \(1\) można zbudować dla drabiny rzędu \(n\).