Egzamin poprawkowy 2019/20 (19.02.2020)#
Zadanie 1 [10 punktów]#
Niech \(A = [a_1, a_2, \ldots,a_n]`\) będzie ciągiem binarnym, n > 0.
[5 punktów] Zaprojektuj wydajny algorytm, który obliczy ile dokładnie porównań zostanie wykonanych w stabilnym algorytmie sortowania przez wstawianie zastosowanym do ciągu A.
[5 punktów] Ile wynosi dokładna średnia liczba porównań wykonywanych w stabilnym algorytmie sortowania przez wstawianie przy założeniu, że każdy ciąg binarny pojawia się na wejściu z jednakowym prawdopodobieństwem?
Podpowiedź
Niech \(Ile1(i) = |\{ j : a_j=1\ \mbox{oraz}\ j<i\}|\). Wynik to: \(n - 1 + \sum_{i=2}^n [a[i]=0]\cdot Ile1(i)\).
\(\Theta(n^2)\).
Zadanie 2 [10 punktów]#
Niech A będzie dynamicznym zbiorem liczb całkowitych. Zaprojektuj strukturę danych umożliwiającą wydajne wykonywanie na zbiorze A następujących operacji:
[5 punktów]
Ini(A):: zainicjuj A jako pusty;
Insert(a):: wstaw a do A;
Delete(a):: usuń a z A;
Largest:: podaj rozmiar największego podzbioru A zbudowanego z kolejnych liczb całkowitych \(i, i+1, i+2, \ldots\), dla pewnej liczby całkowitej i.
[5 punktów]
Ini(A):: \(A := \{1,2, \ldots, n\}\)
Delete(a):: usuń a z A;
Largest:: podaj rozmiar największego podzbioru A zbudowanego z kolejnych liczb całkowitych \(i, i+1, i+2, \ldots\), dla pewnej liczby całkowitej i. W tym przypadku przyjmij, że ciąg operacji Delete, Largest jest dany off-line i chcemy znać odpowiedź na każde zapytanie Largest.
Podpowiedź
Dla uproszczenia, dobry ciąg to ciąg postaci \(i, i+1, i+2, \ldots\). Wzbogacamy drzewo o dodatkwe atrybuty: MaxDobryPrefiks, MaxDobrySufiks i MaxDobry (odpowiednio najdłuższy dobry prefiks, sufiks i dowolny spójny fragment).
W trybie off-line, możemy odwrócić kolejność operacji (to powoduje, że Delete zamienia się na Insert). Możemy użyć struktury Find-Union, każdy zbiór oznacza maksymalny dobry ciąg lub pojedynczy element, który nie należy do A.
Zadanie 3 [10 punktów]#
4-kaktusem nazywamy graf spójny, w którym każda dwuspójna składowa składa się z dokładnie 4 wierzchołków.
[2 punkty] Ile wierzchołów jest w 4-kaktusie o dokładnie n dwuspójnych składowych?
[2 punkty] Jaka jest maksymalna, a jaka minimalna wysokość DFS-drzewa w 4-katusie o n dwuspójnych składowych?
[6 punktów] Dany jest 4-kaktus (przez listy sąsiedztwa) z dodatnimi wagami na krawędziach. Zaprojektuj wydajny algorytm, który dla danej pary wierzchołków u i v znajduje najlżejszą ścieżkę między nimi.
Zadanie 4 [10 punktów]#
Zaprojektuj wydajny algorytm, który dla danych słów x, y nad alfabetem
{d
, i
, k
, s
} obliczy:
[6 punktów] długość najdłuższego wspólnego podsłowa zawierającego podciąg
d
,i
,k
,s
.[4 punkty] długość najkrótszego wspólnego podsłowa zawierającego podciąg
d
,i
,k
,s
.
Podpowiedź
Jak LCS tylko dodajmy 3 wymiar ([0..4] – jak długi prefiks słowa diks już znaleziono). Złożoność czasowa \(O(n^2)\).
Zbudujmy drzewo sufiksowe dla tekstu: \(x\$y\#\). Wystarczy najpłytszy węzeł w drzewie, który: - leży w poddrzwie ścieżki diks - w poddrzewie ma zarówno sufiksy z x jak i z y. Złożoność czasowa \(O(n)\).
Uwaga: uzasadnij poprawność swoich rozwiązań i dokonaj analizy złożoności obliczeniowej zaproponowanych algorytmów.