Wykres mieszany to wykres, który może mieć zarówno skierowane, jak i nieukierowane krawędzie. Podstawowy nieukierowany wykres jest uzyskiwany przez zapomnienie orientacji skierowanych krawędzi, a w drugim kierunku orientacja mieszanego wykresu jest uzyskiwana przez przypisanie kierunku każdej nieukierunkowanej krawędzi. Zestaw krawędzi tworzy cykl na wykresie mieszanym, jeśli można go zorientować w celu utworzenia ukierunkowanego cyklu. Wykres mieszany jest acykliczny wtedy i tylko wtedy, gdy nie ma cykli.
To wszystko jest standardowe i istnieje wiele opublikowanych prac wymieniających acykliczne wykresy mieszane. Dlatego musi być znany następujący algorytm do testowania acykliczności wykresów mieszanych:
Powtórz następujące kroki:
- Usuń każdy wierzchołek, który nie ma żadnych skierowanych krawędzi skierowanych i żadnych przypadkowych nieukierowanych krawędzi, ponieważ nie może on być częścią żadnego cyklu.
- Jeśli jakikolwiek wierzchołek nie ma żadnych skierowanych krawędzi skierowanych, ale ma dokładnie jeden przypadek nieukierunkowanej krawędzi, wówczas każdy cykl używający nieukierunkowanej krawędzi musi nadejść na tej krawędzi. Zastąp nieukierowaną krawędź przez przychodzącą skierowaną krawędź.
Zatrzymaj, gdy nie będzie można wykonać więcej kroków. Jeśli wynikiem jest pusty wykres, oryginalny wykres musi być koniecznie acykliczny. W przeciwnym razie, zaczynając od dowolnego pozostałego wierzchołka, można cofać się przez wykres, na każdym kroku, przechodząc do tyłu przez przychodzącą krawędź lub podążając za nieukierowaną krawędzią, która nie jest używana do osiągnięcia bieżącego wierzchołka, aż do zobaczenia powtarzającego się wierzchołka. Sekwencja krawędzi następująca między pierwszym i drugim powtórzeniem tego wierzchołka (w odwrotnej kolejności) tworzy cykl na wykresie mieszanym.
Artykuł w Wikipedii na temat wykresów mieszanych wspomina o acyklicznych wykresach mieszanych, ale nie wspomina o tym, jak je przetestować, więc chciałbym dodać do tego coś o tym algorytmie, ale w tym celu potrzebuję opublikowanego odniesienia. Czy ktoś może mi powiedzieć, gdzie (lub inny algorytm do testowania acykliczności) pojawia się w literaturze?
źródło
Odpowiedzi:
Znajdowanie cykli mieszanych na wykresie mieszanym jest równoznaczne ze znajdowaniem elementarnych cykli kierunkowych (o długości> = 3) na odpowiednim wykresie ukierunkowanym. Odpowiedni skierowany wykres otrzymuje się z wykresu mieszanego, zastępując każdą nieukierowaną krawędź dwoma skierowanymi krawędziami skierowanymi w przeciwnych kierunkach. Dowód: (1) Każdy elementarny cykl kierunkowy (o długości> = 3) na wykreślniku odpowiada bezpośrednio cyklowi mieszanemu na wykresie mieszanym. (2) Każdy cykl mieszany na wykresie mieszanym zawiera elementarny cykl mieszany o długości> = 3, a każdy taki cykl odpowiada bezpośrednio elementarnemu kierowanemu cyklowi (o długości> = 3) na ukierunkowanym wykresie. (1) i (2) razem potwierdzają oba kierunki wypowiedzi, qed. Szukamy więc referencji, jak obliczyć (wszystkie?) Cykle elementarne (o długości> = 3) na ukierunkowanym wykresie.
Komentarze wskazują, że cs.stackexchange zawiera kilka odpowiedzi na to pytanie, ale nie jest jasne, jak uporządkować wyniki w zwięzłą odpowiedź. Ten post wydaje się ładnie podsumować (najważniejsze?) Ważne odniesienia:
Samo badanie acykliczności wydaje się łatwe: oblicz silnie połączone elementy wykresu. Każdy (podstawowy) cykl jest całkowicie zawarty w silnie połączonym komponencie. Silnie połączony komponent zawiera elementarny cykl, jeśli nie jest to drzewo bezkierunkowe.
Zaproponowany algorytm Davida Eppsteina dodatkowo oblicza jeden cykl elementarny jako dowód, a powyższe algorytmy wyliczają wszystkie cykle elementarne. Dowolny wierzchołek lub krawędź, które nie są zawarte w cyklu elementarnym, można usunąć jako krok przetwarzania wstępnego, aby poprawić szybkość powyższych algorytmów. W tym celu można zastosować algorytm Davida Eppsteina, ale nawet jeśli jest on stosowany tylko w silnie połączonych komponentach, nie usuwa on wszystkich możliwych wierzchołków lub krawędzi, które można usunąć. Ale nawet jeśli można to rozszerzyć (obliczenie drzewa wycinanego bloku pozwala przynajmniej usunąć każdy możliwy wierzchołek, który można usunąć), nie jest jasne, czy rzeczywiście poprawiłoby to szybkość powyższych algorytmów.
źródło