유 방향 그래프에서 단순 사이클 찾기


15

이 문제는 매우 흥미로워 보입니다. 직접 그래프에서 간단한주기 (즉, 반복 노드가 아닌주기)를 찾으려고했습니다.

내 솔루션은 다음과 같습니다. 즉,이 그래프는 사례 문제입니다. 여기에 이미지 설명을 입력하십시오

깊이 우선 검색 (DFSTree의 내 그림에서 점선으로 표시)에서 "후면 가장자리"를 찾을 수있을 때 그래프에주기가 있다는 것을 알고 있습니다. 모든 간단한 사이클. 왜냐하면, 지시 된 예들은 사이클로부터 매우 중요하기 때문에, 즉 (0123)! = (0321)

백 에지가있는 각 노드에 대해 dfs를 만들려고 생각하지만 확실하지 않으며 명확하지 않습니다. 그래서, 당신이 나를 안내하면 부탁드립니다. 감사!. 여기에 이미지 설명을 입력하십시오

내 사건 문제에 대한 간단한 루프 수는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오


답변:


13

이 질문은 매우 Googleable 인 것으로 보입니다. 예를 들어이 백서에 제시된 알고리즘에 관심이있을 수 있습니다.

유 방향 그래프의 모든 기본 회로 찾기 . 도널드 비 존슨 SIAM J. COMPUT. Vol. 1975 년 3 월 4 일 1 일

요약. 알고리즘은 모든 기본 의해 제한 시간에 관한 그래프 - 발견되는 회로 제시 O((n + e)(c + 1))로 둘러싸인 공간 O(n + e)이 있으며, n정점 e가장자리 c그래프 기본 회로. 이 알고리즘은 Tiernan 및 Tarjan의 알고리즘과 비슷하지만 한 회로와 출력 시퀀스의 다음 회로 사이에서 각 에지를 최대 두 번 고려하기 때문에 더 빠릅니다.

이 논문에는 완전한 알고리즘이 포함되어 있습니다.


확인. 종이는 완벽하지만, 일을하면서 종이를 보거나 종이를 볼 수 있습니까? 나는 당신에게 저에게 해결책을 소개하려고 검색했습니다. 내 생각으로 무엇을 잊고 있습니까?
jonaprieto

2
주요 문제는 dfs-tree가 고유하지 않다는 것입니다 (예 : 다이어그램에서 "1"을 "3"으로 교체). 모든 사이클을 열거하려면 가능한 모든 dfs-tree를 확인해야합니다.
badroit December

1
이 알고리즘의 Java 구현이 필요한 경우 : github.com/1123/johnson
user152468

@badroit 링크가 끊어졌습니다 ... :(
Jorge E. Hernández

@ lalongooo, 고마워요, 나는 그것을 바꿨습니다.
badroit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.