Sprawozdanie do zadania numer 2 Michał Pawlik 29836 Temat: Badanie efektywności algorytmów grafowych w zależności od rozmiaru instancji oraz sposobu reprezentacji grafu w pamięci komputera 1 WSTĘP W ramach zadania projektowego zaimplementowałem i przeanalizowałem działanie następujących algorytmów: Wyznaczających minimalne drzewo rozpinające: Prima oraz Kruskala Wyznaczających najkrótszą ścieżkę w grafie: Dijkstry Implementacje zostały wykonane z użyciem reprezentacji macierzy incydencji oraz listowej. Złożoności obliczeniowe algorytmów: Algorytm Prima O(E logv) Algorytm Kruskala O(E logv) Algorytm Dijkstry O(E logv) 2 PLAN EKSPERYMENTU 2.1 WIELKOŚCI STRUKTUR Struktury przyjmować będą wielkości 1, 25, 5, 75 i 1 wierzchołków. Dla każdej z badanych ilości wierzchołków rozpatrywane będą gęstości drzewa: 25%, 5%, 75% oraz 99%. 2.2 POMIAR CZASU Czas mierzony będzie poprzez pobranie czasu systemowego przed i po wykonaniu algorytmu, następnie policzenie ich różnicy. 2.3 GENEROWANIE GRAFÓW Dla grafów o niskiej gęstości algorytm dba o istnienie w grafie ścieżki, która łączy każdą parę wierzchołków i graf ma nie mniej krawędzi niż wynosi liczba wierzchołków pomniejszona o jeden. Dla gęstszych grafów nie zachodzi ryzyko niespójności, zatem są generowane losowo. Strona 1
Michał Pawlik 29836 3 WYNIKI EKSPERYMENTÓW 3.1 MINIMALNE DRZEWO ROZPINAJĄCE ALGORYTM KRUSKALA Reprezentacja macierzowa 1 25 5 75 1 25,816 1,2916 18,5928 86,32 258,192 5,1538 4,691 57,9664 275,71 862,42 75,2494 7,4488 19,399 534,2 1669,32 99,3776 1,654 164,2381 813,88 2555,96 Reprezentacja listowa 1 25 5 75 1 25,83 1,3129 17,9449 84,62 252,91 5,1541 3,9267 57,382 271,87 842,43 75,25 7,245 11,6292 522,68 1646,92 99,3857 1,413 161,6619 8,92 2528,45 3.2 MINIMALNE DRZEWO ROZPINAJĄCE ALGORYTM PRIMA Reprezentacja macierzowa 1 25 5 75 1 25,393 2,191 55,66 385,88 155,65 5,691 4,2588 113,34 771,24 317,82 75,115 6,2738 169,85 117,1 4684,79 99,1346 8,267 221,66 154,9 6217,86 Reprezentacja listowa 1 25 5 75 1 25,1258,18546 2,5457 13,3228 4,9815 5,18312,35366 4,9239 25,2 82,1778 75,238,51411 7,532 39,616 123,896 99,2956,68377 1,14 51,377 164,471 Strona 2
Michał Pawlik 29836 MST reprezentacja macierzowa 7 6 5 4 3 2 Prim - gęstość 25 Prim - gęstość 5 Prim - gęstość 75 Prim - gęstość 99 Kruskal - gęstość 25 Kruskal - gęstość 5 Kruskal - gęstość 75 Kruskal - gęstość 99 1-1 Strona 3
Michał Pawlik 29836 MST Reprezentacja listowa 3 25 2 Kruskal - gestosc 25 15 1 Kruskal - gestosc 5 Kruskal - gestosc 75 Kruskal - gęstość 99 Prim - gęstość 25 Prim - gęstość 5 Prim - gęstość 75 Prim - gęstość 99 5-5 Strona 4
Michał Pawlik 29836 Algorytm Prima - reprezentacja listowa 18 16 14 12 1 8 6 4 2-2 25 5 75 99 Algorytm Prima - reprezentacja macierzowa 7 6 5 4 3 2 1-1 25 5 75 99 Strona 5
Michał Pawlik 29836 Algorytm Kruskala - reprezentacja listowa 3 25 2 15 1 5-5 25 5 75 99 Algorytm Prima - reprezentacja macierzowa 7 6 5 4 3 2 1-1 25 5 75 99 Strona 6
Michał Pawlik 29836 3.3 WYZNACZANIE NAJKRÓTSZEJ ŚCIEŻKI W GRAFIE ALGORYTM DIJKSTRY Reprezentacja macierzowa 1 25 5 75 1 25,258,133,4915 1,4587 3,892 5,283,1418,7747 2,1264 4,5912 75,313,1675,9119 2,7417 6,2735 99,351,1933 1,1237 3,3525 7,811 Reprezentacja listowa 1 25 5 75 1 25,258,971,466 1,225 2,54 5,279,1236,58 1,2991 2,5692 75,317,1463,619 1,572 3,823 99,343,1641,726 1,7835 3,5392 9 Algorytm Dijkstry 8 7 6 5 4 3 2 Lista - gęstość 25 Lista - gęstość 5 Lista - gęstość 75 Lista - gęstość 99 Macierz - gęstość 25 Macierz - gęstość 5 Macierz - gęstość 75 Macierz - gęstość 99 1 Strona 7
Michał Pawlik 29836 Algorytm Dijkstry - reprezentacja listowa 4 3,5 3 2,5 2 1,5 1,5 25 5 75 99 Algorytm Dijkstry - reprezentacja macierzowa 9 8 7 6 5 4 3 2 1 25 5 75 99 Strona 8
Michał Pawlik 29836 4 WNIOSKI Dane uzyskane w pomiarach wykazały niską w stosunku do danych z literatury skuteczność reprezentacji listowej. Wynika ona z charakteru jej implementacji. W większości zaprezentowanych pomiarów zauważamy, że czas wykonania algorytmów opartych o reprezentację listową jest niższy. Dzieje się tak ze względu na krótszy czas alokacji listy w stosunku do macierzy incydencji. Rozbieżności pomiędzy danymi literaturowymi a przedstawionymi wynikami eksperymentu mogą wynikać z niedokładności pomiaru czasu w systemie Windows, różnej zajętości procesora podczas wykonywania algorytmów, niedoskonałej implementacji struktur (lista, tablica, kopiec, kolejka, stos) oraz, przede wszystkim, wpływających na efektywność błędów w implementacji algorytmów. Rzeczywiste kształty wykresów mogą nie być widoczne przy tak małej ilości danych. Algorytm Prima niezależnie od reprezentacji wykazuje niższe czasy wykonania. Ze względu na wady implementacyjne i wynikające z nich problemy z dokonaniem pomiarów, nie zamieszczono czwartego algorytmu (Forda-Bellmana) 5 BIBLIOGRAFIA W realizacji zadania projektu posiłkowałem się następującymi pomocami naukowymi: Cormen Thomas H., Leiserson Charles E., Rivest Ronald L., Wprowadzenie do Algorytmów, wyd. IV, Warszawa: Wydawnictwa Naukowo-Techniczne Algorytm Dijkstry Wikipedia, wolna encyklopedia http://pl.wikipedia.org/wiki/algorytm_dijkstry Algorytm Prima Wikipedia, wolna encyklopedia http://pl.wikipedia.org/wiki/algorytm_prima Macierz incydencji Wikipedia, wolna encyklopedia http://pl.wikipedia.org/wiki/macierz_incydencji Algorytm Kruskala Wikipedia, wolna encyklopedia https://pl.wikipedia.org/wiki/algorytm_kruskala Algorytm Forda-Bellmana Wikipedia, wolna encyklopedia https://pl.wikipedia.org/wiki/algorytm_bellmana-forda Strona 9