1. Klasówka 2004/05

1. Klasówka 2004/05#

Zadanie 1#

Słowa kluczowe: optymalne porównania

Podaj dokładne oszacowanie na liczbę liści (odpowiedzi) w drzewie decyzyjnym wyznaczającym najmniejszy element spośród elementów \(a[1], \cdots, a[n]\)? Odpowiedź uzasadnij.

Zadanie 2#

Słowa kluczowe: sortowanie; Merge Sort

Podaj permutację liczb \(1, 2, \cdots, n\), dla której podczas wykonywania algorytmu \(MergeSort\) (rekurencyjnie, z pomocniczą tablicą do scalania) element \(n\) jest porównywany z innymi największą liczbę razy. Ile wynosi taka liczba porównań? Odpowiedź uzasadnij. Możesz przyjąć, że \(n\) jest potęgą \(2\).

Zadanie 3#

Słowa kluczowe: grafy, struktury danych, amortyzacja

Rozważamy dynamiczny graf \(G\) o \(n\) wierzchołkach, na którym wykonywane są następujące operacje:

  • dodanie nowej krawędzi (możesz założyć, że nigdy nie powstaną krawędzie równoległe);

  • utożsamienie dwóch wierzchołków

Operacja utożsamienie dwóch wierzchołków polega na połączeniu ich w nowy wierzchołek (nowy wierzchołek może być reprezentowany przez jeden z wierzchołków utożsamianych), którego sąsiadami w grafie są wszyscy sąsiedzi łączonych wierzchołków. Zakładamy, że nigdy nie utożsamiamy wierzchołków pomiędzy którymi istnieje ścieżka długości \(2\).

Przed pierwszą operacją i po ostatniej operacji grafu \(G\) nie zawiera krawędzi. Graf \(G\) reprezentowany jest w pamięci komputera za pomocą list sąsiedztwa. Zaprojektuj algorytm wstawiania krawędzi i utożsamiania wierzchołków tak, aby zamortyzowany czas ich wykonania był jak najlepszy. W celu uzyskania efektywnych algorytmów możesz wzbogacić strukturę list sąsiedztwa o dodatkowe informacje. Podaj zamortyzowany i pesymistyczny czas zaprojektowanych algorytmów.

Zadanie 4#

Słowa kluczowe: struktury danych; kolejka lewicowa

Spróbuj zaprojektować kolejkę priorytetową, której podstawą są drzewa lewicowe (kolejka może być lasem drzew lewicowych), umożliwiającą wykonywanie operacji \(Insert\), \(Min\) w stałym czasie i \(DeleteMin\) w czasie zamortyzowanym \(O(\log n)\). Uzasadnij poprawność swojego rozwiązania i dokonaj analizy złożoności.