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ś? :)