1. Klasówka 2007/08#

Zadanie 1#

Słowa kluczowe: struktury danych; wzbogacanie

Opracuj strukturę danych, która pozwala wykonywać następujące operacje:

  1. \(Ini(k) ::\) inicjacja struktury danych i ustalenie długości krotek liczb całkowitych na \(k\)

  2. \(Insert(<a_1, a_2, \cdots, a_k>) ::\) dodaje do struktury krotkę \(<a_1, a_2, \cdots, a_k>\)

  3. \(Min ::\) podaje najmniejszą leksykograficznie krotkę w strukturze

  4. \(ExtractMin ::\) usuwa najmniejszą leksykograficznie krotkę ze struktury

W Twoim rozwiązaniu operacje Insert i ExtractMin powinny by wykonywane w czasie \(O(\log n + k)\).

Zadanie 2#

Słowa kluczowe: sortowanie; Insertion Sort

Udowodnij, że jeśli algorytm sortujący tablicę \(A[1..n]\) porównuje i zamienia wyłącznie elementy odległe co najwyżej o \(2007\) (tzn. jeśli porównuje \(A[i]\) z \(A[j]\), to \(|i-j| \leq 2007\)), to jego pesymistyczny czas działania jest co najmniej kwadratowy.

Zadanie 3#

Słowa kluczowe: amortyzacja

Zaproponuj implementację następujących operacji na tablicy liczb naturalnych \(T[0..n+1]\), początkowo wypełnionej zerami, w taki sposób, żeby ich koszt zamortyzowany był stały.

  1. \(Inc(i) :: T[i] = T[i] + 1\), zawsze \(0 < i < n+1\)

  2. \(BlockDec(i) ::\) Jeśli \(T[i] = 0\) nic nie rób. W przeciwnym przypadku znajdź najbliższy indeks \(j\) taki, że \(T[i] \neq T[j]\) (jeśli są dwa takie indeksy wybieramy mniejszy z nich). Dla każdego \(k\) pomiędzy \(i\) oraz \(j\) wykonaj \(T[k] = T[k] - 1\).

Zadanie 4#

Słowa kluczowe: struktury danych; AVL, struktury danych; RB

Udowodnij, że dla każdego naturalnego \(n\) istnieje drzewo czerwono-czarne o co najmniej \(n\) wierzchołkach, które nie jest AVL-drzewem.