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 x1,x2,,xn dokonano dokładnie k zmian wartości elementów w tym ciągu, 0kn. Ciąg otrzymany w ten sposób nazywamy k-zaburzonym.

Przykład

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

Dana jest liczba całkowita k, 0kn, oraz k-zaburzony ciąg x=x1,x2,,xn. 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[14,1n] 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{0,1,,n}, y{0,1,,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.