Wykrywanie cykli w macierzy sąsiedztwa
PozwolićA
być macierzą sąsiedztwa dla wykresuG = (V,E)
. A(i,j) = 1
jeśli węzłyi
ij
są połączone krawędzią,A(i,j) = 0
Inaczej.
Moim celem jest zrozumienie, czyG
jest acykliczny lub nie. Cykl definiuje się w następujący sposób:
i
ij
są połączone:A(i,j) = 1
j
ik
są połączone:A(j,k) = 1
k
ii
są połączone:A(k,i) = 1
Zaimplementowałem rozwiązanie, które nawiguje po macierzy w następujący sposób:
Zacznij od krawędzi(i,j)
Wybierz zestawO
krawędzi wychodzących zj
, tj. wszystkie 1s wj
-ty rządA
NawigowaćO
w sposób DFSJeśli jedna ze ścieżek wygenerowanych z tej nawigacji prowadzi do węzłai
, a następnie wykrywany jest cyklOczywiście to rozwiązanie jest bardzo powolne, ponieważ muszę ocenić wszystkie ścieżki w macierzy. JeśliA
jest bardzo duży, wymagany nakład jest bardzo duży. Zastanawiałem się, czy istnieje sposób nawigowania po macierzy sąsiedztwa, aby znaleźć cykle bez użycia drogiego algorytmu, takiego jak DFS.
Chciałbym wdrożyć moje rozwiązanie w MATLAB.
Z góry dziękuję,
Eleanore.