1. Klasówka 2022/23 (24.11.2022)#

Zadanie 1 [11 punktów]#

Słowa kluczowe: struktury danych

Dla dodatniej liczby całkowitej n, w tablicy a[1..n] zapisano n różnych elementów z pewnego liniowo uporządkowanego uniwersum. Rangą elementu a[i], oznaczanego przez R(i), nazywamy pozycję tego elementu w tablicy a po jej uporządkowaniu rosnąco.

Przykład

Dla a = [2, 5, 3, 4], rangami elementów a[1], a[2], a[3] i a[4] są odpowiednio 1, 4, 2, 3.

Dla nieujemnej liczby całkowitej k powiemy, że tablica jest k-zaburzona wtedy i tylko wtedy, gdy dla każdego \(i = 1, 2, \ldots, n\), \(|R(i) - i| \le k\). Dana jest liczba całkowita k, \(0 \le k < n\), oraz k-zaburzona tablica a[1..n].

  1. [4 punkty] Zaproponuj wydajny algorytm, który zbuduje w tablicy a kopiec zupełny typu MIN.

  2. [3 punkty] Zaproponuj algorytm, optymalny ze względu na liczbę porównań, sortowania 1-zaburzonej tablicy a.

  3. [4 punktów] Zaproponuj asymptotycznie optymalny algorytm sortowania tablicy a.

Zadanie 2 [4 punkty]#

Słowa kluczowe: teksty

W tym zadaniu rozważamy skończone słowa nad alfabetem {d,i,k,s}. Niech s będzie słowem i niech s[j] będzie j-tym znakiem w tym słowie. Blokiem znaku s[j] nazywamy maksymalne podsłowo s zawierające znak s[j], w którym wszystkie znaki są takie same, równe s[j]. Taki blok oznaczamy przez B(s,j).

Przykład

W słowie s = abbaac mamy B(s,3) = bb, B(s,4) = aa.

O dwóch słowach \(s_1\) i \(s_2\) powiemy, ze są podobne wtedy i tylko wtedy, gdy \(|s_1| = |s_2|\) oraz dla każdego \(j = 1, \ldots, |s_1|\), bloki \(B(s_1,j)\) i \(B(s_2,j)\) są tej samej długości.

Zaprojektuj wydajny algorytm, który dla danego zbioru Q złożonego z n skończonych słów nad alfabetem {d,i,k,s}, wyznaczy wszystkie jego maksymalne (nie dające się rozszerzyć) podzbiory słów podobnych.

Zadanie 3 [5 punków]#

Słowa kluczowe: amortyzacja

Dane są trzy, początkowo puste stosy \(S_1, S_2, S_3\). Operacja PołóżŻeton(i) polega na położeniu nowego żetonu na stos \(S_i\). Jeśli po dołożeniu żetonu liczba żetonów na stosie \(S_i\) jest 3 razy większa od łącznej liczby żetonów na dwóch pozostałych stosach, 2/3 wszystkich żetonów ze stosu \(S_i\) zostaje przeniesionych na dwa pozostałe stosy, po tyle samo żetonów na każdy z nich. Operacjami elementarnymi w procedurze PołóżŻeton są operacje stosowe Push i Pop. Dokonaj analizy kosztu zamortyzowanego operacji PołóżŻeton. Za prawidłową analizę otrzymasz 3 punkty. Za prawidłową analizę metodą funkcji potencjału - 5 punktów.

Uwaga: W każdym zadaniu uzasadnij poprawność swoich rozwiązań i dokonaj analizy złożoności obliczeniowej zaproponowanych algorytmów.