Egzamin poprawkowy 2002/03#
Zadanie 1#
Podaj optymalny algorytm sprawdzania, czy w danym ciągu \(n\)-elementowym wszystkie elementy są takie same. Operacją dominującą jest porównanie dwóch elementów. Uzasadnij optymalność swojego rozwiązania.
Zadanie 2#
Wierzchołkiem rozdzielającym w spójnym grafie nazywany wierzchołek, którego usunięcie rozspójnia graf. Załóżmy, że dany jest (przez listy sąsiedztwa) spójny graf \(G\) o \(n\) wierzchołkach i \(m\) krawędziach.
Zaproponuj prosty i efektywny algorytm, znajdujący w \(G\) wierzchołek, który nie jest wierzchołkiem rozdzielającym.
Ułóż efektywny algorytm, który znajdzie taką kolejność usuwania wierzchołków z grafu \(G\), że żadne usunięcie nie rozspójni aktualnego grafu.
Zadanie 3#
Zaprojektuj strukturę danych dla skończonego multizbioru liczb całkowitych \(S\), umożliwiającą efektywne wykonywanie następujących operacji:
\(Insert(S, x, k) ::\) dodaj \(k\) egzemplarzy do zbioru \(S\).
\(Delete(S, x, k) ::\) usuń \(min(k, \#(x \in S))\) egzemplarzy \(x\) z \(S\).
\(Max(S) ::\) podaj element, który ma najwięcej wystąpień w \(S\).
Zadanie 4#
Na płaszczyźnie dodajemy kolejno punkty o współrzędnych \((x_i, y_i)\) i takie, że \(x_{i + 1} > x_i\). Po dodaniu kolejnego punktu łączymy go ze wszystkimi wcześniejszymi punktami i takimi, że dodana krawędź (odcinek) nie przetnie już istniejących krawędzi (jedynie wspólne punkty to końce odcinków). Definiujemy dwie funkcje:
\(Liczba\) - zwraca liczbę dotychczas utworzonych krawędzi,
\(Obwod\) - zwraca liczbę krawędzi na obwodzie figury powstałej w wyniku dodawania kolejnych punktów.
Zaprojektuj strukturę danych, która umożliwi dodawanie nowych punktów i obliczanie podanych funkcji w zamortyzowanym czasie stałym.