Egzamin 2005/06 (09.02.2007)#
Zadanie 1 [11 punktów]#
W tablicy a[1..n] zapisano przesunięty cyklicznie, rosnący ciąg liczb całkowitych.
(6 punktów) Zaproponuj algorytm, który wyznaczy największy element w tablicy a i zrobi to w sposób optymalny, tzn. minimalizujący w pesymistycznym przypadku liczbę porównań pomiędzy elementami ciągu
(5 punktów) Uzasadnij optymalność swojego rozwiązania.
Zadanie 2 [12 punktów]#
(6 punktów) Ile wynosi wysokość AVL-drzewa powstałego w wyniku wstawienia do pustego początkowo drzewa kolejno liczb \(1, 2,\ldots, n\)?
(6 punktów) Dla \(n>2\) podaj dwie inne permutacje liczb \(1, 2,\ldots, n\) dające takie samo AVL-drzewo jak to, o którym mowa w pytaniu a).
Uzasadnij poprawność swoich odpowiedzi.
Zadanie 3 [12 + 12 (bonus)]#
Dane jest n-wierzchołkowe, ukorzenione drzewo T – dla każdego wierzchołka znana jest lista jego dzieci oraz dany jest korzeń r. Z każdego liścia w drzewie wychodzi ścieżka w kierunku korzenia, która nie musi się kończyć w korzeniu. Ścieżki są opisane za pomocą wyroczni \(O(w, l)\), która odpowiada na pytanie: Czy węzeł w należy do ścieżki zaczynającej się w liściu l? Zaprojektuj efektywne algorytmy:
(12 punktów) sprawdzający, czy wszystkie ścieżki razem pokrywają całe drzewo,
(12 punktów - bonus) wyznaczający dla każdego liścia koniec ścieżki o porzątku w tym liściu.
Uzasadnij poprawność zaproponowanych rozwiązań i dokonaj analizy złożoności obliczeniowej zaprojektowanych algorytmów.
Zadanie 4 [5 punktów]#
Dany jest graf niezorientowany \(G=(V, E)\) oraz funkcja \(f: V\rightarrow \{1,\ldots,k\}\).
Opracuj strukturę danych udostępniającą następujące operacje:
Buduj(G, f):: tworzy strukturę danych na podstawie grafu G i funkcji f.
Odległość(v, k):: zwraca odległość od v do najbliższego wierzchołka w takiego, że f(w)=k
Ścieżka(v, k):: zwraca najkrótszą ścieżkę z v do wierzchołka w, takiego, że f(w)=k.
Przy ocenie Twojego rozwiązania będą brane pod uwagę:
czas przetwarzania zapytań Odległość i Ścieżka,
czas działania procedury Buduj,
rozmiar struktury danych,
w powyższej kolejności (tzn. należy dążyć do uzyskania jak najmniejszego czasu przetwarzania zapytań, a następnie jak najmniejszego czasu budowy struktury, następnie jak najmniejszego rozmiaru). Przyjmujemy, że k<<n.