Niech A
będzie macierzą sąsiedztwa dla wykresu G = (V,E)
. A(i,j) = 1
, jeśli węzły i
i j
są połączone z krawędzią, w innym przypadku A(i,j) = 0
.Wykrywanie cykli w macierzy sąsiedztwa
Moim celem jest zrozumienie, czy G
jest acykliczne, czy nie. Cykl określa się w następujący sposób:
i
ij
są podłączone:A(i,j) = 1
j
ik
są podłączone:A(j,k) = 1
k
ii
są podłączone:A(k,i) = 1
mam zaimplementowano rozwiązanie nawigujące w macierzy w następujący sposób:
- Rozpocznij od krawędzi
(i,j)
- Wybierz zestaw
O
krawędzi, które są ustępującej odj
, czyli wszystkie 1s wj
-tego rzęduA
- Nawiguj
O
w modzie DFS - Jeśli jedna z ścieżek wygenerowanych z tej nawigacji prowadzi do węzła
i
, wówczas wykrywany jest cykl
Oczywiście ten roztwór Jon jest bardzo wolny, ponieważ muszę ocenić wszystkie ścieżki w macierzy. Jeśli A
jest bardzo duży, wymagany narzut jest bardzo duży. Zastanawiałem się, czy istnieje sposób nawigacji w 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.
Całkiem proste, ale niezbyt wydajne. n Matryca multiplikacji to tylko kilka. – Dukeling
@Dukowanie lepiej niż moc 'n' matrycy, chociaż ... – Shai