Algorytmy i Struktury Danych, 6. ćwiczenia
2016-11-18
Spis treści
1 Tablice dynamiczne 1
2 d-kopce 2
3 Dijkstra z ograniczonymi wagami 2
1 Tablice dynamiczne
(Cormen, 17.4, strona 423–432) Potrzebujemy tablicy, która umożliwia:
• swobodny (w czasie O(1) dostęp) do wszystkich zapisanych elementów,
• rozszerzenie tablicy o następny element (na jej końcu),
• zmniejszenie tablicy o ostatni element,
Dodawanie nowych elementów możemy wykonać w następujący sposób:
• jeśli są jeszcze wolne miejsca w tablicy to dodajemy nowy element,
• jeśli tablica jest pełna, to alokujemy dwa razy większą tablicę i przepi- sujemy wszystkie stare elementy do nowej tablicy, oraz dodajemy nowy element.
Usuwanie:
• jeśli współczynnik zapełnianie jest większy niż 1/4, to usuwamy element,
• jeśli współczynnik zapełnienia spadnie poniżej 1/4, to alokujemy dwa razy mniejszą tablicę, i przepisujemy tam wszystkie stare elementy (oczywiście oprócz usuwanego).
Potencjał:
• jeśli współcznnik zapełnienia ≥ 1/2, to Φ = 2 ∗ num − size,
• jeśli współcznnik zapełnienia < 1/2, to Φ = size/2 − num,
1
2 d-kopce
d–kopiec do drzewo zupełne o stopniu d z porządkiem kopcowym (min w korze- niu). Należy pokazać, że poszczególne operacje wykonuje się w czasie:
• Min — O(1)
• DeleteMin — O(d · logd(n))
• DecreaseKey — O(logd(n))
Koszt implementacji algorytmu Dijkstry, przy użyciu d–kopców: O(nd · logd(n) + m · logd(n)).
Zanalizować jak należy dobrać d w zależności od m i n (jeśli za d weźmiemy max(2, dm/ne) to dostajemy O(log m/nm log n)).
3 Dijkstra z ograniczonymi wagami
Aby otrzymać czas O(N W + M ) potrzebujemy kolejki priorytetowej o następu- jących czasach wykonania poszczególnych operacji:
• ExtracMin — O(W )
• DecreaseKey — O(1)
Wystarczy zauważyć, że jeśli do jakiegoś wierzchołka istnieje droga, to jej długość jest ≤ N W . Czyli potrzebujemy tablicy N W elementowej (i–ty element tablicy zawiera listę nieodwiedzonych wierzchołków w odległości i od wierz- chołka początkowego).
2