ASD Ćwiczenia 10: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Amal (dyskusja | edycje)
mNie podano opisu zmian
Dorota (dyskusja | edycje)
Nie podano opisu zmian
 
(Nie pokazano 3 wersji utworzonych przez jednego użytkownika)
Linia 14: Linia 14:
Zadanie 2
Zadanie 2


Udowodnij, że w implementacji listowej z heurystyką łączenia z wyważaniem koszt wykonania <math>m</math> operacji MakeSet, Find i Union, sposród których <math>n</math> to MakeSet, wynosi <math>O(m+n\log n)</math>.
Udowodnij, że w implementacji listowej z heurystyką łączenia z wyważaniem koszt wykonania <math>m</math> operacji MakeSet, Find i Union, spośród których <math>n</math> to MakeSet, wynosi <math>O(m+n\log n)</math>.


<div class="mw-collapsible mw-made=collapsible mw-collapsed">
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Rozwiązanie  
Rozwiązanie  
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
Przez indukcję dowodzimy, że długość listy zawierającej element, który miał <math>k</math> razy zmieniany wskaźnik do reprezentanta, wynosi co najmniej <math>2^k</math>. Wynika z tego, że każdy element może mieć zmieniany wskaźnik do reprezentanta co najwyżej <math>\log n</math> razy, a więc koszt zamortyzowany operacji Union wynosi <math>O(\log n)</math>.</div>
Przez indukcję dowodzimy, że długość listy zawierającej element, który miał <math>k</math> razy zmieniany wskaźnik do reprezentanta, wynosi co najmniej <math>2^k</math>. Wynika z tego, że każdy element może mieć zmieniany wskaźnik do reprezentanta co najwyżej <math>\log n</math> razy, koszt zamortyzowany operacji Union wynosi więc <math>O(\log n)</math>.</div>
</div>
</div>


Linia 71: Linia 71:
Zadanie 6
Zadanie 6


Udowodnij, że jeśli w implementacji drzewiastej z lączeniem wedlug rangi i kompresją ściezki najpierw wykonujemy wszystkie operacje Union, a dopiero potem wszystkie operacje Find, to zamortyzowany koszt operacji Find jest stały.
Udowodnij, że jeśli w implementacji drzewiastej z łączeniem według rangi i kompresją ścieżki najpierw wykonujemy wszystkie operacje Union, a dopiero potem wszystkie operacje Find, to zamortyzowany koszt operacji Find jest stały.


<div class="mw-collapsible mw-made=collapsible mw-collapsed">
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Linia 88: Linia 88:
for i := 1 to |V| do<br>
for i := 1 to |V| do<br>
&nbsp;MakeSet(v_i);<br>
&nbsp;MakeSet(v_i);<br>
T := $\emtyset$;<br>
T := <math>\emptyset</math>;<br>
for j := 1 to m do<br>
for j := 1 to m do<br>
&nbsp;niech e_j = {v_i, v_k);<br>
&nbsp;niech <math>e_j = \{v_i, v_k\}</math>;<br>
&nbsp;if Find(v_i) <> Find(v_k) then <br>
&nbsp;if Find(<math>v_i</math>) <> Find(<math>v_k</math>) then <br>
&nbsp;&nbsp;T := T $\cup$ e_j;<br>
&nbsp;&nbsp;T := T <math>\cup \{e_j\}</math>;<br>
&nbsp;&nbsp;Union(Find(v_i),Find(v_k))<br>
&nbsp;&nbsp;Union(Find(<math>v_i</math>),Find(<math>v_k</math>))<br>


Koszt tej implementacji jest zdominowany przez koszt sortowania: O(m\log m).
Koszt tej implementacji jest zdominowany przez koszt sortowania: <math>O(m\log m)</math>.
</div></div>
</div></div>



Aktualna wersja na dzień 12:28, 30 wrz 2006

Zadanie 1

Podaj przykład ciągu O(n) operacji MakeSet, Find i Union w implementacji listowej bez łączenia z wyważaniem, których łączny koszt to Θ(n2).

Rozwiązanie


Zadanie 2

Udowodnij, że w implementacji listowej z heurystyką łączenia z wyważaniem koszt wykonania m operacji MakeSet, Find i Union, spośród których n to MakeSet, wynosi O(m+nlogn).

Rozwiązanie


Zadanie 3

Udowodnij, że w implementacji drzewiastej z łączeniem według wysokości wysokość drzewa zawierającego n węzłów jest mniejsza bądź równa logn.

Rozwiązanie


Zadanie 4

Napisz pseudokod operacji MakeSet, Union i Find w implementacji drzewiastej z łączeniem według rangi i kompresją ścieżki.

Rozwiązanie


Zadanie 5

Udowodnij Lemat 1.

Rozwiązanie


Zadanie 6

Udowodnij, że jeśli w implementacji drzewiastej z łączeniem według rangi i kompresją ścieżki najpierw wykonujemy wszystkie operacje Union, a dopiero potem wszystkie operacje Find, to zamortyzowany koszt operacji Find jest stały.

Rozwiązanie


Zadanie 7

Algorytm Kruskala znajdowania minimalnego drzewa rozpinającego w grafie G=(V,E) z wagami na krawędziach działa następująco: krawędzie są przeglądane w kolejności od najlżejszej do najcięższej. Aktualnie rozważaną krawędź dodajemy do budowanego drzewa, o ile tylko nie powoduje to powstania cyklu. Jak efektywnie zaimplementować ten algorytm? Jaki jest jego czas działania?

Rozwiązanie


Zadanie 8

Napisz program generujący labirynt następująca metodą: Na początku każda komnata jest otoczona ścianami. W każdym kroku wybieramy losowo ścianę i usuwamy ją, jeśli komnaty po jej obu stronach nie są jeszcze połączone żadną drogą.

Rozwiązanie


Zadanie 9

Plansza do gry w Hex ma kształt rombu zbudowanego z sześciokątnych pól. Dwaj gracze wykonują na przemian ruchy polegające na dostawieniu pionka na jedno pole. Celem pierwszego gracza jest zbudowanie z białych pionków drogi łączącej lewy dolny brzeg planszy z prawym górnym, natomiast celem drugiego jest zbudowanie z czarnych pionków drogi łączącej lewy górny brzeg planszy z prawym dolnym.

Zaprojektuj algorytm, który po każdym ruchu sprawdza, czy nastąpiła wygrana któregoś z graczy.

Rozwiązanie