Algorytmy i Struktury Danych Sprawozdanie nr 4

Transkrypt

Algorytmy i Struktury Danych Sprawozdanie nr 4
Algorytmy i Struktury Danych
Sprawozdanie nr 4 – Algorytmy z powracaniem
Rok akademicki
Grupa
Autorzy:
Dominik Głodek
Piotr Majewski
2013/2014
I5.1
117309
117315
Cel badania
Badanie ma na celu sprawdzenie wydajności dwóch algorytmów z powracaniem – wyszukiwanie cykli
Hamiltona oraz Eulera w grafie nieskierowanym.
Metoda przeprowadzenia badania i środowisko testowe
Algorytmy i struktury zostały zaimplementowane w języku C++. Środowisko testowe to Windows 7,
Code::Blocks, kompilator gcc. Program był odpalany na komputerze z procesorem i5-430M, 4GB
RAM. Czas wykonywania był mierzony za pomocą funkcji dostępnej w bibliotece windows.h –
QueryPerformanceCounter, poprzez zmierzenie ilości taktów zegara procesora potrzebnych do
wykonania algorytmów. Współczynnik nasycenia każdego grafu wynosił 50%. Wszystkie pomiary były
wykonywane 3-krotnie. Wynikiem jest średnia tychże 3 pomiarów.
Kod źródłowy algorytmów:
Cykl Hamiltona:
Cykl Eulera:
http://files.niko278.com/hamilton.php
http://files.niko278.com/euler.php
Wyszukiwanie cykli Hamiltona
Gęstośd grafu:
30%
50%
70%
Czas wykonywania [s]
200
150
100
50
0
5
6
7
8
9
10
11
12
13
14
15
Liczba wierzchołków
Wyszukiwanie cykli Eulera
Gęstośd grafu:
30%
50%
70%
35,00
Czas wykonywania [s]
30,00
25,00
20,00
15,00
10,00
5,00
0,00
2
3
4
5
6
7
8
9
Liczba wierzchołków
10
11
12
13
14
Analiza wyników i wnioski
Współczynnik zmienności
Współczynnik zmienności wynosił 0-12% dla cyklu Hamiltona oraz 0-16% dla cyklu Eulera. Dodatkowe
pomiary zostały uznane za zbędne.
Analiza wykresów
Na wykresach widad jak rośnie czas przeszukiwania razem z liczbą wierzchołków. Jak widad wykresy
rosną wykładniczo, więc niektóre dane byłyby poza skalą.
Wyszukiwanie cyklu Hamiltona
Znalezienie cyklu Hamiltona należy do problemów NP-zupełnych o złożoności czasowej wykładniczej
𝑂(𝑉! ∗ 𝐸). Dodatkowo liczba krawędzi grafu rośnie kwadratowo w stosunku do liczby wierzchołków:
𝐸=
𝑉∗ 𝑉−1
2
∗𝐷
E – liczba krawędzi
V – liczba wierzchołków
D – gęstośd grafu
Dlatego też złożonośd tą można zapisad jako 𝑂(𝑉! ∗ 𝑉 2 ). Zastosowany tutaj algorytm opiera się na
rekurencyjnym algorytmie przeszukiwania w głąb (DFS).
Wyszukiwanie cyklu Eulera
Znalezienie cyklu Eulera jest jeszcze wolniejsze niż znalezienie cyklu Hamiltona. Jego złożonośd
czasowa wynosi 𝑂(𝐸!). Jednak podobnie jak w poprzednim przypadku E jest zależne od V, więc w
praktyce jest to złożonośd 𝑂(𝑉 2 !). Zastosowany tutaj algorytm także oparty jest na rekurencyjnym
algorytmie przeszukiwania w głąb (DFS).
Podsumowanie
Jak widad oba algorytmy są bardzo czasochłonne. Ich złożoności czasowe uniemożliwiają sprawdzenie
w rozsądnym czasie czy graf o liczbie wierzchołków przekraczającym 15-30 zawiera dany cykl. Dla
większych liczb wierzchołków algorytmy wykonywały się na tyle długo, że pominęliśmy ich pomiary.
Dodatkowo
Screeny przedstawiające przejście całej gry… jakieś plusy czy coś? :)