Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.54 KB | None | 0 0
  1. **********************************************
  2. * Marcin Szulc *
  3. * nr indeksu: 277342 *
  4. * email: mszulc2@mion.elka.pw.edu.pl *
  5. **********************************************
  6.  
  7. K- domknięcie grafu
  8.  
  9. ##############################################
  10.  
  11. Problem:
  12. Znalezienie takiego podzbioru wierzcholków grafu skierowanego G, z którego nie
  13. wychodzą żadne krawędzie poza ten podzbiór.
  14.  
  15. ##############################################
  16.  
  17. Uruchomianie programu:
  18.  
  19. ---------------------
  20. Tryb wczytywania z pliku:
  21. ---------------------
  22. python3 closure.py -m 1 -k 6 -c bf < infile.txt > outfile.txt
  23. gdzie:
  24. -m -> tryb
  25. -k -> wielkość domknięcia (domyślnie- maksymalne)
  26. -c -> wybrany algorytm (patrz niżej)
  27.  
  28. Dane wejściowe jako macierz sąsiedztwa, wierzchołki oddzielone spacjami, wiersze to nowe linie, np:
  29.  
  30. marcin@marcin-Lenovo-Y50-70:~/git/k-closure$ cat test.txt
  31. 0 0 1 1 0 0 0 0 0
  32. 1 0 0 0 0 0 0 0 0
  33. 0 1 0 0 0 0 0 0 0
  34. 0 0 1 0 0 0 0 0 0
  35. 0 0 0 0 0 1 0 0 0
  36. 0 0 0 0 0 0 0 0 0
  37. 0 0 0 1 0 0 0 1 1
  38. 0 0 0 0 0 0 0 0 1
  39. 0 0 0 0 0 0 0 0 0
  40. marcin@marcin-Lenovo-Y50-70:~/git/k-closure$
  41.  
  42. Prezentacja wyników:
  43. Wejściowa macierz sąsiedztwa + tabela z wynikiem, tzn: użyty algorytm, znalezione domknięcie, czas + graficzne przedstawienie znalezionego domknięcia
  44.  
  45. ---------------------
  46. Tryb generowania z parametryzacją
  47. ---------------------
  48. python3 closure.py -m 2 -c bf -v 10 -e 20 -k 5
  49. gdzie:
  50. -m -> tryb
  51. -k -> wielkość domknięcia (domyślnie- maksymalne)
  52. -c -> wybrany algorytm (patrz niżej)
  53. -v -> ilość wierzchołków generowanego grafu
  54. -e -> ilość krawędzi generowanego grafu
  55.  
  56. Prezentacja wyników:
  57. Wejściowa macierz sąsiedztwa + tabela z wynikiem, tzn: użyty algorytm, znalezione domknięcie, czas + graficzne przedstawienie znalezionego domknięcia
  58.  
  59.  
  60. ---------------------
  61. Tryb generowania z parametryzacją (zawsze szukamy największego domknięcia)
  62. ---------------------
  63. python3 closure.py -m 3 -v 10 -step 5 -er 1 -r 1 -steps 40 -c h1
  64.  
  65. gdzie:
  66. -m -> tryb
  67. -c -> wybrany algorytm (patrz niżej)
  68. -v -> ilość wierzchołków startowych
  69. -step -> wielkość kroku
  70. -steps -> ilość kroków
  71. -r -> liczba pomiarów dla danego n
  72. -er -> wartość 0.0-1.0 określająca współczynnik "wypełnienia" krawędzi (0 - brak krawędzi, 1 - graf pełny)
  73.  
  74. Prezentacja wyników:
  75. Tabela (generowana "online") z wynikami:
  76. n, czas zmierzony t(n) w sekundach, złożoność T(n), współczynnik q(n)
  77.  
  78. ---------------------
  79. Tryb porównania algorytmów
  80. ---------------------
  81. python3 closure.py -m 4 -v 20 -e 50 -k 5
  82.  
  83. gdzie:
  84. -m -> tryb
  85. -v -> ilość wierzchołków generowanego grafu
  86. -e -> ilość krawędzi generowanego grafu
  87. -k -> wielkość domknięcia (domyślnie- maksymalne)
  88.  
  89. Prezentacja wyników:
  90. Tabela z wynikami:
  91. algorytm, znalezione domknięcie, czas w sekundach, dokładność rozwiązania (porównanie z rozwiązaniem brutalnym)
  92.  
  93. ##############################################
  94.  
  95. Struktury danych:
  96. klasa Graph: obudowana macierz sąsiedztwa (lista list)
  97.  
  98. Opis użytych algorytmów:
  99.  
  100. ----------------------
  101. bf - metoda brutalna, sprawdza wszystkie możliwe kombinacje wierzchołków, jeśli nie znajdzie dla danego k- zmniejsza k
  102. ----------------------
  103. h1 - metoda heurystyczna, wywoluje sie rekurencyjnie na każdym dziecku danego wierzchołka i dodaje je do aktualnego domnięcia
  104. ----------------------
  105. h2 - metoda heurystyczna (dokładna dla grafów bez cykli), dla każdego wierzchołka grafu tworzymy listę (docelowe domknięcie),
  106. w której na początku jest tylko ten wierzchołek. Sprawdzamy każdy inny wierzchołek grafu, dodajemy go do domknięcia
  107. jeśli nie wychodzą z niego żadne krawędzie lub wychodzą krawędzie do wierzchołów znajdujących
  108. się w domknięciu. Jeśli w danym obrocie pętli dodaliśmy jakiś wierzchołek, procedurę powtarzamy.
  109. Gdy nie dodano żadnego wierzchołka domknięcie zapisujemy i tworzymy nowe domknięcie
  110. startując od kolejnego wierzchołka.
  111. Finalnie wybieramy największe domknięcie.
  112. ----------------------
  113. random - dla każdego i od k do 0 losujemy 10*|V| razy i wierzchołków i sprawdzamy czy tworzą one domknięcie
  114.  
  115. Pliki źródłowe:
  116. wszystkie użyte funkcje w pliku closure.py
  117.  
  118. ##############################################
  119.  
  120. Informacje dodatkowe:
  121. - metoda bf działa długie sekundy juz od n > 25
  122. - metoda h2 ma niską dokładność
  123. - generator w trybach m2, m3, m4 losuje wybraną liczbę krawędzi z wszystkich potencjalnych; jeśli jest to tryb m3,
  124. liczba krawędzi jest zaokrągleniem er * |V| * (|V| - 1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement