Piszę program, rozwiązując problem chińskiego listonosza (znany również jako problem z inspekcją trasy) w niedokierowanym drafcie i obecnie napotykam problem, aby znaleźć najlepsze dodatkowe krawędzie do łączenia węzłów o dziwnym stopniu, dzięki czemu mogę obliczyć obwód Eulera.
Może istnieć (biorąc pod uwagę rozmiar wykresu, który chce zostać rozwiązany) ogromna kombinacja krawędzi, które należy obliczyć i ocenić.
Przykładowo istnieje nieparzystych stopnia węzłów . Najlepsze kombinacje mogą być:
- , , ,
- , , ,
- , , ,
- ....
gdzie oznacza „krawędź między węzłem i węzłem ”.
Dlatego moje pytanie brzmi: czy istnieje znany algorytm rozwiązania tego problemu w złożoności lepszej niż czysta brutalna siła (obliczanie i ocenianie ich wszystkich)?
€: Po pewnym wysiłku badawczym znalazłem ten artykuł, mówiąc o „algorytmie dopasowania minimalnej długości Edmondsa”, ale nie mogę znaleźć żadnego pseudokodu lub opisów tego algorytmu dla uczących się (a przynajmniej ich nie rozpoznaję jako Google oferuje wiele trafień pasujących algorytmów J. Edmondsa)
Odpowiedzi:
Jak zauważono w komentarzach, Wikipedia ogranicza przegląd tras do dopasowań o minimalnej wadze . Vladimir Kolmogorov opublikował szybką implementację ważonej wersji algorytmu kwitnienia Edmondsa w C ++ [1].
[1] V. Kołmogorow, Blossom V: Nowa implementacja algorytmu perfekcyjnego dopasowania minimalnego kosztu . Mathematical Programming Computation , 1 (1): 43–67, 2009.
źródło