1. Klasówka 2020/21 (03.12.2020)#

Zadanie 1 (8 punktów)#

Słowa kluczowe: sortowanie, optymalne porównania

Na uporządkowanym rosnąco n-elementowym ciągu \(x_1, x_2, \ldots, x_n\) dokonano dokładnie k zmian wartości elementów w tym ciągu, \(0 \le k \le n\). Ciąg otrzymany w ten sposób nazywamy k-zaburzonym.

Przykład

Uporządkowany ciąg \(\langle 2,6,8,12,21 \rangle\). Po zmianach wartości elementów - pierwszego na 7 i czwartego na 1 - dostajemy ciąg 2-zaburzony \(\langle 7,6,8,1,21 \rangle\).

Dana jest liczba całkowita k, \(0 \le k \le n\), oraz k-zaburzony ciąg \(x = \langle x_1, x_2, \ldots, x_n\rangle\). Interesuje nas wydajne sortowanie ciągu x ze względu na porównania.

  1. [3 punkty] Zaproponuj optymalne sortowanie ze względu na porównania dla k = 1 oraz

    1. [1 punkt] n = 4

    2. [2 punkty] n = 5

  2. [5 punktów] Zaproponuj asymptotycznie optymalny algorytm sortowania k-zaburzonych ciągów n-elementowych. Pamiętaj o uwzględnieniu obu parametrów - n i k.

Zadanie 2 (4 punkty)#

Słowa kluczowe: programowanie dynamiczne

Niech \(A[1\ldots 4,1\ldots n]\) będzie tablicą liczb całkowitych. Powiemy, że dwa elementy tablicy - \(A[i,j]\) oraz \(A[i’,j’]\) - są sąsiednie, jeśli ich współrzędne różnią się o 1 na dokładnie jednej pozycji. Podzbiór elementów tablicy nazywamy rozproszonym, gdy nie ma w nim elementów sąsiednich. Wagą podzbioru elementów w tablicy nazywamy sumę zawartych w nim elementów. Zaprojektuj wydajny algorytm, który dla danej tablicy A znajdzie podzbiór rozproszony o największej wadze.

Przykład

Tablica z zaznaczonym pewnym zbiorem rozproszonym o wadze -2.

Figure made with TikZ

Zadanie 3 (5 punktów)#

Słowa kluczowe: amortyzacja, sortowanie, kubełkowe

Dany jest zbiór S zawierający n różnych punktów \((x,y)\), gdzie \(x \in \{0, 1, \ldots, n\}\), \(y \in \{0, 1, \ldots, n\}\). Zaprojektuj wydajny algorytm znajdujący wszystkie punkty \((a,b)\) w zbiorze S takie, że każdy punkt \((c,d)\) z S różny od \((a,b)\) ma mniejszą co najmniej jedną współrzędną, tzn. \(a > c\) lub \(b > d\).

Zadanie 4 (3 punkty)#

Słowa kluczowe: grafy, najkrótsze ścieżki

Dany jest nieskierowany graf \(G = (V,E)\) z dodatnimi wagami na krawędziach i wyróżnionym wierzchołkiem źródłowym s. Zmodyfikuj algorytm Dijkstry w taki sposób, żeby dla każdego wierzchołka v wyznaczał wagę najlżejszej ścieżki z s do v oraz liczbę różnych ścieżek z s do v o tej wadze.