Maski bitowe
03.10.2009 - Damian Rusak
![]() ![]() ![]() Pomocna w rozwiązaniu wielu problemów algorytmicznych z gatunku programowania dynamicznego bywa umiejętność zwięzłego zapisu wszystkich możliwych do osiągnięcia stanów. Spotykamy problemy, w których te stany to pewne podzbiory. Co to oznacza? W jaki sposób reprezentować podzbiory i czy faktycznie jest to dobry i skuteczny sposób rozwiązywania problemów algorytmicznych? Odpowiedzi na te pytania znajdziesz w tym artykule.
Problem KomiwojażeraZa przykład wykorzystania tej idei posłużyć nam może znany Problem Komiwojażera (TSP - Travelling Salesman Problem). Dla ustalenia uwagi, sprecyzujemy tu jeden z wariantów TSP :
Ten problem jest trudny i nie jest znany algorytm, który rozwiązywałby go i działał w czasie wielomianowym. Wobec tego zaatakujemy problem, znajdując w miarę dobre rozwiązanie w czasie wykładniczym. Oczywiście nietrudno znaleźć rozwiązanie w czasie Rozważmy na potrzeby przykładu poniższy graf:
Dobrą praktyką, towarzyszącą wymyśleniu algorytmu programowania dynamicznego, jest próba wyszczególnienia pewnych stanów i konstrukcja rozwiązania dla każdego z nich z wykorzystaniem uprzednio obliczonych rozwiązań dla stanów poprzedzających. Tutaj naturalne jest zasymulowanie „podróży” komiwojażera przez wierzchołki grafu. Naszym stanem może być pewien fragment przebytej drogi. Moglibyśmy przyjąć, że stan to fragment drogi od pierwszego wierzchołka na jej trasie. Szybko dochodzimy też do pomysłu na optymalizację tego podejścia - skoro (w naszym wariancie) ścieżka komiwojażera ma być cyklem, i przechodzić przez wszystkie wierzchołki, to bez straty ogólności możemy założyć, że zawsze zaczyna się ona w pewnym wyszczególnionym wierzchołku (nazwijmy go wierzchołkiem początkowym). W ten sposób przestrzeń stanów można ograniczyć do podzbiorów zbioru wierzchołków, wraz z wyszczególnionym wierzchołkiem końcowym. Teraz, szacując złożoność pamięciową, otrzymujemy
Teraz, skoro przebyliśmy drogę jedynie poprzez wierzchołki z podzbioru
Gdy dokonamy tych obliczeń dla wszystkich podzbiorów, otrzymamy najmniejsze wartości ścieżek, przebiegających wszystkie wierzchołki grafu, i kończących się w pewnym jego wierzchołku, różnym od 1. Teraz należy zamknąć cykl komiwojażera, powracając do wierzchołka nr 1. Stąd rozwiązanie to:
Nie możesz wysyłać i oglądać rowiązań tego zadania ponieważ nie jesteś zalogowany. Zaloguj się lub załóż konto.
(2 ocen) |
Copyright © 2008-2010 Wrocławski Portal Informatyczny
design: rafalpolito.com